使用扫帚整理一个 "train" 对象
Tidy a "train" object using broom
我使用带有以下代码的 caret 包制作了一个线性回归模型
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
我认为问题在于插入符号模型的 class,即 train()
而不是 lm()
。有什么方法可以整理 train
对象吗?或者我应该先将 train
对象转换为 lm
吗?
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
我使用带有以下代码的 caret 包制作了一个线性回归模型
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
我认为问题在于插入符号模型的 class,即 train()
而不是 lm()
。有什么方法可以整理 train
对象吗?或者我应该先将 train
对象转换为 lm
吗?
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