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

R语言OLS线性回归获取p值、z统计量及导出Excel问题求助

错误原因说明

第一种方法问题

  1. 模型设定完全不符合需求:你要计算的是24个变量随时间(Year)的变化趋势,应当把每个变量作为因变量、Year作为自变量拟合回归。但第一种方法中你随机生成了0/1的markers序列作为因变量,反而把目标变量作为自变量,得到的估计值自然是错误无效的。
  2. 仅提取coef()的返回值只能拿到回归系数,无法获取统计量、p值等显著性指标,需要提取回归模型的完整汇总结果才能得到这类信息。

第二种方法的问题修正

你第二种方法的建模逻辑是正确的,输出结果里的statistic列就是线性回归的t统计量,p.value就是对应的显著性p值,两个问题的修正方案如下:

  • 如需获取z统计量:线性回归默认输出t统计量,若要得到z值,把lm替换为glm(family = gaussian(link = "identity"))即可,输出的statistic就是z值,大样本下t值和z值的差异可以忽略。
  • 无法导出表格的原因:当前结果中包含data、model两个列表类型的列,这类列无法直接写入CSV/Excel,导出前删除这两列即可。

修正后的完整可运行代码

library(reshape2)
library(broom)
library(tidyverse)
# 如需直接写xlsx格式,可安装加载writexl包
# install.packages("writexl")
library(writexl)

# 读取数据
otm <- read.table("D:/data.txt",header=T)
DF <- reshape2::melt(otm, id.var = "Year")

# 拟合模型提取结果,如需z值可将lm替换为glm(value ~ Year, data = ., family = gaussian)
ols <- DF %>% 
  nest(data = -variable) %>% 
  mutate(model = map(data, ~lm(value ~ Year, data = .)), 
         tidied = map(model, tidy)) %>% 
  unnest(tidied) %>%
  # 删除无法写入表格的列表列
  select(-data, -model)

# 写入CSV格式
write.csv(ols, "E:/ols2.csv", row.names = TRUE)
# 直接写入标准Excel格式
write_xlsx(ols, "E:/ols_result.xlsx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:03