固定效应回归中虚拟变量的高效创建问题(R语言plm包)
国家固定效应回归:日度面板数据的虚拟变量生成问题
数据与研究背景
- 拥有34个国家的日度时间面板数据,记录各国军事援助承诺日期、欧元金额
- 目标:运行国家固定效应回归,研究军事援助总额随时间的变化,核心自变量是基于日期生成的虚拟变量
success(1=援助成效显著,0=无明显成效)
遇到的核心问题
- 时间单位为天,需要为每个国家未提供援助的每一天生成对应记录,但手动编码34×365个虚拟变量不现实
- 为处理
plm无法识别NA的问题,将无援助的空日期设为none,但R误将其当作独立国家,导致回归结果不显著且系数方向与预期相反 - 尝试用
plm的index参数自动生成虚拟变量未果;用factor()按天分组时,因多国同日提供援助出现non-unique values when setting 'row.names'错误
当前数据集示例
| State | an_date | val_eur | success |
|---|---|---|---|
| Belgium | 22/02/26 | 7600000 | 0 |
| Slovakia | 22/02/26 | 11000000 | 0 |
| none | 22/02/27 | 0 | 0 |
最小可复现示例(MRE)
# 创建基础示例数据 state <- c("Belgium","Slovakia","NA") an_date <- as.Date(c("26/02/2022","26/02/2022","27/02/2022"), format = "%d/%m/%Y") val_eur <- c(7600000, 11000000, 0) df <- data.frame(state, an_date, val_eur) # 计算入侵后天数 inv_date <- as.Date("2022-02-24") df$t <- difftime(df$an_date, inv_date, units="days") df$t <- as.numeric(df$t) df$t_sq <- df$t^2 # 创建战场成效虚拟变量(bse) library(lubridate) bse <- interval(ymd("2022-02-27"), ymd("2022-03-04")) df$bse <- df$an_date %within% bse df$bse <- as.integer(df$bse) # 尝试固定效应回归 library(plm) fe_mod <- plm(val_eur ~ bse + t, index=c("state"), model="within", data=df)
注:运行该MRE时出现“模型为空”错误,但原始模型无此问题
求助需求
寻求高效生成或让R识别所需虚拟变量的方法,解决日度面板下国家固定效应回归的数据集构造与回归运行问题
内容的提问来源于stack exchange,提问作者Elmo_
相关产品推荐
相关产品推荐

