如何解决将 broom::tidy tibble 显示为打印的汇总表
我有一个看似奇怪的问题(但我问的原因的详细信息 很快就会清楚)。
考虑在 R
中拟合线性模型,如下所示:
lm_fit <- lm(mpg ~ cyl+disp,data = mtcars)
。
现在假设我们生成一个整洁的 tibble
(命名为 out_summ
)
我们使用惊人的 broom
包的拟合总结如下:
out_summ <- broom::tidy(lm_fit)
out_summ
#> # A tibble: 3 x 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 34.7 2.55 13.6 4.02e-14
#> 2 cyl -1.59 0.712 -2.23 3.37e- 2
#> 3 disp -0.0206 0.0103 -2.01 5.42e- 2
由 reprex package (v0.3.0) 于 2021 年 2 月 2 日创建
现在考虑只打印 lm_fit
对象的摘要
到控制台如下:
summary(lm_fit)
#>
#> Call:
#> lm(formula = mpg ~ cyl + disp,data = mtcars)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -4.4213 -2.1722 -0.6362 1.1899 7.0516
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 34.66099 2.54700 13.609 4.02e-14 ***
#> cyl -1.58728 0.71184 -2.230 0.0337 *
#> disp -0.02058 0.01026 -2.007 0.0542 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 3.055 on 29 degrees of freedom
#> Multiple R-squared: 0.7596,Adjusted R-squared: 0.743
#> F-statistic: 45.81 on 2 and 29 DF,p-value: 1.058e-09
由 reprex package (v0.3.0) 于 2021 年 2 月 2 日创建
现在,我的问题是 lm_fit
对象和整洁的 out_summ
tibble
作为输入,是否可以编写一个函数来轻松重现
上面显示的打印的 summary(lm_fit)
表?
我查看了 getAnywhere(print.summary.lm)
的 lm
汇总函数
而且相当复杂。
从某种意义上说,它可以获取单个列并手动
使用 cat()
调整间距以获得漂亮的打印效果。因此,鉴于整洁的小标题,
这可以很容易地进行逆向工程吗?
动机:我正在开发一个类似于 lm
的统计建模对象,
但是我们从一开始就使用整洁的 tibble
格式。我们还是愿意
向我们的对象添加一个摘要方法。这将采用我们整洁的 tibble
格式
并使用 summary(lm_fit)
输出样式的格式打印出来
多于。也就是说,我们不想只打印 tibble,而不先制作
它看起来像经典的汇总表格式。
实现这一目标的任何帮助,希望代码最少(考虑到整洁的输入), 将不胜感激。
解决方法
不知道如何在不使用 lm_fit 对象(或等效对象)的情况下填写汇总表的其余部分,但也许这些“第一步”会有所帮助。
library(tidyverse)
lm_fit <- lm(mpg ~ cyl+disp,data = mtcars)
summarise_lm_like_object <- function(lm_fit){
out_summ <- broom::tidy(lm_fit) %>%
mutate(sig = ifelse(p.value <= 0.001,"***",ifelse(p.value <= 0.01,"**",ifelse(p.value <= 0.05,"*",".")))) %>%
rename("Estimate" = estimate,"Std. Error" = std.error,"t value" = statistic,"Pr(>|t|)" = p.value,"Significance" = sig)
print.data.frame(out_summ,row.names = FALSE)
cat("---\n")
cat("Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1")
}
summarise_lm_like_object(lm_fit)
#> term Estimate Std. Error t value Pr(>|t|) Significance
#> (Intercept) 34.66099474 2.54700388 13.608536 4.022869e-14 ***
#> cyl -1.58727681 0.71184427 -2.229809 3.366495e-02 *
#> disp -0.02058363 0.01025748 -2.006696 5.418572e-02 .
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
由 reprex package (v1.0.0) 于 2021 年 2 月 3 日创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。