警告:二项式glm中的非整数#successes!(调查包)

Rob*_*ong 34 r glm

我正在使用该twang包来创建倾向得分,这些得分在二项式glm中用作权重survey::svyglm.代码看起来像这样:

pscore <- ps(ppci ~ var1+var2+.........., data=dt....)

dt$w <- get.weights(pscore, stop.method="es.mean")

design.ps <- svydesign(ids=~1, weights=~w, data=dt,)

glm1 <- svyglm(m30 ~ ppci, design=design.ps,family=binomial)
Run Code Online (Sandbox Code Playgroud)

这会产生以下警告:

Warning message:
   In eval(expr, envir, enclos) : non-integer #successes in a binomial glm!
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

我不确定这个消息在stats.SE上是否会更好,但总的来说我想我会先在这里尝试一下.

Hon*_*Ooi 51

没有什么不对,glm在指定二项式(和泊松)模型时只是挑剔.如果检测到没有,它会发出警告.试验或成功是非完整的,但它仍然适用于模型.如果您想要取消警告(并且您确定它不是问题),请family=quasibinomial改用.

  • 是的,虽然我已经看到很多人注意到他们因为这个警告而做了些傻事...... (4认同)
  • @BenBolker 感谢您的评论。当然,我发这个问题的原因是我担心我在做一些愚蠢的事情。 (3认同)
  • @PaulBailey 估计的 _regression 系数_ 是相同的。他们的_标准错误_是不同的。 (2认同)

Hab*_*hPI 7

计算上没有任何错误,但从统计学角度来说,你可能没有做出有意义的事情.在这种情况下,最好使用稳健的回归方法,如果您的数据包含精确为1或精确为0的单位,这通常是比例响应数据的好主意.

  • 您可以通过生成随机数据并使用2个族拟合模型来检查准二项式函数是否比二项式函数更健壮。您应该发现,无论数据是什么样的,或者与线性可分离类的距离有多近,模型估计都完全相同。 (2认同)

mig*_*rin 7

就像@HoongOoi说,glm.fitbinomial家人预计整数计数,否则,会抛出一个警告; 如果您需要非整数计数,请使用quasi-binomial。我的其余答案将这些进行比较。

R中的准二项式与系数估计glm.fit完全相同binomial(如@HongOoi的评论中所述),但不包括标准误差(如@nograpes的注释中所述)。

源代码比较

stats::binomial和的源代码上的差异stats::quasibinomial显示以下更改:

  • 文本“二项式”变为“准二项式”
  • aic函数返回NA而不是计算出的AIC

以及以下移除:

  • 当权重= 0时将结果设置为0
  • 检查权重的完整性
  • simfun 模拟数据的功能

只能simfun有所作为,但是的源代码未glm.fit显示该功能的使用,与stats::binomial诸如mu.eta和所返回的对象中的其他字段不同link

最小的工作例子

在这个最小的工作示例中,使用quasibinomialbinomial得到的系数结果相同:

library('MASS')
library('stats')

gen_data <- function(n=100, p=3) {

  set.seed(1)  
  weights <- stats::rgamma(n=n, shape=rep(1, n), rate=rep(1, n))
  y <- stats::rbinom(n=n, size=1, prob=0.5)
  theta <- stats::rnorm(n=p, mean=0, sd=1)
  means <- colMeans(as.matrix(y) %*% theta)
  x <- MASS::mvrnorm(n=n, means, diag(1, p, p))

  return(list(x=x, y=y, weights=weights, theta=theta))  
}

fit_glm <- function(family) {
  data <- gen_data()
  fit <- stats::glm.fit(x = data$x,
                        y = data$y,
                        weights = data$weights,
                        family = family)
  return(fit)
}

fit1 <- fit_glm(family=stats::binomial(link = "logit"))
fit2 <- fit_glm(family=stats::quasibinomial(link = "logit"))

all(fit1$coefficients == fit2$coefficients)
Run Code Online (Sandbox Code Playgroud)

与准二项式概率分布的比较

该线索表明,准二项式分布与具有附加参数的二项式分布不同phi。但是它们在统计数据和数据中的意义不同R

首先,在源代码中没有任何地方quasibinomial提到该附加phi参数。

其次,概率性与概率类似,但不恰当。在这种情况下,尽管数字不是整数,但无法计算项(n \ k),尽管可以使用Gamma函数。这对于概率分布的定义可能是个问题,但与估计无关,因为项(n选择k)不取决于参数且不属于最佳化。

对数似然估计器是:

对数似然估计

对数似然与二项式族的theta的函数为:

对数似然与二项式家庭

其中常数与参数theta无关,因此不符合优化要求。

标准误差比较

如和stats :: summary.glm中所述,通过计算的标准误差stats::summary.glmbinomialquasibinomial系列使用不同的分散值:

GLM的色散未在拟合过程中使用,但需要使用它来查找标准误差。如果dispersion未提供或NULL,则将色散1binomialPoisson族一样,并用剩余卡方统计量(根据权重非零的情况计算)除以剩余自由度来估算。

...

cov.unscaleddispersion = 1估算系数的非标度()估算协方差矩阵。

cov.scaled:同上,按缩放dispersion

使用上面的最小工作示例:

summary1 <- stats::summary.glm(fit1)
summary2 <- stats::summary.glm(fit2)

print("Equality of unscaled variance-covariance-matrix:")
all(summary1$cov.unscaled == summary2$cov.unscaled)

print("Equality of variance-covariance matrix scaled by `dispersion`:")
all(summary1$cov.scaled == summary2$cov.scaled)

print(summary1$coefficients)
print(summary2$coefficients)
Run Code Online (Sandbox Code Playgroud)

显示相同的系数,相同的未缩放方差-协方差矩阵和不同缩放后的方差-协方差矩阵:

[1] "Equality of unscaled variance-covariance-matrix:"
[1] TRUE
[1] "Equality of variance-covariance matrix scaled by `dispersion`:"
[1] FALSE
       Estimate Std. Error   z value   Pr(>|z|)
[1,] -0.3726848  0.1959110 -1.902317 0.05712978
[2,]  0.5887384  0.2721666  2.163155 0.03052930
[3,]  0.3161643  0.2352180  1.344133 0.17890528
       Estimate Std. Error   t value   Pr(>|t|)
[1,] -0.3726848  0.1886017 -1.976042 0.05099072
[2,]  0.5887384  0.2620122  2.246988 0.02690735
[3,]  0.3161643  0.2264421  1.396226 0.16583365
Run Code Online (Sandbox Code Playgroud)

  • 对于准二项式族和二项式族,系数的标准误差的计算方式不同。如果您查看 `stats::summary.glm` 函数,您可以看到差异。对于二项式族(和泊松),色散被硬编码为 1。对于准二项式族,色散以“通常”方式计算。这导致不同尺度的协方差矩阵,从而导致不同的标准误差。 (2认同)