Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 使用Lappy存储在列表中的简单线性回归的汇总统计信息_R_Regression_Lapply - Fatal编程技术网

R 使用Lappy存储在列表中的简单线性回归的汇总统计信息

R 使用Lappy存储在列表中的简单线性回归的汇总统计信息,r,regression,lapply,R,Regression,Lapply,我有一系列形式为y~x1,y~x2,y~x3等的简单线性回归 我已经能够运行所有线性回归并存储输出,但我无法以矢量化方式访问摘要统计数据,例如,调整每个模型的R平方 我可以通过for循环和迭代每个模型来实现,但我认为一定有更简单的方法来使用lappy(或sapply?)并更快地得到结果 可再现的示例如下所示: library(tidyverse) library(broom) set.seed(6) DF <- data.frame(Y=rnorm(50, 100, 3),

我有一系列形式为y~x1,y~x2,y~x3等的简单线性回归

我已经能够运行所有线性回归并存储输出,但我无法以矢量化方式访问摘要统计数据,例如,调整每个模型的R平方

我可以通过for循环和迭代每个模型来实现,但我认为一定有更简单的方法来使用lappy(或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=.))
sapply()
函数对列表的每个元素执行一个函数,并为您提供一个向量:


sapply(lm2$mod,函数(x)摘要(x)$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
使用原始帖子中的数据。。。
在base R中,您可以使用
重新格式化
获得公式向量
fov
,在该向量上进行回归,同时提取adj。R2在
sapply

fov <- lapply(names(DF)[2:5], reformulate, "Y")
res <- sapply(fov, function(x) summary(lm(x, data=DF))$adj)
res
# [1] -0.007637371  0.007729944  0.049935424 -0.020262353

注意:您声明您想要一个向量,如果您想要一个列表,只需将
sapply
替换为
lappy

我想避免定义模型
regModels
,因为我有两个不同的模型要运行(总共13个)所以我想尽量保持它的效率。@AveshenPillay-我更新了我的答案,在你的数据中加入了一个解决方案。
fov <- lapply(names(DF)[2:5], reformulate, "Y")
res <- sapply(fov, function(x) summary(lm(x, data=DF))$adj)
res
# [1] -0.007637371  0.007729944  0.049935424 -0.020262353
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
fov <- lapply(names(DF)[2:5], reformulate, "Y")
res <- sapply(fov, function(x) summary(lm(x, data=DF))$adj)
res
# [1] -0.007637371  0.007729944  0.049935424 -0.020262353
sapply(lapply(names(DF)[2:5], reformulate, "Y"), function(x) summary(lm(x, data=DF))$adj)
# [1] -0.007637371  0.007729944  0.049935424 -0.020262353