我的问题是以最有效的方式提取N泊松随机值(RV),每个值具有不同的平均值/速率Lam.基本上是size(RV) == size(Lam).
这是一个天真(非常慢)的实现:
import numpy as NP
def multi_rate_poisson(Lam):
rv = NP.zeros(NP.size(Lam))
for i,lam in enumerate(Lam):
rv[i] = NP.random.poisson(lam=lam, size=1)
return rv
Run Code Online (Sandbox Code Playgroud)
在我的笔记本电脑上,1e6样品给出:
Lam = NP.random.rand(1e6) + 1
timeit multi_poisson(Lam)
1 loops, best of 3: 4.82 s per loop
Run Code Online (Sandbox Code Playgroud)
有可能从中改进吗?
我有一个问题,我想使用概率分布生成1到5之间的一组随机整数值.
Poisson和Inverse Gamma是两个分布,它们显示了我所发现的特征(多数均值,更低的数字).
我正在寻找使用Apache Commons Math,但我不知道如何使用可用的发行版生成我想要的数字.
我实现了这个函数来生成一个泊松随机变量
typedef long unsigned int luint;
luint poisson(luint lambda) {
double L = exp(-double(lambda));
luint k = 0;
double p = 1;
do {
k++;
p *= mrand.rand();
} while( p > L);
return (k-1);
}
Run Code Online (Sandbox Code Playgroud)
其中mrand是MersenneTwister随机数生成器.我发现,当我增加lambda时,预期的分布将是错误的,其平均值在750左右饱和.是由于数值近似还是我犯了什么错误?
我在某处读到python库函数random.expovariate产生的等效间隔等于Poisson Process事件.
是真的如此,还是应该对结果强加一些其他功能?
我正在使用C++ 11中提供的随机数生成器.目前,我正在使用统一分布,这应该给我一个相同的概率来获得我指定的A和B范围内的任何数字.
但是,我对生成泊松分布感到困惑.虽然我理解如何确定泊松概率,但我不明白如何根据泊松分布"随机分布"一系列随机数.
例如,泊松分布的C++ 11构造函数采用一个参数--λ,即分布的均值
std::tr1::poisson_distribution<double> poisson(7.0);
std::cout << poisson(eng) << std::endl;
Run Code Online (Sandbox Code Playgroud)
在泊松概率问题中,这等于给定间隔期间的预期成功/发生次数.但是,我不明白它在这个例子中代表什么.随机数场景中的"成功"/"发生"是什么?
我感谢任何帮助或参考资料,我可以用它来帮助我理解这一点.
我的任务是开发一个回归模型,查看不同项目中的学生注册情况.这是一个非常好的,干净的数据集,其中注册计数遵循泊松分布.我在R中拟合模型(使用GLM和零膨胀泊松.)得到的残差似乎是合理的.
然而,当时我被要求将学生的数量改为"费率",这个数字计算为学生/学校人口(每个学校都有自己的人口.))现在这不再是计数变量,而是0到1之间的比例这被认为是一项计划中的"入学比例".
这个"比率"(学生/人口)不再是泊松,但肯定也不正常.所以,我对适当的分布有点迷失,后续的模型代表它.
对数正态分布似乎很适合这个速率参数,但是我有很多0值,所以它实际上不适合.
关于这个新参数的最佳分布形式的任何建议,以及如何在R中建模?
谢谢!
我需要在Python 3中编写一个函数,该函数返回根据均匀空间泊松过程分散的矩形字段(例如100x100点)上的位置(x,y)的数组。
到目前为止,我已经使用Python代码找到了该资源,但是不幸的是,我无法找到/安装适用于Python 3的scipy:
http://connor-johnson.com/2014/02/25/spatial-point-processes/
但是,它帮助我了解了泊松积分过程实际上是什么以及它如何工作。
我已经使用numpy.random.poisson已有一段时间了,但是我很难解释它的返回结果。
http://docs.scipy.org/doc/numpy/reference/generation/numpy.random.poisson.html
>>> import numpy as np
>>> np.random.poisson(1, (1, 5, 5))
array([[[0, 2, 0, 1, 0],
[3, 2, 0, 2, 1],
[0, 1, 3, 3, 2],
[0, 1, 2, 0, 2],
[1, 2, 1, 0, 3]]])
Run Code Online (Sandbox Code Playgroud)
我认为该命令的作用是创建一个5x5字段 =(1、5、5),并在该字段上以lambda = 1的速率分散对象。结果矩阵中显示的数字是物体位于该特定位置的概率。
我如何根据同一个空间泊松过程在5x5场上散射10个对象?我的第一个猜测是遍历整个数组,然后在每个位置上将一个对象插入一个“ 3”,然后在每个位置上将一个对象插入一个“ 2”,依此类推,但我不确定实际的概率应用于确定是否应插入对象。
根据以下资源,我可以通过简单地将速率和对象计数(10 * 1 = 10)相乘并将该值用作我的lambda来模拟以速率1散布在一个字段上的10个对象。
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
[ 8, 6, 8, 12, 9],
[12, 4, 10, 3, …Run Code Online (Sandbox Code Playgroud) 我想用R中的一个预测器来估计指数危险模型.出于某种原因,当我使用带有偏移log t的glm poisson并且当我只使用生存包中的幸存函数时,我得到具有相反符号的系数.我确信这个解释非常明显,但我无法弄清楚.
例
t <- c(89,74,23,74,53,3,177,44,28,43,25,24,31,111,57,20,19,137,45,48,9,17,4,59,7,26,180,56,36,51,6,71,23,6,13,28,16,180,16,25,6,25,4,5,32,94,106,1,69,63,31)
d <- c(0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1)
p <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1)
df <- data.frame(d,t,p)
# exponential hazards model using poisson with offest log(t)
summary(glm(d ~ offset(log(t)) + p, data = df, family = "poisson"))
Run Code Online (Sandbox Code Playgroud)
生产:
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -5.3868 0.7070 -7.619 2.56e-14 ***
p 1.3932 0.7264 1.918 0.0551 .
Run Code Online (Sandbox Code Playgroud)
相比
# exponential hazards model using survreg exponential
require(survival)
summary(survreg(Surv(t,d) ~ p, data = df, dist = "exponential"))
Run Code Online (Sandbox Code Playgroud)
生产:
Value Std. Error z p …Run Code Online (Sandbox Code Playgroud) 我正在尝试对一年中工人缺勤天数的计数数据(因变量)进行建模。我有一组预测变量,包括有关工人、有关他们的工作等的信息,其中大多数是分类变量。因此,需要估计大量系数 (83),但由于我有超过 600 000 行,我认为这应该不会有问题。此外,我的数据集中没有缺失值。
我的因变量包含很多零值,所以我想使用包zeroinfl的函数来估计零膨胀模型(泊松或负二项式) pscl,代码如下:
zpoisson <- zeroinfl(formule,data=train,dist = "poisson",link="logit")
Run Code Online (Sandbox Code Playgroud)
但长时间运行后出现以下错误:
Error in solve.default(as.matrix(fit$hessian)) : system is computationally singular: reciprocal condition number = 1.67826e-41
Run Code Online (Sandbox Code Playgroud)
我认为这个错误意味着我的一些协变量是相关的,但在检查成对相关性和方差膨胀因子(VIF)时似乎并非如此。此外,我还估计了其他模型,如 logit 和 Poisson 或负二项式计数模型,没有出现问题,而这些类型的模型对相关预测变量也很敏感。
您知道为什么该zeroinfl功能不起作用吗?这是否与我有太多的预测变量有关,即使它们不相关?我已经尝试使用该Boruta算法删除一些预测变量,但它保留了所有预测变量。
在此先感谢您的帮助。
我正在尝试运行泊松模型,如下所示:
poisson_model_xg = smf.glm(formula="xG ~ home + team + opponent", data=xg_model_data,
family=sm.families.Poisson()).fit()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValueError:endog 已计算为具有形状 (760, 9) 的多列数组。当转换为 endog 的变量是非数字(例如 bool 或 str)时,就会发生这种情况。
但我无法弄清楚这是什么意思,因为我所有的数据框都是数字:
xg_model_data.apply(lambda s: pd.to_numeric(s, errors='coerce').notnull().all())
Out[10]:
goals True
xG True
team True
opponent True
home True
dtype: bool
Run Code Online (Sandbox Code Playgroud) poisson ×10
python ×4
r ×3
random ×3
c++ ×2
numpy ×2
probability ×2
regression ×2
exponential ×1
glm ×1
java ×1
knuth ×1
math ×1
scipy ×1
singular ×1
spatial ×1
statistics ×1