我正在尝试运行由另一位研究人员编写的 R 代码,但在基于 zelig 函数建模的后验模拟返回风险比时,它总是给我错误。复制的材料可以在这里下载。更具体地说,我无法运行“_replic.ind2006.AJPS”代码,该代码使用“individualdataset2006”数据(它都在 zip 存档中)。
以下代码是从第 74 行到第 92 行编写的。
a matched.data <- match.data(matching)
matched.data$lula <- as.numeric(as.character(matched.data$lula))
matched.data$renda <- factor(matched.data$renda)#refactor because highest category was dropped
matched.data$renda2 <- factor(matched.data$renda2)#re
fit.ate <- lm(lula ~ bf + sexo + escola + renda + idade + region, data=matched.data, weights=matched.data$weights)
fit1 <- zelig(lula ~ bf + sexo + escola + renda + idade + region, model="logit",data=tmp)
fit1m <- zelig(lula ~ bf + sexo + escola + renda + idade + region + metropolitan, model="logit",weights=matched.data$weights,data=matched.data)
#FOR ALL OBSERVATIONS
inc <- levels(new.data$renda)
rr <- pred.bf0 <- pred.bf1 <- sig <-vector(length=length(levels(new.data$renda)))
for(i in 1:length(inc)){
bf0 <- setx(fit1 , bf=0, renda=inc[i])
bf1 <- setx(fit1 ,bf=1, renda=inc[i])
rr[i] <-summary(sim(fit1,x=bf0,x1=bf1))$qi.stats$rr[1]
sig[i] <- summary(sim(fit1,x=bf0,x1=bf1))$qi.stats$rr[3]>1
pred.bf0[i] <- mean(sim(fit1,x=bf0)$qi$ev)
pred.bf1[i] <- mean(sim(fit1,x=bf1)$qi$ev)
}
这部分从使用匹配程序开始,然后是通过 logit 函数估计模型。那么问题从哪里开始呢?它在运行循环时精确开始
for(i in 1:length(inc))
其中length(inc)
表示分类变量的级别数,这意味着,在实践中,1:4
。
代码无法运行
rr[i] <-summary(sim(fit1,x=bf0,x1=bf1))$qi.stats$rr
它应该存储来自估计的风险比率。它给出了以下错误:
rr[i] <- summary(sim(fit1, x = bf0, x1 = bf1))$qi.stats$rr[1] 中的错误:替换长度为零
我首先认为这是一个循环问题,如果我“手动”存储风险比,但运行
summary(sim(fit1, x = bf0, x1 = bf1))$qi.stats$rr[1]
独自返回NULL
。事实上,如果我只返回没有 的摘要$qi.stats$rr[1]
,则输出中没有风险比,它只给我期望值、预测值和一阶差异。
运行时也报“replacement has zero length”的问题
pred.bf0[i] <- mean(sim(fit1,x=bf0)$qi$ev)
但不同的是我可以通过 得到期望值get_qi
,所以现在这不是一个大问题,虽然它很麻烦。
有人对此有任何线索吗?
先感谢您。