假设您正在对二项式数据进行建模,其中每个响应是来自多个试验(N)的一些成功(y)以及一些解释变量(a和b)。有一些函数可以执行此类操作,并且它们似乎都使用不同的方法来指定y和N.
在glm中,你做glm(cbind(y,N-y)~a+b, data = d)
(LHS的成功/失败矩阵)
在inla中,您执行inla(y~a+b, Ntrials=d$N, data=d)
(分别指定试验次数)
在glmmBUGS中,你做glmmBUGS(y+N~a+b,data=d)
(指定成功+试验作为LHS的条款)
在编写新方法时,我一直认为最好遵循glm的功能,因为人们通常会首先遇到二项式响应数据。但是,我永远不会记得它是cbind(y,N-y)
还是cbind(y,N)
- 我通常似乎在我的数据中有成功/数量的试验,而不是成功/失败次数 - YMMV。
当然,其他方法也是可能的。例如,使用RHS上的函数来标记变量是试验次数还是失败次数:
myblm( y ~ a + b + Ntrials(N), data=d)
myblm( y ~ a + b + Nfails(M), data=d) # if your dataset has succ/fail variables
或定义一个运算符来执行一个cbind,所以你可以这样做:
myblm( y %of% N ~ a + b, data=d)
因此,它为LHS增添了一些含义,使其明确。
有没有人有更好的想法?什么是正确的方法?
答案 0 :(得分:1)
您也可以让y
成为分数,在这种情况下您需要提供weights
。它不在formula
参数中,而是几乎相同数量的击键,就好像它在formula
中一样。这是一个例子
> set.seed(73574836)
> x <- runif(10)
> n <- sample.int(10, 2)
> y <- sapply(mapply(rbinom, size = 1, n, (1 + exp(1 - x))^-1), function(x)
+ sum(x == 1))
> df <- data.frame(y = y, frac = y / n, x = x, weights = n)
> df
y frac x weights
1 2 1.000 0.9051 2
2 5 0.625 0.3999 8
3 1 0.500 0.4649 2
4 4 0.500 0.5558 8
5 0 0.000 0.8932 2
6 3 0.375 0.1825 8
7 1 0.500 0.1879 2
8 4 0.500 0.5041 8
9 0 0.000 0.5070 2
10 3 0.375 0.3379 8
>
> # the following two fits are identical
> summary(glm(cbind(y, weights - y) ~ x, binomial(), df))
Call:
glm(formula = cbind(y, weights - y) ~ x, family = binomial(),
data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.731 -0.374 0.114 0.204 1.596
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.416 0.722 -0.58 0.56
x 0.588 1.522 0.39 0.70
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9.5135 on 9 degrees of freedom
Residual deviance: 9.3639 on 8 degrees of freedom
AIC: 28.93
Number of Fisher Scoring iterations: 3
> summary(glm(frac ~ x, binomial(), df, weights = weights))
Call:
glm(formula = frac ~ x, family = binomial(), data = df, weights = weights)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.731 -0.374 0.114 0.204 1.596
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.416 0.722 -0.58 0.56
x 0.588 1.522 0.39 0.70
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9.5135 on 9 degrees of freedom
Residual deviance: 9.3639 on 8 degrees of freedom
AIC: 28.93
Number of Fisher Scoring iterations: 3
上述工作的原因归结为glm
实际上对二项式结果所做的事情。无论您如何指定结果,它都会计算每次观察的分数和与观察相关的权重。以下是来自?glm
的摘录,其中提供了估算中的内容
如果通过提供双列响应来指定
binomial
glm
模型,prior.weights
返回的权重是案例总数 (由提供的案例权重计算)和组件y
结果是成功的比例。
或者,您可以使用glm.fit
为glm
或model.frame
制作包装器。请参阅...
?model.frame
参数
对于...
方法,
model.frame
,混合了诸如的其他参数 要传递给默认方法的数据na.action
,subset
。任何 其他参数(例如offset
和weights
或其他名称 达到默认方法的参数)用于进一步创建 模型框架中的列,带括号括起的名称"(offset)"
。
之后我看到了Ben Bolker的评论。以上是他指出的内容。
答案 1 :(得分:0)
我喜欢glm文档中的这个方法:
对于二项式和准二项式家族,反应也可以 指定为一个因子(当第一个级别表示失败时,全部 其他人的成功)
这与我的经验中经常出现的成功和失败的方式很吻合。一个是全能(例如&#34;没有投票&#34;)并且有多种方式来实现另一个(例如&#34;投票给A&#34;,&#34;投票支持B&#34;)。我希望从我说出这个&#34;成功&#34;的方式中可以清楚地看出来。和&#34;失败&#34;由HEAD
定义的可以任意定义,以便第一级对应于&#34;失败&#34;而所有其他级别都是成功的&#34;。
答案 2 :(得分:-2)
来自r的glm帮助页面: “......或作为一个双列矩阵,列中的数字为成功和失败”
所以它必须是cbind(Y,N-Y)