R语言IV回归工具变量检验报无效系数/变量名错误求助
工具变量相关性检验报错排查与修复方案
报错直接诱因
你收到Contains bad coefficients/varaible names报错的核心原因是linearHypothesis的假设语句中使用的系数名,和lm回归实际生成的系数名不匹配:
- f10、f15为三分类变量,R拟合线性模型时会自动将其转换为哑变量,默认以因子的第一个水平为参照组,生成的系数命名规则为变量名+非参照组水平名,比如若f10的参照水平为
worse,则生成的系数为f10no sibling、f10better,你写的f10本身不是回归输出中的有效系数名,因此无法识别。 - 你不需要将f10、f15转换为整数格式:转为整数相当于默认三个分类水平是等距线性关系,会强行约束变量的边际效应,反而会导致第一阶段估计偏误,保留因子格式即可。
代码其他隐藏错误
你的第一阶段回归存在逻辑错误:方程右侧包含了被解释变量indexlit1_new1,这会导致完全共线性,最终得到的第一阶段估计结果完全无效,需要先删除右侧重复的被解释变量。
完整修复步骤
- 修正第一阶段回归代码
# 移除右侧重复的被解释变量indexlit1_new1 stage1 <- lm(indexlit1_new1 ~ f10 + f15 + age + edu2 + edu3 + edu4 + edu5 + male + partner + numkids + retired + dum_selfempl + lincome + tot_non_equity_wealth_cat, data = Finlit)
- 查看回归实际生成的系数名,确认工具变量对应的哑变量命名
# 输出所有系数名,找到f10、f15对应的哑变量名称 names(coef(stage1))
- 对照实际系数名编写联合显著性检验假设
比如输出显示f10对应的系数为f10no sibling、f10better,f15对应的系数为f15dont know、f15intermediate or high,则检验两个工具变量联合显著性的写法为:
# 需替换为你上一步输出的实际系数名 myH0 <- c("f10no sibling = 0", "f10better = 0", "f15dont know = 0", "f15intermediate or high = 0") # 检验时直接指定稳健标准误,和你之前的标准误设置保持一致 linearHypothesis(stage1, myH0, vcov = vcovHC(stage1))
内容的提问来源于stack exchange,提问作者Mr. world r
相关产品推荐
相关产品推荐

