我有一个相当复杂的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)
引导的方式是什么?我已经尝试过这种方法并遇到各种麻烦,我不确定是否有必要。
提前谢谢你,如果我做出愚蠢的疏忽/假设,请放轻松。我还在学习,但这些统计数据感觉有些超出我的范围。
答案 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()
这就是情节的样子。