我有以下回归模型;
models <- lapply(1:25, function(x) lm(Y_df[,x] ~ X1))
在Y_df
数据框中的25列上运行25次回归。
其中一个输出可以显示为;
models[15] # Gives me the coefficients for model 15
Call:
lm(formula = Y_df[, x] ~ X1)
Coefficients:
(Intercept) X1
0.1296812 1.0585835
我可以将其存放在单独的df中。我遇到的问题是关于Std。错误,R2,残留等。
我想将这些也存储在一个单独的数据框中。
我可以运行单个回归并提取摘要,因为正常的R回归输出看起来像。
ls_1 <- summary(models[[1]])
ls_1
ls_1$sigma
但是我希望直接从运行25次回归的代码行中获取值。
此代码有效
> (models[[15]]$coefficients)
(Intercept) X1
-0.3643446787 1.0789369642
然而;这段代码没有。
> (models[[15]]$sigma)
NULL
我尝试了各种不同的组合,试图在没有运气的情况下提取这些结果。
以下完全符合我的要求。我曾希望有一种方法可以将coef
替换为Std Error
或R2
等,但这不起作用。
models <- lapply(1:25, function(x) lm(Y_df[,x] ~ X1))
# extract just coefficients
coefficients <- sapply(Y_df, coef)
理想情况下,我想存储上述模型中的Std Error
答案 0 :(得分:0)
如果模型名为mod,则可以使用与系数相同的方式获取所有残差:
mod$residuals
还有一些函数可以提取系数和残差:
coef(mod)
resid(mod)
其他输出,您可以通过summary
提取:
summary(mod)$coef[,"Std. Error"] # standard errors
summary(mod)$r.squared # r squared
summary(mod)$adj.r.squared # adjusted r squared
因此,您可以创建一个列表,其中包含每个模型的每个结果:
outputList <- lapply(models, function(x){
coefs <- coef(mod)
stdErr <- summary(mod)$coef[,"Std. Error"]
rsq <- summary(mod)$r.squared
rsq_adj <- summary(mod)$adj.r.squared
rsd <- resid(mod)
list(coefs = coefs,
stdErr = stdErr,
rsq = rsq,
rsq_adj = rsq_adj,
rsd = rsd)
})
然后,您可以通过outputList$mod1$rsq
来获取mod1的rsq,例如。
或者您可以为每个数据框创建单独的数据框:
library(tidyverse)
# coefficients
coefs <- lapply(models, coef) %>%
do.call(rbind, .) %>%
as.data.frame() %>% # convert from matrix to dataframe
rownames_to_column("model") # add original model name as a column in the dataframe
# standard errors
stdErr <- lapply(models, function(x){
summary(mod)$coef[,"Std. Error"]
}) %>%
do.call(rbind, .) %>%
as.data.frame() %>%
rownames_to_column("model")
# r squareds
rsq <- sapply(models, function(x){
summary(mod)$r.squared
}) %>%
as.data.frame() %>%
rownames_to_column("model")
# adjusted r squareds
rsq_adj <- sapply(models, function(x){
summary(mod)$adj.r.squared
})%>%
as.data.frame() %>%
rownames_to_column("model")
# residuals
rsd <- lapply(models, resid) %>%
do.call(rbind, .) %>%
as.data.frame() %>%
rownames_to_column("model")
值得注意的是,如果你在RStudio并且你将摘要分配给某个东西(即temp <- summary(mod)
),你可以输入对象的名称,然后输入“$”和所有其他对象的下拉列表可以从摘要中提取出来。