R语言面板数据线性回归代码无法返回fit与rsq问题求解
问题原因分析
你的代码存在4个核心错误导致无法得到正确结果:
- 回归公式中错误使用
df[3,i]:该语法仅提取第3行第i列的单个数值,线性回归需要传入整列数据作为因变量 - 未对结果做持久化存储:循环中每次迭代都会覆盖
fit和rsq变量,循环结束后仅会保留最后一次迭代的结果 - 数值列判断逻辑错误:仅判断第三行是否为数值,无法保证整列都是数值类型,应该直接判断列本身的类型
- 未过滤无效列:id、id1、Gender这些列不需要作为因变量参与回归,会出现无意义的回归结果
优化后代码
# 初始化结果存储容器 fit_list <- list() rsq_vec <- c() # 筛选需要作为因变量的数值列:排除id、id1、Gender列,且列类型为数值 target_cols <- names(df)[!names(df) %in% c("id", "id1", "Gender") & sapply(df, is.numeric)] for(i in target_cols) { # 整列作为因变量,构建回归公式 fit <- lm(df[[i]] ~ Gender, data=df) # 存储拟合结果 fit_list[[i]] <- fit # 存储决定系数 rsq_vec[i] <- summary(fit)$r.squared } # 查看所有拟合结果 fit_list # 查看所有决定系数 rsq_vec
结果说明
- 所有列的拟合模型都存在
fit_list列表中,可通过fit_list[['a1']]的方式调取指定列的拟合结果 - 所有列的决定系数都存在
rsq_vec命名向量中,可直接打印查看所有值,也可通过名称调取指定列的R方 - 如果是标准面板数据分析需要控制个体/时间效应,建议使用
plm包的plm()函数替换基础lm(),输出结果会更符合面板回归的规范
内容的提问来源于stack exchange,提问作者Rfanatic
相关产品推荐
相关产品推荐

