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

循环运行线性回归后无法获取R²与F统计量的问题求助

解决线性回归结果提取与排序问题

问题根源

你的代码存在两个关键问题:

  1. 循环包含了time列本身:n <- 1661对应所有列,当x指向time列时,会执行time ~ time的无意义回归,这类回归的统计结果(如p值、R²)会异常,干扰后续提取。
  2. 直接用列索引循环,未关联微生物名称,导致结果无法对应到具体物种。

修正步骤

1. 预处理数据,排除time列

先提取所有微生物计数列,避免无效回归:

pulseregfinal <- read.csv("pulseregression.csv")
# 筛选出所有非time的列(即微生物计数列)
microbe_cols <- setdiff(colnames(pulseregfinal), "time")
time <- pulseregfinal$time

2. 重新运行线性回归

基于微生物列列表执行回归,确保每个回归都是微生物计数 ~ time:

my_lms <- lapply(microbe_cols, function(col) {
  lm(pulseregfinal[[col]] ~ time, data = pulseregfinal)
})

3. 提取完整统计结果

自定义函数一次性提取每个回归的核心指标(含R²、p值):

extract_reg_stats <- function(lm_model, microbe_name) {
  summ <- summary(lm_model)
  # 提取time变量对应的系数与p值(关注随时间变化的趋势)
  time_coef <- summ$coefficients["time", ]
  
  data.frame(
    微生物名称 = microbe_name,
    截距 = summ$coefficients["(Intercept)", 1],
    斜率 = time_coef[1],
    p值 = time_coef[4],
    R平方 = summ$r.squared,
    调整后R平方 = summ$adj.r.squared,
    stringsAsFactors = FALSE
  )
}

# 批量提取并合并为统一数据框
reg_results <- do.call(rbind, mapply(extract_reg_stats, my_lms, microbe_cols, SIMPLIFY = FALSE))

4. 按p值排序并导出

# 按p值从小到大排序(显著性从高到低)
reg_results_sorted <- reg_results[order(reg_results$p值), ]

# 导出到CSV文件
write.csv(reg_results_sorted, "微生物回归分析结果.csv", row.names = FALSE, fileEncoding = "UTF-8")

验证结果

直接查看整理好的结果:

# 查看前10个最显著的回归结果
head(reg_results_sorted, 10)

内容的提问来源于stack exchange,提问作者chessguy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:30