You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:54