我有来自一系列条件的二项式计数数据,这些数据是过度分散的。为了模拟它们,我使用rbetabinom
emdbook
包的R
函数实现的beta二项分布:
library(emdbook)
set.seed(1)
df <- data.frame(p = rep(runif(3,0,1)),
n = as.integer(runif(30,100,200)),
theta = rep(runif(3,1,5)),
cond = rep(LETTERS[1:3],10),
stringsAsFactors=F)
df$k <- sapply(1:nrow(df), function(x) rbetabinom(n=1, prob=df$p[x], size=df$n[x],theta = df$theta[x], shape1=1, shape2=1))
我想找到每个条件(cond
)对计数(k
)的影响。
我认为glm.nb
MASS
包的R
模型允许建模:
library(MASS)
fit <- glm.nb(k ~ cond + offset(log(n)), data = df)
我的问题是如何设置对比度,以便我得到每个条件对所有条件的平均效果的影响,而不是相对于dummy
条件A
?
答案 0 :(得分:1)
效果必须相对于某个基本级别进行估算。具有3个条件中的任何一个的效果将与回归中的常数相同。
由于截距是两个估计水平cond
= 0时的预期平均值(即"B"
和"C"
),因此它仅是参考组的平均值(即"A"
)。
因此,您基本上已经在模型中拥有此信息,或者至少尽可能地接近它。
比较组的平均值是截距加上比较组的系数。如您所知,比较组的系数因此给出了比较组= 1(记住分类变量的每个级别是虚拟变量,当该级别存在时= 1)相对于参考的效果组。
所以你的结果会给你每个级别的手段和相对效果。您当然可以根据您的存在来切换参考级别。
希望能够为您提供所需的所有信息。如果没有,那么你需要准确地问自己,你所追求的是什么信息。
答案 1 :(得分:1)
两件事:(1)如果你想要相对于均值的对比,使用contr.sum
而不是默认的contr.treatment
; (2)您可能不应该使用负二项模型拟合β二项式数据;请改用beta-binomial模型(例如,通过VGAM
或bbmle
)!
library(emdbook)
set.seed(1)
df <- data.frame(p = rep(runif(3,0,1)),
n = as.integer(runif(30,100,200)),
theta = rep(runif(3,1,5)),
cond = rep(LETTERS[1:3],10),
stringsAsFactors=FALSE)
## slightly abbreviated
df$k <- rbetabinom(n=nrow(df), prob=df$p,
size=df$n,theta = df$theta, shape1=1, shape2=1)
使用VGAM
:
library(VGAM)
## note dbetabinom/rbetabinom from emdbook are masked
options(contrasts=c("contr.sum","contr.poly"))
vglm(cbind(k,n-k)~cond,data=df,
family=betabinomialff(zero=2)
## hold shape parameter 2 constant
)
## Coefficients:
## (Intercept):1 (Intercept):2 cond1 cond2
## 0.4312181 0.5197579 -0.3121925 0.3011559
## Log-likelihood: -147.7304
此处拦截是各级别的平均形状参数; cond1
和cond2
是1级和2级与平均值的差异(这不会给出3级与平均值的差异,但通过构造它应该是(-cond1-cond2
)...)
我发现bbmle
的参数化(具有logit-probability和色散参数)更容易:
detach("package:VGAM")
library(bbmle)
mle2(k~dbetabinom(k, prob=plogis(lprob),
size=n, theta=exp(ltheta)),
parameters=list(lprob~cond),
data=df,
start=list(lprob=0,ltheta=0))
## Coefficients:
## lprob.(Intercept) lprob.cond1 lprob.cond2 ltheta
## -0.09606536 -0.31615236 0.17353311 1.15201809
##
## Log-likelihood: -148.09
对数似然大致相同(VGAM参数化稍好一些);理论上,如果我们允许shape1和shape2(VGAM)或lprob和ltheta(bbmle
)在不同条件下变化,我们将为两个参数化获得相同的对数似然。