在glm中设置对比

时间:2016-08-06 17:05:02

标签: r effects glm contrast

我有来自一系列条件的二项式计数数据,这些数据是过度分散的。为了模拟它们,我使用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

2 个答案:

答案 0 :(得分:1)

效果必须相对于某个基本级别进行估算。具有3个条件中的任何一个的效果将与回归中的常数相同。

由于截距是两个估计水平cond = 0时的预期平均值(即"B""C"),因此它仅是参考组的平均值(即"A")。

因此,您基本上已经在模型中拥有此信息,或者至少尽可能地接近它。

比较组的平均值是截距加上比较组的系数。如您所知,比较组的系数因此给出了比较组= 1(记住分类变量的每个级别是虚拟变量,当该级别存在时= 1)相对于参考的效果组。

所以你的结果会给你每个级别的手段和相对效果。您当然可以根据您的存在来切换参考级别。

希望能够为您提供所需的所有信息。如果没有,那么你需要准确地问自己,你所追求的是什么信息。

答案 1 :(得分:1)

两件事:(1)如果你想要相对于均值的对比,使用contr.sum而不是默认的contr.treatment; (2)您可能不应该使用负二项模型拟合β二项式数据;请改用beta-binomial模型(例如,通过VGAMbbmle)!

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 

此处拦截是各级别的平均形状参数; cond1cond2是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)在不同条件下变化,我们将为两个参数化获得相同的对数似然。