R 功能或包装,以比较模型适合并排?
有没有更优雅的方法R 功能或包装,以比较模型适合并排?,r,R,有没有更优雅的方法 m1 <- lm(price ~ carat, data = diamonds) m2 <- lm(price ~ carat + cut, data = diamonds) m3 <- lm(price ~ carat + cut + depth, data = diamonds) m1r2 <- summary(m1)$r.squared m2r2 <- summary(m2)$r.squared m3r2 <- summary(m3
m1 <- lm(price ~ carat, data = diamonds)
m2 <- lm(price ~ carat + cut, data = diamonds)
m3 <- lm(price ~ carat + cut + depth, data = diamonds)
m1r2 <- summary(m1)$r.squared
m2r2 <- summary(m2)$r.squared
m3r2 <- summary(m3)$r.squared
data.frame(
model = c("m1", "m2", "m3"),
RSqd = c(m1r2, m2r2, m3r2)
)
是否有一种传统的方法来比较拟合模型,如R.平方、AIC、RSE?与我用上面的方法粗略地编写数据帧不同,一个选项是使用
mget
stack(mget(ls(pattern = "^m\\d+r\\d+$")))
从输入'm'中,使用
mget
将对象放入列表
,通过在列表
上循环应用摘要
,并提取r.squared
lapply(mget(ls(pattern = "^m\\d+$")), function(x) summary(x)$r.squared)
此外,这可以通过在
列表中传递自变量来进行重新格式化
lapply(list('carat', c('carat', 'cut'), c('carat', 'cut', 'depth')),
function(nm) summary(lm(reformulate(nm, 'price'),
data = diamonds))$r.squared)
如果我们想得到多个组件
library(broom)
lapply(mget(ls(pattern = "^m\\d+$")), glance)
下面是一个类似的更基于tidyverse的方法
由于只有三个变量,它不会为您节省很多输入,但是一旦您有了两位数的变量,“多模型方法”就非常方便了
library(dplyr)
library(purrr)
library(broom)
library(ggplot2)
reg_vars <- c("carat", "cut", "depth")
tibble(id = 1:3) %>%
mutate(equ = map(id, ~ reformulate(reg_vars[1:.x], response = "price")),
mod = map(equ, ~ lm(.x, data = diamonds)),
res = map(mod, glance)) %>%
pull(res) %>%
bind_rows(., .id = "model")
库(dplyr)
图书馆(purrr)
图书馆(扫帚)
图书馆(GG2)
注册变量%
变异(eq=map(id,~重新格式化(reg_vars[1:.x],response=“price”)),
mod=map(等式,~lm(.x,data=diamonds)),
res=地图(模式,浏览))%>%
拉力(res)%>%
绑定行(,.id=“model”)
您也可以尝试texreg
软件包
library(texreg)
screenreg(list(m1, m2, m3))
谢谢你的提示。我想知道是否有一个解决方案可以获取模型列表并返回每个模型的评估指标some_function_或_package_function(list(m1,m2,m3)){{#do stuff}
返回一个整洁的数据帧,我可以将其传递给例如DT::datatable
。你想到什么了吗?@DougFir你可以使用tridy
或glance
从broom
中选择,但这是一个包function@DougFirlappy(mget(ls(pattern=“^m\\d+$”),整洁)
或lappy(mget(ls(pattern=“^m\\d+$”),一瞥)
library(texreg)
screenreg(list(m1, m2, m3))