如何从tidy()和do()循环的线性模型中提取调整R平方值
按物种分组提取线性模型的调整R平方值
你的代码用tidy()提取的是模型的系数细节,而调整R平方属于模型的整体拟合统计量,需要用broom包的glance()函数来获取。以下是两种可行的实现方式:
基于原有do()函数的修改
直接将tidy()替换为glance(),即可获取包含调整R平方在内的模型汇总统计:
library(tidyverse) library(broom) iris %>% group_by(Species) %>% do(glance(lm(Sepal.Length ~ Sepal.Width, .))) %>% select(Species, adj.r.squared)
运行后会返回每个物种对应的调整R平方值,select()用于筛选出你需要的列。
更现代的tidyverse写法(推荐)
新版tidyverse更推荐用nest()+map()的组合来处理分组模型,代码可读性更好:
library(tidyverse) library(broom) iris %>% nest(data = -Species) %>% # 按Species分组嵌套数据 mutate( model = map(data, ~lm(Sepal.Length ~ Sepal.Width, data = .x)), # 每组拟合线性模型 model_stats = map(model, glance) # 提取模型统计量 ) %>% unnest(model_stats) %>% # 展开统计量数据框 select(Species, adj.r.squared) # 保留需要的列
内容的提问来源于stack exchange,提问作者Natz
相关产品推荐
相关产品推荐

