调用eivtools包eivreg函数失败,求替代EIV回归函数
eivreg()函数找不到的解决办法及替代方案 先排查基础问题
- 先确认
eivtools包是否正确安装:运行install.packages("eivtools")重新安装,有时候包会因为依赖缺失或镜像问题安装不完整 - 如果重装后还是报找不到函数的错,大概率是这个包已经从CRAN下架或者停止维护了,下面给你几个可用的替代工具
首选替代:AER包的ivreg()函数
AER是R里常用的计量经济学工具包,ivreg()支持工具变量回归,完全可以用来处理含测量误差的EIV回归场景,不管是指定工具变量还是利用已知测量误差结构校正都能实现。
适配原示例的代码实现
把你原来用eivtools的代码改成用AER的版本,逻辑和原代码一致:
library(AER) set.seed(1001) ## 模拟协变量x1、x2和z的数据 .n <- 1000 .d <- data.frame(x1 = rnorm(.n)) .d$x2 <- sqrt(0.5)*.d$x1 + rnorm(.n, sd=sqrt(0.5)) .d$z <- as.numeric(.d$x1 + .d$x2 > 0) ## 生成结果变量y ## 真实回归参数为c(2,1,1,-1) .d$y <- 2.0 + 1.0*.d$x1 + 1.0*.d$x2 - 1.0*.d$z + rnorm(.n) ## 生成带测量误差的协变量w1、w2 Sigma_error <- diag(c(0.20, 0.30)) dimnames(Sigma_error) <- list(c("w1","w2"), c("w1","w2")) .d$w1 <- .d$x1 + rnorm(.n, sd = sqrt(Sigma_error["w1","w1"])) .d$w2 <- .d$x2 + rnorm(.n, sd = sqrt(Sigma_error["w2","w2"])) ## 方案1:用真实变量做工具变量(对应原代码指定Sigma_error的场景) # 因为我们知道真实的x1、x2,直接把它们作为w1、w2的工具变量 .mod1 <- ivreg(y ~ w1 + w2 + z | x1 + x2 + z, data = .d) print(class(.mod1)) .tmp <- summary(.mod1) print(class(.tmp)) print(.tmp) ## 方案2:基于可靠性信息校正(对应原代码reliability参数的场景) # 可靠性lambda = 真实方差 / 观测方差,这里通过加权观测变量近似实现 .lambda <- c(1,1) / (c(1,1) + diag(Sigma_error)) .mod2 <- ivreg(y ~ I(w1*.lambda[1]) + I(w2*.lambda[2]) + z | x1 + x2 + z, data = .d) print(summary(.mod2))
其他可选替代工具
sem包:适合用结构方程模型框架处理测量误差,通过定义测量模型实现EIV回归lavaan包:同样基于结构方程模型,支持更复杂的测量误差建模,适合多变量、多误差来源的场景
内容的提问来源于stack exchange,提问作者Gonzalo de Quesada
相关产品推荐
相关产品推荐

