R语言非平衡面板多变量协整与单位根检验方法咨询
面板单位根、协整检验实操方案
purtest函数index参数与数据格式要求
- 你之前手动用
split拆分变量转宽表的操作完全没必要,purtest原生支持标准长格式面板数据,只需要先把数据转为plm包识别的pdata.frame对象,通过index参数指定个体ID列和时间列即可,非平衡面板也可直接适配。 - 要求的输入格式就是你现有的原始数据结构:每行对应1个「个体-年份」观测,列依次为个体标识、年份标识、所有研究变量,和你给出的示例
df结构完全一致,不需要做宽表转换。 - 具体调用方法参考如下代码,基于你提供的测试数据即可直接运行:
library(plm) # 转换为plm识别的面板数据对象,index第一个参数是个体列名,第二个是时间列名 p_df <- pdata.frame(df, index = c("id", "year")) # 直接对目标变量做单位根检验,例:对var1做IPS单位根检验 purtest(p_df$var1, test = "ips", exo = "intercept", lags = "AIC")
- 多变量批量做单位根检验不需要逐变量手动处理,用
lapply循环变量列即可一次性完成:
# 指定需要检验的所有变量名 target_vars <- c("var1", "var2") # 批量输出所有变量的检验结果 unit_root_results <- lapply(target_vars, function(col) { purtest(p_df[[col]], test = "ips", exo = "intercept", lags = "AIC") }) names(unit_root_results) = target_vars
多变量面板协整检验实现方法
- plm包内置的
pcoint函数支持一次性输入多个变量完成面板协整检验,不需要逐对变量手动拆分处理,同样适配前面构造的pdata.frame长格式面板对象。 - 基础调用示例:检验var1和var2的协整关系
# 以Johansen协整检验为例,K为滞后阶数,可根据信息准则调整 coint_result <- pcoint(~ var1 + var2, data = p_df, type = "johansen", K = 2) summary(coint_result)
- 如果需要检验多组不同的变量组合,同样可以通过循环传入不同公式批量输出结果,效率远高于手动逐组处理。
缺失值(NA)的影响
- 面板单位根、协整检验默认采用行删除法处理缺失值,即只要某行的目标变量存在NA,对应观测就会被剔除。如果变量NA占比过高,会直接压缩有效样本量,大幅降低检验的统计效力,甚至导致结果偏误。
- 对应处理规则可参考:
- 若NA为随机缺失且整体占比低于5%,直接使用默认行删除法即可,结果不会出现明显偏差
- 若NA占比较高,建议先根据数据属性选择合理的插补方法(如组内线性插值、相邻年份均值插补等)补全数据后再做检验,需要在研究中明确报告缺失值处理逻辑
- 若NA集中在少数个体或特定时间段,可以截取平衡面板子样本做检验,作为稳健性结果对照
内容的提问来源于stack exchange,提问作者philipp.kn_98
相关产品推荐
相关产品推荐

