我有一系列形式为y〜x1,y〜x2,y〜x3等的简单线性回归。
我已经可以运行所有的线性回归并存储了输出,但是我无法以矢量化方式访问摘要统计信息,例如,针对每个模型调整R平方。
我可以通过for循环来做到这一点,并遍历每个模型,但是我认为必须有更简单的方法来使用lapply(或sapply?)并更快地获得结果。
下面是一个可重现的示例:
library(tidyverse)
library(broom)
set.seed(6)
DF <- data.frame(Y=rnorm(50, 100, 3),
X1=rnorm(50, 100, 3),
X2=rnorm(50, 100, 3),
X3=rnorm(50, 100, 3),
X4=rnorm(50, 100, 3))
DF_longer = pivot_longer(DF, -Y, names_to = "variable", values_to = "value", values_ptypes = list(val = 'numeric'))
lm1 = DF_longer %>% group_by(variable) %>% do(tidy(lm(Y ~ value, data=.)))
lm2 = DF_longer %>% group_by(variable) %>% do(mod = lm(Y ~ value, data=.))
我要优化的部分是以下内容,其中我想将每个模型的调整后R平方存储在不带for循环的向量中。
lm2_data = summary(lm2$mod[[1]])
lm2_data$adj.r.squared
lm2_data = summary(lm2$mod[[2]])
lm2_data$adj.r.squared
lm2_data = summary(lm2$mod[[3]])
lm2_data$adj.r.squared
lm2_data = summary(lm2$mod[[4]])
lm2_data$adj.r.squared
这是使用mtcars
数据的示例:
regModels <- c("mpg ~ am", "mpg ~ am + wt", "mpg ~ wt + am + disp")
results <- lapply(regModels,function(x){
y <- summary(lm(x,data = mtcars))$adj.r.squared
})
names(results) <- regModels
results
...以及输出:
> results
$`mpg ~ am`
[1] 0.3384589
$`mpg ~ am + wt`
[1] 0.7357889
$`mpg ~ wt + am + disp`
[1] 0.757583
>
library(tidyverse)
library(broom)
set.seed(6)
DF <- data.frame(Y=rnorm(50, 100, 3),
X1=rnorm(50, 100, 3),
X2=rnorm(50, 100, 3),
X3=rnorm(50, 100, 3),
X4=rnorm(50, 100, 3))
DF_longer = pivot_longer(DF, -Y, names_to = "variable", values_to = "value", values_ptypes = list(val = 'numeric'))
lm1 = DF_longer %>% group_by(variable) %>% do(tidy(lm(Y ~ value, data=.)))
lm2 = DF_longer %>% group_by(variable) %>% do(mod = lm(Y ~ value, data=.))
adjRsquared <- lapply(lm2$mod,function(x){
y <- summary(x)$adj.r.squared
})
names(adjRsquared) <- lm2$variable
adjRsquared
...以及输出:
> adjRsquared
$X1
[1] -0.007637371
$X2
[1] 0.007729944
$X3
[1] 0.04993542
$X4
[1] -0.02026235
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句