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

使用sapply分组拟合nlsLM模型后,如何导出参数及R平方至CSV?

解决分组非线性回归结果导出格式混乱的问题

我懂你现在的困扰:分组跑nlsLM后,直接导出summary的列表到CSV会格式乱成一团,只导出系数又缺了标准误、t值、p值这些关键统计量。下面给你一套可行的方案,能把每个分组的参数估计、核心统计量,还有拟合优度(伪R²)都整理成整齐的表格导出。

步骤1:定义提取统计量的专用函数

先写一个函数,专门处理每个分组的数据:拟合模型后,把需要的所有统计量提取出来,整理成规范的数据框结构。

extract_nls_stats <- function(d) {
  # 拟合非线性模型
  nlsfit <- nlsLM(form = SGP ~ a * exp(-b*exp(-c*time)), 
                  data = d, 
                  start = list(a=30, b=1.5, c=0.053))
  
  # 提取系数表(包含Std. Error、t value、Pr(>|t|))
  coef_table <- as.data.frame(summary(nlsfit)$coefficients)
  # 添加系数名称列,方便区分a/b/c
  coef_table$parameter <- rownames(coef_table)
  # 标记当前分组的code
  coef_table$code <- unique(d$code)
  
  # 计算非线性模型的伪R²(nls没有内置R²,这是行业常用的拟合优度计算方式)
  total_deviance <- deviance(lm(SGP ~ 1, data = d))  # 空模型的偏差(总变异)
  model_deviance <- deviance(nlsfit)                  # 拟合模型的偏差(残差变异)
  r_squared <- 1 - model_deviance / total_deviance
  coef_table$r_squared <- r_squared
  
  # 调整列顺序,让关键信息排在前面
  coef_table <- coef_table[, c("code", "parameter", "Estimate", 
                               "Std. Error", "t value", "Pr(>|t|)", 
                               "r_squared")]
  
  return(coef_table)
}

步骤2:批量处理分组数据并合并结果

用这个函数处理所有分组,再把分散的结果合并成一个完整的数据框:

# 按code分组处理每个子数据集
grouped_stats <- lapply(split(data, data$code), extract_nls_stats)

# 把所有分组的结果合并成一个统一的数据框
final_results <- do.call(rbind, grouped_stats)

# 重置行名,避免导出时出现混乱的行号
rownames(final_results) <- NULL

步骤3:导出整齐的CSV文件

现在直接导出这个规范的数据框到CSV,Excel打开就是完全整齐的格式:

write.csv(final_results, "nls_grouped_results.csv", row.names = FALSE)

为什么原来的方法不行?

你之前直接把summary(nlsfit)放进列表,而summary(nlsfit)本身是一个包含多个层级的复杂列表(比如系数表、模型统计量、残差等),当R把这种嵌套结构导出到CSV时,会把列表的层级拆成零散的列,自然格式就乱了。而我们上面的方法是把每个summary里的有用信息提取出来,统一整理成标准的数据框结构,所有分组的结果格式一致后再合并,导出时自然就是整齐的表格。

额外补充

  • 这里的伪R²逻辑和线性模型的R²一致:数值越接近1,说明模型拟合效果越好。
  • 如果还需要其他统计量(比如残差标准误),可以从summary(nlsfit)$sigma提取,加到coef_table里即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:17:26