[英]Estimate SE for all factor levels with zero-inflated model
我有一個相當復雜的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。
我也可以使用預測函數,但是predict.zeroinfl不會給出誤差估計,並且我不確定如何解釋偏移量的影響。
類似的論文只是將原始數據的箱圖放在預測的箱圖旁邊,然后進行比較。 我覺得我應該能夠做得更好。
下面是創建預測值的代碼和圖:
MyDat$phat<-predict(ZINB, type="response")
MyDat$phat_os<-MyDat$phat/MyDat$offset
plot(phat~fac1, MyDat)
是引導方式嗎? 我已經嘗試過了,由於不確定的事情遇到了種種麻煩。
在此先感謝您,如果我要進行愚蠢的監督/假設,請對我放輕松。 我仍在學習,但是這些統計數據讓我感覺有些遙不可及。
對於初學者,您可以繪制模型系數及其置信區間。 arm
軟件包具有coefplot
函數,但是它沒有用於zeroinfl
模型的方法,因此我在下面使用ggplot2
創建了一個簡單的系數圖。 zeroinfl
模型的predict
方法沒有提供預測的置信區間,但是對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()
這就是情節的樣子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.