【问题标题】:How to obtain just particular lines of summary on lm object如何在 lm 对象上仅获取特定的摘要行
【发布时间】:2012-11-05 10:55:15
【问题描述】:

这个问题来自我自己解决的更简单的问题。所以这是我最初的问题。

在我的数据中,我有很多类别,但我对估计所有类别的系数不感兴趣,我只是想检验一个假设,即类别之间没有区别。在我的对象上调用 summary 会产生我报告中不需要的大部分信息。

set.seed(42)
dat <- data.frame(cat=factor(sample(1:10, 100, replace=T)), y=rnorm(100))
l1 <- lm(y~cat-1, data=dat)
summary(l1)

如何仅提取调用 summary(l1) 的最后一行?

在这种特殊情况下,我可以使用 anova 函数

anova(l1)

只得到了我需要的信息,只是格式与summary(l1) 生成的格式不同。

如果我对某个对象有某种摘要,并且我只想提取 summary(object) 的特定部分,我该怎么做?例如,如何让R 只打印调用行summary(l1)

附言我知道summary(l1)$fstatistic

【问题讨论】:

    标签: r summary lm


    【解决方案1】:

    好的,我的心情是真实的,但使用capture.output 将返回评估对象的字符表示。例如,使用您的 l1 对象:

    l1Out <- capture.output(summary(l1))
    grep("^F-st", l1Out, value = TRUE)
    # [1] "F-statistic: 1.323 on 10 and 90 DF,  p-value: 0.2303 "
    

    但是请注意,这不是输出的最后一行

    tail(l1Out, 1)
    # [1] ""
    

    而且对于摘要对象的很多组件,还有更好的方法来提取信息,比如@seancarmody 写的

    l1$call
    # lm(formula = y ~ cat - 1, data = dat)
    

    【讨论】:

    • 这个函数capture.output()很直接!谢谢。
    【解决方案2】:

    尝试使用str 进行探索。例如,看看

    str(summary(l1))
    

    其中的输出包括

    $ fstatistic   : Named num [1:3] 1.32 10 90
    

    那你可以试试

    summary(l1)$fstatistic
    
    #   value     numdf     dendf 
    #1.323275 10.000000 90.000000 
    

    p 值有点小技巧。阅读this post 了解更多信息,但这里有一个解决方案:

    anova(l1)$"Pr(>F)"[1]
    # [1] 0.2303172
    

    ...不漂亮,但它似乎工作!

    【讨论】:

    猜你喜欢
    • 2015-12-31
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2011-07-11
    • 2019-12-17
    • 2016-10-29
    相关资源
    最近更新 更多