我的任务是开发一个回归模型,查看不同项目中的学生注册情况.这是一个非常好的,干净的数据集,其中注册计数遵循泊松分布.我在R中拟合模型(使用GLM和零膨胀泊松.)得到的残差似乎是合理的.
然而,当时我被要求将学生的数量改为"费率",这个数字计算为学生/学校人口(每个学校都有自己的人口.))现在这不再是计数变量,而是0到1之间的比例这被认为是一项计划中的"入学比例".
这个"比率"(学生/人口)不再是泊松,但肯定也不正常.所以,我对适当的分布有点迷失,后续的模型代表它.
对数正态分布似乎很适合这个速率参数,但是我有很多0值,所以它实际上不适合.
关于这个新参数的最佳分布形式的任何建议,以及如何在R中建模?
谢谢!
我正在尝试对一年中工人缺勤天数的计数数据(因变量)进行建模。我有一组预测变量,包括有关工人、有关他们的工作等的信息,其中大多数是分类变量。因此,需要估计大量系数 (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) 我已经尝试了这两种方法,但我发现这两种方法都有困难..在我告诉你我对这两种方法的问题之前,我试图更好地解释我的问题。
我有一个数据集“接受”,其中我有医院每天接受的数量,其中包含前面描述的独立变量。医院有三个地方供我们就诊……所以在我的数据集中,我每天有 3 行,每个地方都有。数据集看起来像:
Date Place NumerAccept weekday month NoConvention Rain
2008-01-02 Place1 203 wed Gen 0 1
2008-01-02 Place2 70 wed Gen 0 1
2008-01-02 Place3 9 wed Gen 0 1
2008-01-03 Place1 345 thu Gen 0 1
2008-01-03 Place2 24 thu Gen 0 1
2008-01-03 Place3 99 thu Gen 0 1
2008-01-04 Place1 339 fri Gen 0 0
2008-01-04 Place2 36 fri Gen 0 0
2008-01-04 Place3 101 fri Gen 0 0
Run Code Online (Sandbox Code Playgroud)
.... 等等...我有直到昨天的数据集,所以最后三行是昨天 2013 年 7 月 …
我给出了P(x1 ... n)离散独立概率值,它代表了例如发生X的可能性.
我想要一个问题的通用代码:X发生的概率是在同一时间发生的0-n次?
例如:给定:每辆车(A,B,C)停放的3个概率P(A),P(B),P(C).问题是:哪个概率不会有车,一辆车,两辆车和三辆车停放?
例如,两辆车同时停车的答案是:
P(A,B,~C) = P(A)*P(B)*(1-P(C))
P(A,~B,C) = P(A)*(1-P(B))*P(C)
P(~A,B,C) = (1-P(A))*P(B)*P(C)
P(2 of 3) = P(A,B,~C) + P(A,~B,C) + P(~A,B,C)
Run Code Online (Sandbox Code Playgroud)
我已经编写了所有可能性的代码,但是我得到的值越多,当然由于更多可能的组合而得到的速度越慢.
% probability: Vector with probabilities P1, P2, ... PN
% result: Vector with results as stated above.
% All possibilities:
result(1) = prod(probability);
shift_vector = zeros(anzahl_werte,1);
for i = 1:anzahl_werte
% Shift Vector allocallization
shift_vector(i) = 1;
% Compute all unique permutations of the shift_vector
mult_vectors = uperm(shift_vector);
% Init Result Vector
prob_vector = zeros(length(mult_vectors(:,1)), …Run Code Online (Sandbox Code Playgroud) 我正在调试一组更大的嵌套模型,这些模型在优化期间只会遇到问题.在将我认为导致错误归零的过程中,我遇到了rpois()函数中的异常行为.
似乎具有非常大的平均值,rpois()返回NA而不是值.此问题不会生成警告.请参阅下面的可重现代码集.
> rpois(1,3000000000)
[1] NA
Run Code Online (Sandbox Code Playgroud)
我的问题有两个:
1 - 为什么它显示出这种行为(rpois函数的整数大小是否存在最大限制?)和
2 - 是否有解决方法来阻止NA的生成(即使这是将平均输入的大小限制为某个较小的值)?
我在64x Windows 7中运行32x R版本3.0.2.
我正在尝试使用rpois().创建泊松模拟.我有两个小数位利率的分布,我想知道它们是否具有泊松而不是正态分布.
该rpois()函数返回正整数.我希望它返回两个小数位的正数而不是.我尝试了以下内容
set.seed(123)
trialA <- rpois(1000, 13.67) # generate 1000 numbers
mean(trialA)
13.22 # Great! Close enough to 13.67
var(trialA)
13.24 # terrific! mean and variance should be the same
head(trialA, 4)
6 7 8 14 # Oh no!! I want numbers with two decimals places...??????
# Here is my solution...but it has a problem
# 1) Scale the initial distribution by multiplying lambda by 100
trialB <- rpois(1000, 13.67 * 100)
# 2) Then, divide …Run Code Online (Sandbox Code Playgroud) 这是数据和设置:
library(fitdistrplus)
library(gamlss)
finalVector <- dput(finalVector)
c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我正在以不固定速率的毫秒级采样泊松过程。我通过基于该间隔的平均速率检查每个大小增量的间隔中是否存在事件来离散化采样过程。由于我正在使用Python,因此它的运行速度比我希望的要慢一些。我当前使用的代码如下:
import numpy
def generate_times(rate_function,max_t,delta):
times = []
for t in numpy.arange(delta,max_t,delta):
avg_rate = (rate_function(t)+rate_function(t+delta))/2.0
if numpy.random.binomial(1,1-math.exp(-avg_rate*delta/1000.0))>0:
times.extend([t])
return times
Run Code Online (Sandbox Code Playgroud)
速率函数可以是任意的,考虑到速率函数,我不是在寻找封闭形式的解决方案。
如果您想使用一些参数,可以尝试:
max_t = 1000.0
delta = 0.1
high_rate = 100.0
low_rate = 0.0
phase_length = 25.0
rate_function = (lambda x: low_rate + (high_rate-low_rate)*0.5*(1+math.sin(2*math.pi*x/phase_length)))
Run Code Online (Sandbox Code Playgroud) 所以我使用 statsmodel 包对我的数据集进行泊松回归,我确保我的训练 y 确实是计数和整数。但是,当我打印预测值(下面的测试模式)时,它们是浮点数。
我非常困惑,我希望它们是整数,因为输入数据和适合模型的数据是整数,而泊松输出计数数据。你知道我哪里错了吗?预先非常感谢。
import statsmodels.api as sm
poi_model = sm.GLM(trainingy,trainingx, family=sm.families.Poisson())
poi_results = poi_model.fit()
paramet = poi_results.params
testmodely = poi_model.predict(paramet, testx, linear=False)
Run Code Online (Sandbox Code Playgroud) poisson ×10
r ×6
regression ×4
python ×2
binomial-cdf ×1
glm ×1
intervals ×1
lambda ×1
matlab ×1
permutation ×1
prediction ×1
probability ×1
random ×1
simulation ×1
singular ×1