R语言lpirfs包运行面板局部投影模型遇‘empty model’错误求助
解决lpirfs包运行面板局部投影模型时的"empty model"错误
针对运行lp_lin_panel和lp_nl_panel时出现的plm.fit(...) : empty model错误,以下是具体排查和解决步骤:
1. 检查工具变量的存在性(针对线性模型)
你的线性模型代码中设置了iv_reg = TRUE, instrum = "GPRIV",但你描述的数据集里并没有名为GPRIV的变量,仅包含滞后GPR。如果你的工具变量是滞后GPR,需要将instrum参数改为实际的列名(比如假设滞后GPR列名为GPR_lag):
results_panel_2 <- lp_lin_panel(data_set = data_3, data_sample = "Full", endog_data = 'Inflation', shock = 'GPR', iv_reg = TRUE, instrum = "GPR_lag", # 改为实际滞后GPR的列名 panel_model = "within", panel_effect = "twoways", robust_cov = "vcovSCC", confint = 1, hor = 25)
工具变量不存在会直接导致plm无法构建有效模型,这是触发"empty model"的常见原因。
2. 补全非线性模型的切换变量参数
对于lp_nl_panel的switching = "IRT"(通胀目标制 regime 切换),你需要通过switch_var参数指定对应的通胀目标制虚拟变量列名(比如假设列名为IT_dummy),否则模型无法识别切换规则,导致空模型:
results_panel <- lp_nl_panel(data_set = data_3, data_sample = "Full", endog_data = 'Inflation', shock = 'GPR', panel_model = 'within', panel_effect = 'twoways', robust_cov = 'vcovSCC', switching = "IRT", switch_var = "IT_dummy", # 补充切换变量列名 lag_switching = FALSE, gamma = 10, confint = 1, hor = 25)
3. 确保面板数据结构正确
- 必须使用双索引的
pdata.frame,即同时指定国家和时间:data_3 <- pdata.frame(data, index = c("Country", "Time")) - 验证时间序列格式:将
Time列转换为季度格式(确保plm能正确识别时间维度):library(zoo) data$Time <- as.yearqtr(data$Time) # 假设Time列是类似"1985Q1"的格式 data_3 <- pdata.frame(data, index = c("Country", "Time")) - 检查面板平衡性:使用
plm::is.pbalanced(data_3)验证是否为平衡面板,局部投影模型通常要求平衡面板,若为非平衡面板,需先处理缺失值(比如data_3 <- data_3[complete.cases(data_3), ])。
4. 验证变量无缺失和格式正确
- 检查所有模型用到的变量(Inflation、GPR、工具变量、切换变量)是否存在缺失值:
colSums(is.na(data_3)) - 确保所有数值变量为
numeric类型,虚拟变量为integer或factor类型,避免因类型错误导致模型无法识别变量。
内容的提问来源于stack exchange,提问作者Samantha Borkhoche
相关产品推荐
相关产品推荐

