R语言OLS线性回归获取p值、z统计量及导出Excel问题求助
错误原因说明
第一种方法问题
- 模型设定完全不符合需求:你要计算的是24个变量随时间(Year)的变化趋势,应当把每个变量作为因变量、Year作为自变量拟合回归。但第一种方法中你随机生成了0/1的
markers序列作为因变量,反而把目标变量作为自变量,得到的估计值自然是错误无效的。 - 仅提取
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
相关产品推荐
相关产品推荐

