R语言plm面板回归剔除索引NA后报下标不匹配错误问题
报错原因
R数据框索引语法为数据集[行筛选条件, 列筛选条件],逗号前后分别控制行、列的保留规则。
你的代码误将year字段的非NA判断写在了列筛选位置:!is.na(mydata$year)返回长度等于数据集总行数(报错中提到的2366)的逻辑向量,但数据集仅包含6列,逻辑向量长度与待筛选的列数不匹配,直接触发列下标索引错误。
原筛选逻辑的核心偏差是:你需要剔除的是ID、year字段为NA的行观测,但错把year的非NA判断放到了列筛选位,相当于用行维度的判断条件筛选列,必然报错。
修正方案
将两个索引字段的非NA判断都放到行筛选位置,筛除缺失索引的行后再做回归,不需要额外筛选列:
# 清洗索引列存在NA的行 clean_data <- mydata[!is.na(mydata$ID) & !is.na(mydata$year), ] # 运行固定效应面板回归 result <- plm(VarX ~ VarY + VarZ, data = clean_data, index = c("ID", "year"), model = "within")
如果需要同时剔除回归变量中含NA的行,既可以在行筛选条件中补充对应字段的非NA判断,也可以直接在plm函数中加入参数na.action = na.omit自动处理非索引列的缺失值。
内容的提问来源于stack exchange,提问作者Matteo G. M. Pastore
相关产品推荐
相关产品推荐

