基于美联储主席任期窗口的R滚动回归报错排查求助
排查"object 'FEDFUND' not found"错误并实现任期窗口滚动回归
一、核心错误原因排查
- 作用域/数据绑定问题:滚动回归的自定义函数未明确指定数据框,R会默认在全局环境查找变量,但变量实际存储在数据框中,导致找不到。比如直接写
lm(FEDFUND ~ TauxInflation + Outputgap)而非lm(..., data = 你的数据框) - 子集化失误:筛选主席任期数据时,可能误过滤掉
FEDFUND列,或子集化后数据框为空,比如列名拼写错误、二进制标识字段值异常(全为0) - 大小写敏感:R对变量名大小写严格检查,确认数据框中变量名是
FEDFUND(全大写),而非FedFund或小写变体 - 滚动函数参数错误:使用
rollapply等工具时,未设置by.column = FALSE,导致传入函数的是单列数据而非完整数据集
二、修复后的实现代码
假设你的数据集名为macro_data,包含6位美联储主席的二进制标识字段(如Burns、Miller、Volcker、Greenspan、Bernanke、Powell),以下是可运行的代码示例:
1. 定义任期数据筛选与回归函数
# 提取指定主席的任期数据(仅保留所需变量) get_chair_subset <- function(chair_col) { macro_data[macro_data[[chair_col]] == 1, c("FEDFUND", "TauxInflation", "Outputgap")] } # 单窗口回归函数:返回截距、通胀率系数、产出缺口系数 run_regression <- function(sub_data) { # 样本量不足时返回NA,避免报错 if(nrow(sub_data) < 3) return(c(NA, NA, NA)) model <- lm(FEDFUND ~ TauxInflation + Outputgap, data = sub_data) coef(model) }
2. 按主席任期执行滚动回归
library(zoo) # 所有主席的标识字段名 chair_list <- c("Burns", "Miller", "Volcker", "Greenspan", "Bernanke", "Powell") reg_results <- list() # 遍历每位主席,执行滚动回归(窗口大小设为4,可按需调整) for(chair in chair_list) { chair_data <- get_chair_subset(chair) if(nrow(chair_data) == 0) next # 跳过无有效任期数据的条目 # 滚动回归:align="right"表示窗口取最近的n期数据 rolling_coefs <- rollapply(chair_data, width = 4, FUN = run_regression, by.column = FALSE, align = "right") reg_results[[chair]] <- rolling_coefs } # 查看单主席的回归结果(示例:Volcker任期) print(reg_results[["Volcker"]])
三、验证与调试步骤
- 先测试单任期的静态回归:
lm(FEDFUND ~ TauxInflation + Outputgap, data = macro_data[macro_data$Volcker == 1, ]),若报错直接定位数据问题 - 检查变量有效性:
colnames(macro_data)确认FEDFUND存在;sum(is.na(macro_data$FEDFUND))查看是否有大量空值 - 若使用
dplyr处理数据,确认未通过select()或mutate误删/重命名FEDFUND字段
内容的提问来源于stack exchange,提问作者Az7
相关产品推荐
相关产品推荐

