r-如何使用dplyr运行单个代码块来打印摘要和预测函数的结果



我正在尝试使用R中的tidyverse拟合几个线性模型。我有兴趣使用summary以及一个自定义函数打印出模型拟合的结果,该函数旨在返回summary未返回的统计参数(如AIC值(,然后将该模型应用于预测一组已知数据(测试数据集(中的值。下面是我使用mtcars数据集所做工作的一个示例。

library(tidyverse);library(magrittr)
mtcars%>%
filter(gear=="4")%$%
lm(hp~mpg)%>%
summary()
mtcars%>%
filter(gear=="4")%$%
lm(hp~mpg)%>%
AIC()
mtcars%>%
filter(gear=="4")%$%
lm(hp~mpg)%>%
predict(newdata=data.frame(mpg=19))

在调用lm之前,我经常对我的数据进行大量筛选(因为所有模型都缺少数据,使用mutate调用、使用summarise或基于感兴趣的分类变量进行筛选(,并拟合许多不同的模型排列。然而,我最终不得不多次调用同一个代码才能获得汇总统计信息。

通常,我只会将lm模型保存为一个对象,但在这种情况下,我只想运行一个初步测试,看看结果如何,看看该版本是否值得保存,我不希望大量的lm对象扰乱我的全局环境。然而,似乎一旦在lm之后调用管道,就不可能再次调用临时lm对象。

有没有什么整洁的方法可以保留一个合适的lm对象并将其派生到同一代码串中,这样我就可以在一次调用中打印summarypredictAIC函数的结果?

magritter管道允许一个代码块,其中.是来自链的值。所以

mtcars%>%
filter(gear=="4")%$%
lm(hp~mpg)%>% {list(
summary(.),
AIC(.),
predict(., newdata=data.frame(mpg=19))
)}

会起作用您也可以使用%T>%(三通(管道。但是,如果你想看到,你需要显式地打印链中的值或其他东西

mtcars%>%
filter(gear=="4")%$%
lm(hp~mpg) %T>%
{print(summary(.))} %T>%
{print(AIC(.))} %>%
predict(newdata=data.frame(mpg=19))

一个选项是创建一个自定义函数,该函数可以一起生成所需的输出。然后,您可以将任何您喜欢的数据作为一行输入。

library(tidyverse)
## function to produce all desired outputs in one object
f <- function(train_data = mtcars,
x = "mpg",
y = "hp",
test_data = data.frame(mpg = 19)) {
formula <- as.formula(paste0(y, "~", x))
mod <- lm(formula, data = train_data)
list(
summary = summary(mod),
AIC = AIC(mod),
prediction = predict(mod, test_data)
)
}
f()
#> $summary
#> 
#> Call:
#> lm(formula = formula, data = train_data)
#> 
#> Residuals:
#>    Min     1Q Median     3Q    Max 
#> -59.26 -28.93 -13.45  25.65 143.36 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)   324.08      27.43  11.813 8.25e-13 ***
#> mpg            -8.83       1.31  -6.742 1.79e-07 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 43.95 on 30 degrees of freedom
#> Multiple R-squared:  0.6024, Adjusted R-squared:  0.5892 
#> F-statistic: 45.46 on 1 and 30 DF,  p-value: 1.788e-07
#> 
#> 
#> $AIC
#> [1] 336.8553
#> 
#> $prediction
#>        1 
#> 156.3174

创建于2022-07-21由reprex包(v2.0.1(

最新更新