使用零膨胀模型估算所有因子水平的SE

时间:2016-04-13 20:42:11

标签: r statistics confidence-interval dummy-variable

我有一个相当复杂的ZINB模型。我试图复制我正在尝试做的基本结构:

MyDat<-cbind.data.frame(fac1 = rep(c("A","B","C","D"),10), 
       fac2=c(rep("X",20),rep("Y",20)), 
       offset=c(runif(20, 50,60),runif(20,150,165)), 
       fac3=rep(c(rep("a1",4),rep("a2",4),rep("a3",4),rep("a4",4),rep("a5",4)),2),
       Y=c(0,0,0,1,0,0,11,10,0,0,0,5,0,0,0,35,60,0,0,0,0,2,0,0,16,0,0,0,0,0,3,88,0,0,0,0,0,0,27,0))

f<-formula(Y~fac1+ offset(log(offset))|fac3+ fac2) 
ZINB <-zeroinfl(f, dist = "negbin",link = "logit", data = MyDat)
summary(ZINB)

该模型的主要目标是在四个层面上研究fac1的影响。其他变量更多只是采样过程的假象。

这是输出:

Call:
zeroinfl(formula = f, data = MyDat, dist = "negbin", link = "logit")

Pearson residuals:
      Min        1Q    Median        3Q       Max 
-0.418748 -0.338875 -0.265109 -0.001566  2.682920 

Count model coefficients (negbin with log link):
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -1.7192     0.9220  -1.865 0.062239 .  
fac1B        -4.4161     1.4700  -3.004 0.002663 ** 
fac1C        -1.2008     1.2896  -0.931 0.351778    
fac1D         0.1928     1.3003   0.148 0.882157    
Log(theta)   -1.7349     0.4558  -3.806 0.000141 ***

Zero-inflation model coefficients (binomial with logit link):
            Estimate Std. Error z value Pr(>|z|)
(Intercept) -11.5899   210.8434  -0.055    0.956
fac3a2       -0.4775     2.4608  -0.194    0.846
fac3a3      -11.2284   427.5200  -0.026    0.979
fac3a4       10.7771   210.8056   0.051    0.959
fac3a5       -0.3135     2.3358  -0.134    0.893
fac2Y        11.8292   210.8298   0.056    0.955
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Theta = 0.1764 
Number of iterations in BFGS optimization: 76 
Log-likelihood: -63.82 on 11 Df

我已经查阅了论文和统计书籍和论坛,但我仍然不确定如何提供这些信息。我真正想要的是一个条形图,显示Y轴上的效果和X上的4个级别。

如果我理解正确的话,fac1的等级A当前设置为0,并且是我的参考等级(如果我错了,请纠正我)。所以,我可以制作4个等级的图(包括等级A为零)。这似乎并不理想。我真的希望所有级别都有95%的CI。

我也可以使用预测函数,但是预测.zeroinfl没有给出误差估计,我不确定如何解释偏移的影响。

类似的论文刚刚将原始数据的箱线图放在预测的箱线图旁边并进行了比较。我觉得我应该能做得更好。

以下是创建预测值的代码和图表:

MyDat$phat<-predict(ZINB, type="response")
MyDat$phat_os<-MyDat$phat/MyDat$offset

plot(phat~fac1, MyDat)

Predictions plot

引导的方式是什么?我已经尝试过这种方法并遇到各种麻烦,我不确定是否有必要。

提前谢谢你,如果我做出愚蠢的疏忽/假设,请放轻松。我还在学习,但这些统计数据感觉有些超出我的范围。

1 个答案:

答案 0 :(得分:1)

对于初学者,您可以使用其置信区间绘制模型系数。 arm包具有coefplot函数,但它没有zeroinfl模型的方法,所以我使用ggplot2在下面创建了一个简单的系数图。 predict模型的zeroinfl方法不提供预测的置信区间,但this answer to a question on CrossValidated显示了如何为zeroinfl模型构建自举置信区间。

关于fac1的级别:A是参考级别,因此其他级别的系数相对于fac1 = "A"

library(pscl)
library(ggplot2)

MyDat<-cbind.data.frame(fac1 = rep(c("A","B","C","D"),10), 
                       fac2=c(rep("X",20),rep("Y",20)), 
                       offset=c(runif(20, 50,60),runif(20,150,165)), 
                       fac3=rep(c(rep("a1",4),rep("a2",4),rep("a3",4),rep("a4",4),rep("a5",4)),2),
                       Y=c(0,0,0,1,0,0,11,10,0,0,0,5,0,0,0,35,60,0,0,0,0,2,0,0,16,0,0,0,0,0,3,88,0,0,0,0,0,0,27,0))

f<-formula(Y ~ fac1 + offset(log(offset))|fac3 + fac2) 
ZINB <-zeroinfl(f, dist = "negbin",link = "logit", data = MyDat)

# Extract coefficients and standard errors from model summary
coefs = as.data.frame(summary(ZINB)$coefficients$count[,1:2])
names(coefs)[2] = "se" 
coefs$vars = rownames(coefs)

# Coefficient plot
ggplot(coefs, aes(vars, Estimate)) + 
  geom_hline(yintercept=0, lty=2, lwd=1, colour="grey50") +
  geom_errorbar(aes(ymin=Estimate - 1.96*se, ymax=Estimate + 1.96*se), 
                lwd=1, colour="red", width=0) +
  geom_errorbar(aes(ymin=Estimate - se, ymax=Estimate + se), 
                lwd=2.5, colour="blue", width=0) +
  geom_point(size=4, pch=21, fill="yellow") +
  theme_bw()

这就是情节的样子。

enter image description here