首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:获取所有列表子集的最佳N值

R:获取所有列表子集的最佳N值
EN

Stack Overflow用户
提问于 2017-08-04 20:15:43
回答 3查看 75关注 0票数 0

我在一个名为"listlmsummary“的列表中列出了许多线性模型的摘要。

代码语言:javascript
复制
listlmsummary <- lapply(listlm, summary)
listlmsummary

listlmsummary的输出如下所示(相当简短):

代码语言:javascript
复制
$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平方的值:

代码语言:javascript
复制
listlmsummary[["a"]]$adj.r.squared

但是,使用类似于listlmsummary[[]]$adj.r.squaredlistlmsummary[[c("a", "b", "c", "d")]]$adj.r.squared的方法提取所有R平方的值,然后对输出进行排序是行不通的。

感谢您的帮助!:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-04 20:18:57

代码语言:javascript
复制
sapply(listlmsummary, function(x) x$adj.r.squared)

另请参阅新的broom包。

票数 3
EN

Stack Overflow用户

发布于 2017-08-04 20:18:43

我们可以使用sapplyadj.r.squared提取为vector,然后使用递减order。然后从有序的‘head’列表中获取'n‘个元素的摘要

代码语言:javascript
复制
i1 <- order(-sapply(listlmsummary, `[[`, "adj.r.squared"))
head(listlmsummary[i1], n)

注意:用户要求的逻辑和完整的解决方案回答了这个问题

票数 4
EN

Stack Overflow用户

发布于 2017-08-04 22:45:58

一种快速而肮脏的方法可能是:

代码语言:javascript
复制
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获得相同的值。此外,存储回归的调用(即公式)也很方便。

在这种情况下,您可以运行:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45506603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档