如何在AER::ivreg中指定工具变量?代码报错求助
解决ivreg公式语法错误的方案
你遇到的错误length(formula)[2] %in% 1:2 is not TRUE是因为ivreg的公式格式不符合要求,结合你的需求(用lgrade作为pastS的工具变量),修正方法如下:
核心问题说明
工具变量是为了解决内生解释变量pastS的内生性问题,因此pastS必须作为解释变量出现在回归模型中,同时ivreg的公式需要严格遵循指定格式。
正确的代码写法
方法一:两部分格式(兼容性最强,所有ivreg版本支持)
将所有解释变量(外生控制变量+内生变量pastS)放在|左侧;将所有外生控制变量+工具变量lgrade放在|右侧(外生变量自身可作为工具变量):
modiv <- ivreg(servS ~ horS + size + henley + lpd + tri + turn + rail + enc20 + wheat + pastS | horS + size + henley + lpd + tri + turn + rail + enc20 + wheat + lgrade, data = regdata)
方法二:三部分格式(需较新版本AER包支持)
第一部分列外生控制变量,第二部分列内生变量pastS,第三部分列工具变量lgrade:
modiv <- ivreg(servS ~ horS + size + henley + lpd + tri + turn + rail + enc20 + wheat | pastS | lgrade, data = regdata)
注:若之前因换行导致语法解析错误,可将代码调整为一行或确保换行后的符号位置正确。
额外检查项
- 确认数据框
regdata包含所有用到的变量,且变量名无拼写错误; - 确保工具变量lgrade满足相关性(与pastS显著相关)和外生性(与模型扰动项无关)的基本条件。
内容的提问来源于stack exchange,提问作者Mikhail
相关产品推荐
相关产品推荐

