Rod*_*din 1 r beta-distribution glm
我想知道这里有人可以帮助我.
我试图将beta GLM与betareg包相匹配,因为我的因变量是一个比例(500米网格大小的鲸鱼的相对密度)从0到1不等.我有三个协变量:
我的因变量有很多0,许多值太接近于0(如7.8e-014).当我尝试拟合模型时,以下错误显示:
invalid dependent variable, all observations must be in (0, 1).
Run Code Online (Sandbox Code Playgroud)
从我之前的讨论看来,这似乎是由数据集中的0引起的(我不应该有任何0或1).当我将所有0改为正定(例如0.0000000000000001)时,我得到的错误信息是:
Error in chol.default(K) :
the leading minor of order 2 is not positive definite
In addition: Warning messages:
1: In digamma(mu * phi) : NaNs produced
2: In digamma(phi) : NaNs produced
Error in chol.default(K) :
the leading minor of order 2 is not positive definite
In addition: Warning messages:
1: In betareg.fit(X, Y, Z, weights, offset, link, link.phi, type, control) :
failed to invert the information matrix: iteration stopped prematurely
2: In digamma(mu * phi) : NaNs produced
Run Code Online (Sandbox Code Playgroud)
从我在几个论坛上看到的情况来看,这似乎是因为我的矩阵不是肯定的.它可以是不定的(即具有正特征值和负特征值)或者我的矩阵可以接近奇异,即它的最小特征值非常接近0(因此计算上它是0).
我的问题是:因为我只有这个数据集,有没有办法解决这些问题并运行beta回归?或者,是否有其他模型可以使用而不是betareg包可以使用?
这是我的代码:
betareg(Density~DEPTH+DISTANCE_TO_COAST+DIST_BOAT,data=misti)
Run Code Online (Sandbox Code Playgroud)
当我将所有0改为正定时(例如0.0000000000000001)
这样做似乎是一个坏主意,导致您看到的错误消息.
看起来betareg目前只对(0,1)区间内的数据有严格的作用,这就是包装插图所说的内容:
由Ferrari和Cribari-Neto(2004)引入的β回归模型类可用于对连续变量y进行建模,该变量假设在开放标准单位区间(0,1)中的值.[...]此外,如果y也假定极值0和1,实际上有用的变换是(y·(n-1)+ 0.5)/ n,其中n是样本大小(Smithson和Verkuilen 2006).
因此,解决这个问题的一种方法是:
y.transf.betareg <- function(y){
n.obs <- sum(!is.na(y))
(y * (n.obs - 1) + 0.5) / n.obs
}
betareg( y.transf.betareg(Density) ~ DEPTH+DISTANCE_TO_COAST+DIST_BOAT, data=misti)
Run Code Online (Sandbox Code Playgroud)
有关betareg使用binomial带logit链接的GLM 的替代方法,请参阅Cross Validated上的此问题以及链接的UCLA常见问题解答:
有些人建议使用quasibinomialGLM代替比例/百分比...