R:获取所有列表子集的最佳N个值
R: get the best N values of all list subsets
我在名为 "listlmsummary" 的列表中汇总了许多线性模型。
listlmsummary <- lapply(listlm, summary)
listlmsummary
listlmsummary
的输出如下所示(相当短):
$a
Residual standard error: 3835 on 1921 degrees of freedom
(50 observations deleted due to missingness)
Multiple R-squared: 0.11, Adjusted R-squared: 0.1063
F-statistic: 29.68 on 8 and 1921 DF, p-value: < 2.2e-16
$b
Residual standard error: 3843 on 1898 degrees of freedom
(68 observations deleted due to missingness)
Multiple R-squared: 0.1125, Adjusted R-squared: 0.1065
F-statistic: 18.51 on 13 and 1898 DF, p-value: < 2.2e-16
$c
Residual standard error: 3760 on 1881 degrees of freedom
(87 observations deleted due to missingness)
Multiple R-squared: 0.1221, Adjusted R-squared: 0.117
F-statistic: 23.79 on 11 and 1881 DF, p-value: < 2.2e-16
$d
Residual standard error: 3826 on 1907 degrees of freedom
(60 observations deleted due to missingness)
Multiple R-squared: 0.115, Adjusted R-squared: 0.1094
F-statistic: 20.64 on 12 and 1907 DF, p-value: < 2.2e-16
我想提取最高的 N(例如 2)个调整后的 R 平方值以找到最佳模型,它还告诉我这个 Adj.R-sqr 值来自哪个列表元素。有谁知道如何做到这一点?
我知道我可以通过此调用获得单个 R 平方值:
listlmsummary[["a"]]$adj.r.squared
但是用 listlmsummary[[]]$adj.r.squared
或 listlmsummary[[c("a", "b", "c", "d")]]$adj.r.squared
之类的方法提取所有 R 平方值,然后对输出进行排序是行不通的。
感谢您的帮助! :)
我们可以用sapply
将adj.r.squared
递减提取成vector
和order
。然后从有序的'listlmsummary'
中得到head
个'n'个元素
i1 <- order(-sapply(listlmsummary, `[[`, "adj.r.squared"))
head(listlmsummary[i1], n)
注意:这是用用户要求的逻辑和完整解决方案回答的
sapply(listlmsummary, function(x) x$adj.r.squared)
另见新的 broom
包。
一种快速而肮脏的方法可能是:
Maxr2sq <- max(unlist(sapply (listlm, "[", i = "adj.r.squared")))
Position <- which(unlist(sapply (listlm, "[", i = "adj.r.squared")) == Maxr2sq)
Maxr2sq
Position
但是,将所有结果存储在 data.frame 中以供将来参考可能会有所帮助。例如,理论上有可能不止一个 Adj.R2 获得相同的值。此外,方便存储回归的调用(即公式)。
在这种情况下,您可以 运行:
library(tidyverse)
AR2 <- sapply (listlm, "[", i = "adj.r.squared") %>%
stack() %>%
select(values) %>%
rename(Adj.R.sqr = values)
Call <- as.character(sapply (listlm, "[", i = "call"))
Position <- setNames(data.frame(seq(1:length(listlm))), c("Position"))
DF <- as_data_frame(cbind(AR2,Call,Position))
DF
我在名为 "listlmsummary" 的列表中汇总了许多线性模型。
listlmsummary <- lapply(listlm, summary)
listlmsummary
listlmsummary
的输出如下所示(相当短):
$a
Residual standard error: 3835 on 1921 degrees of freedom
(50 observations deleted due to missingness)
Multiple R-squared: 0.11, Adjusted R-squared: 0.1063
F-statistic: 29.68 on 8 and 1921 DF, p-value: < 2.2e-16
$b
Residual standard error: 3843 on 1898 degrees of freedom
(68 observations deleted due to missingness)
Multiple R-squared: 0.1125, Adjusted R-squared: 0.1065
F-statistic: 18.51 on 13 and 1898 DF, p-value: < 2.2e-16
$c
Residual standard error: 3760 on 1881 degrees of freedom
(87 observations deleted due to missingness)
Multiple R-squared: 0.1221, Adjusted R-squared: 0.117
F-statistic: 23.79 on 11 and 1881 DF, p-value: < 2.2e-16
$d
Residual standard error: 3826 on 1907 degrees of freedom
(60 observations deleted due to missingness)
Multiple R-squared: 0.115, Adjusted R-squared: 0.1094
F-statistic: 20.64 on 12 and 1907 DF, p-value: < 2.2e-16
我想提取最高的 N(例如 2)个调整后的 R 平方值以找到最佳模型,它还告诉我这个 Adj.R-sqr 值来自哪个列表元素。有谁知道如何做到这一点?
我知道我可以通过此调用获得单个 R 平方值:
listlmsummary[["a"]]$adj.r.squared
但是用 listlmsummary[[]]$adj.r.squared
或 listlmsummary[[c("a", "b", "c", "d")]]$adj.r.squared
之类的方法提取所有 R 平方值,然后对输出进行排序是行不通的。
感谢您的帮助! :)
我们可以用sapply
将adj.r.squared
递减提取成vector
和order
。然后从有序的'listlmsummary'
head
个'n'个元素
i1 <- order(-sapply(listlmsummary, `[[`, "adj.r.squared"))
head(listlmsummary[i1], n)
注意:这是用用户要求的逻辑和完整解决方案回答的
sapply(listlmsummary, function(x) x$adj.r.squared)
另见新的 broom
包。
一种快速而肮脏的方法可能是:
Maxr2sq <- max(unlist(sapply (listlm, "[", i = "adj.r.squared")))
Position <- which(unlist(sapply (listlm, "[", i = "adj.r.squared")) == Maxr2sq)
Maxr2sq
Position
但是,将所有结果存储在 data.frame 中以供将来参考可能会有所帮助。例如,理论上有可能不止一个 Adj.R2 获得相同的值。此外,方便存储回归的调用(即公式)。
在这种情况下,您可以 运行:
library(tidyverse)
AR2 <- sapply (listlm, "[", i = "adj.r.squared") %>%
stack() %>%
select(values) %>%
rename(Adj.R.sqr = values)
Call <- as.character(sapply (listlm, "[", i = "call"))
Position <- setNames(data.frame(seq(1:length(listlm))), c("Position"))
DF <- as_data_frame(cbind(AR2,Call,Position))
DF