比例建模 - Betareg错误

时间:2014-10-15 14:53:49

标签: r glm beta-distribution

我想知道这里有人可以帮助我。

我正在尝试使用betareg包装的beta GLM,因为我的因变量是一个比例(500米网格大小的鲸鱼的相对密度)从0到1不等。我有三个协变量:

  • 深度(以米为单位测量,范围从4到100米),
  • 到海岸的距离(以米为单位测量,范围从0到21346米)和
  • 与船只的距离(以米为单位,以0到20621为单位)。

我的因变量有很多0和许多值太接近于0的值(如7.8e-014中所示)。当我尝试拟合模型时,以下错误显示:

invalid dependent variable, all observations must be in (0, 1). 

从我之前的讨论看来,这似乎是由数据集中的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

从我在几个论坛上看到的情况看来,这似乎是因为我的矩阵不是肯定的。它可能是不定的(即具有正特征值和负特征值)或者我的矩阵可能接近奇异,即它的最小特征值非常接近0(因此计算结果为0)。

我的问题是:由于我只有这个数据集,有没有办法解决这些问题并运行beta回归?或者,是否有其他模型我可以使用而不是betareg包它可以工作?

这是我的代码:

betareg(Density~DEPTH+DISTANCE_TO_COAST+DIST_BOAT,data=misti)

2 个答案:

答案 0 :(得分:6)

  

当我将所有0改为正定(例如0.0000000000000001)

这样做似乎是一个坏主意,导致您看到的错误消息。

似乎betareg目前仅适用于(0,1)区间内的数据,而package vignette所说的内容如下:

  

由法拉利和Cribari-Neto(2004)引入的β回归模型类可用于对连续变量y进行建模,该变量假设在开放标准单位区间(0,1)中的值。 [...]此外,如果y也假设极值0和1,实际上有用的转换是(y·(n-1)+ 0.5)/ n,其中n是样本大小(Smithson和Verkuilen 2006)。 / p>

所以解决这个问题的方法之一是:

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)

对于betareg的替代方法,使用带有binomial链接的logit GLM,请参阅有关Cross Validated和链接的UCLA常见问题的此问题:

有些人会建议使用quasibinomial GLM代替比例/百分比......

答案 1 :(得分:0)

您可以使用因变量的逻辑变换运行线性模型,而不是beta回归。请尝试以下方法:

   logistic <- function(p) log(p / (1-p) +0.01)
   lm(logistic(Density)~DEPTH+DISTANCE_TO_COAST+DIST_BOAT,data=misti)