在估算零通胀模型时如何用R获取系数

时间:2011-05-19 09:18:18

标签: r statistics

可能很简单,但我想知道,在使用zeroinfl命令时如何获取系数?

treatment <- factor(rep(c(1, 2), c(43, 41)), 
    levels = c(1, 2),labels = c("placebo", "treated"))
improved <- factor(rep(c(1, 2, 3, 1, 2, 3), c(29, 7, 7, 13, 7, 21)),
    levels = c(1, 2, 3),labels = c("none", "some", "marked"))

numberofdrugs <- rpois(84, 2)
healthvalue <- rpois(84,0.5)
y <- data.frame(healthvalue,numberofdrugs, treatment, improved)

require(pscl)
ZIP<-zeroinfl(healthvalue~numberofdrugs+treatment+improved, y)

summary(ZIP)

我通常使用ZIP$coef[1]来获取系数,但不幸的是,你在这里抓了一大堆。那么如何从ZIP模型中获取单个系数呢?

2 个答案:

答案 0 :(得分:5)

使用coef提取函数列出一个长向量中的所有系数,然后您可以使用单索引表示法来选择它们:

coef(ZIP)[1]

count_(Intercept) 
        0.1128742 

或者,您需要选择首先获得系数的模型:

ZIP$coef$count[1]

(Intercept) 
  0.1128742

ZIP$coef[[1]][1]

(Intercept) 
  0.1128742 

答案 1 :(得分:1)

如果你想获得幻想,你可以将系数分成一个列表:

clist <- function(m) {
  cc <- coef(m)
  ptype <- gsub("_.+$","",names(cc))
  ss <- split(cc,ptype)
  lapply(ss, function(x) names(x) <- gsub("^.*_","",names(x)))
}
> clist(ZIP)
$count
     (Intercept)    numberofdrugs treatmenttreated     improvedsome 
     -1.16112045       0.16126724      -0.07200549      -0.34807344 
  improvedmarked 
      0.23593220 

$zero
     (Intercept)    numberofdrugs treatmenttreated     improvedsome 
        7.509235       -14.449669       -58.644743        -8.060501 
  improvedmarked 
       58.034805 


c1 <- clist(ZIP)
c1$count["numberofdrugs"]