【问题标题】:filter lm coefficient summary model滤波器lm系数汇总模型
【发布时间】:2020-05-25 12:35:52
【问题描述】:

如何过滤系数摘要?

model = lm(x ~ a + b + c + d + e, data=ds)
ss <- coef(summary(model3))
df.coef <- as.data.frame( coef(summary(model)) )
filter(df.coef, Pr(>|t|) < 0.05)  

错误:“过滤器(df.coef,Pr(>”)中的意外'>' `

【问题讨论】:

    标签: r


    【解决方案1】:

    您的ss 是一个矩阵,您可以像这样对其进行子集化:

    model <- lm(mpg ~ hp + am + gear, mtcars)
    ss <- coef(summary(model))
    ss[ss[,"Pr(>|t|)"] < .05,]
    #                Estimate  Std. Error   t value     Pr(>|t|)
    # (Intercept) 23.18636779 3.898968754  5.946795 2.111900e-06
    # hp          -0.05973668 0.007925368 -7.537401 3.283912e-08
    # am           3.95611932 1.777326184  2.225883 3.424800e-02
    

    因此,在强制转换为数据帧之后,

    df.coef <- as.data.frame(ss)
    

    你会这样做:

    df.coef[df.coef$`Pr(>|t|)` < .05,]
    #                Estimate  Std. Error   t value     Pr(>|t|)
    # (Intercept) 23.18636779 3.898968754  5.946795 2.111900e-06
    # hp          -0.05973668 0.007925368 -7.537401 3.283912e-08
    # am           3.95611932 1.777326184  2.225883 3.424800e-02
    

    注意: gear 被从结果中过滤掉,因为它的 p 值高于 0.05。

    【讨论】:

    【解决方案2】:

    要使用filter,您需要将表格转换为数据框,并将列名包含在反引号中:

    mod <- lm(y ~ x, data = data.frame(x = 1:10, y = 1:10 + rnorm(10)))
    
    summary(mod)$coefficients %>% 
    as.data.frame() %>% 
    filter(`Pr(>|t|)` < 0.05)
    #>    Estimate Std. Error t value     Pr(>|t|)
    #> 1 0.9862634 0.07084972 13.9205 6.866089e-07
    

    【讨论】:

      猜你喜欢
      • 2016-08-10
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2013-03-27
      • 2015-04-17
      • 2019-05-25
      相关资源
      最近更新 更多