Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 功能或包装,以比较模型适合并排?_R - Fatal编程技术网

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@DougFir
lappy(mget(ls(pattern=“^m\\d+$”),整洁)
lappy(mget(ls(pattern=“^m\\d+$”),一瞥)
library(texreg)
screenreg(list(m1, m2, m3))