使用扫帚整理“火车”物体

时间:2020-10-25 15:35:22

标签: r machine-learning linear-regression r-caret broom

我使用插入符号包和下面的代码制作了线性回归模型

library(caret)
#Anscombe data is available on R
model_1<-train(
  form=y1~x1,
  data=anscombe,
  method='lm',
  trControl=trainControl(method='cv',number=3))

我想做的是使用broom::tidy(model_1)将模型转换成数据框,但是会引发错误

# Error: No tidy method for objects of class train

我认为问题出在插入符号模型的类上,它是train()而不是lm()。有什么方法可以整理train对象?还是应该先将train对象转换为lm

1 个答案:

答案 0 :(得分:0)

broom软件包当前不支持这种类型的对象。看到这里:https://github.com/tidymodels/broom/issues/128

不过,您可以按照以下说明轻松定义自己的tidy方法:https://www.tidymodels.org/learn/develop/broom/

这是一个最小的示例:

library(caret)
library(broom)

tidy.train <- function(x, ...) {
  s <- summary(x, ...)
  out <- data.frame(term=row.names(s$coefficients),
                    estimate=s$coefficients[, "Estimate"],
                    std.error=s$coefficients[, "Std. Error"],
                    statistic=s$coefficients[, "t value"],
                    p.value=s$coefficients[, "Pr(>|t|)"])
  row.names(out) <- NULL
  out
}

model_1<-train(
  form=y1~x1,
  data=anscombe,
  method='lm',
  trControl=trainControl(method='cv',number=3))

tidy(model_1)
#>          term  estimate std.error statistic     p.value
#> 1 (Intercept) 3.0000909 1.1247468  2.667348 0.025734051
#> 2          x1 0.5000909 0.1179055  4.241455 0.002169629