将 broom::tidy tibble 显示为打印摘要 table
Displaying a broom::tidy tibble as a printed summary table
我有一个看起来很奇怪的问题(但我问的原因的详细信息
很快就会变得清晰)。
考虑在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-02-02 创建
现在考虑只打印 lm_fit
object 的摘要
到控制台如下:
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-02-02 创建
现在,我的问题给出了 lm_fit
object 和整洁的 out_summ
tibble
作为 inputs,是否可以编写一个函数来轻松重现
如上所示打印 summary(lm_fit)
table?
我查看了 getAnywhere(print.summary.lm)
的 lm
汇总函数
这很复杂。
从某种意义上说,它是单个列的来源并手动
使用 cat()
调整间距以漂亮打印。因此,考虑到整洁的问题,
这可以很容易地进行逆向工程吗?
动机:我正在开发一个类似于lm
的统计模型object,
然而,我们从一开始就使用整洁的 tibble
格式。我们还是愿意
为我们的 object 添加一个摘要方法。这将采用我们整洁的 tibble
格式
并使用 summary(lm_fit)
输出样式的格式打印出来
多于。也就是说,我们不想在不先制作的情况下只打印小标题
它看起来像经典摘要 table 格式。
任何帮助实现这一点,希望代码最少(给定整洁的输入),
将不胜感激。
不确定如何在不使用 lm_fit 对象(或等效对象)的情况下填写摘要的其余部分 table,但也许这些 'first steps' 会有所帮助。
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-02-03
我有一个看起来很奇怪的问题(但我问的原因的详细信息 很快就会变得清晰)。
考虑在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-02-02 创建现在考虑只打印 lm_fit
object 的摘要
到控制台如下:
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-02-02 创建现在,我的问题给出了 lm_fit
object 和整洁的 out_summ
tibble
作为 inputs,是否可以编写一个函数来轻松重现
如上所示打印 summary(lm_fit)
table?
我查看了 getAnywhere(print.summary.lm)
的 lm
汇总函数
这很复杂。
从某种意义上说,它是单个列的来源并手动
使用 cat()
调整间距以漂亮打印。因此,考虑到整洁的问题,
这可以很容易地进行逆向工程吗?
动机:我正在开发一个类似于lm
的统计模型object,
然而,我们从一开始就使用整洁的 tibble
格式。我们还是愿意
为我们的 object 添加一个摘要方法。这将采用我们整洁的 tibble
格式
并使用 summary(lm_fit)
输出样式的格式打印出来
多于。也就是说,我们不想在不先制作的情况下只打印小标题
它看起来像经典摘要 table 格式。
任何帮助实现这一点,希望代码最少(给定整洁的输入), 将不胜感激。
不确定如何在不使用 lm_fit 对象(或等效对象)的情况下填写摘要的其余部分 table,但也许这些 'first steps' 会有所帮助。
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-02-03