R:使用rms:bootcov on caret模型和glm模型计算引导估计
如何使用包R:使用rms:bootcov on caret模型和glm模型计算引导估计,r,logistic-regression,statistics-bootstrap,R,Logistic Regression,Statistics Bootstrap,如何使用包rms中的函数bootcov计算回归系数的bootstrap估计值?我使用示例数据集尝试了以下操作,但出现错误: library(mlbench) data(PimaIndiansDiabetes) library(caret) trControl <- trainControl(method = "repeatedcv", repeats = 3, classProbs =
rms
中的函数bootcov
计算回归系数的bootstrap估计值?我使用示例数据集尝试了以下操作,但出现错误:
library(mlbench)
data(PimaIndiansDiabetes)
library(caret)
trControl <- trainControl(method = "repeatedcv",
repeats = 3,
classProbs = TRUE,
number = 10,
savePredictions = TRUE,
summaryFunction = twoClassSummary)
caret_model <- train(diabetes~.,
data=PimaIndiansDiabetes,
method="glm",
trControl=trControl)
library(rms)
set.seed(1234)
reduced_model_bootcov <- bootcov(caret_model$finalModel, B=100)
但我又犯了一个不同的错误:
bootcov(型号,B=100)中出错:装配工无效
事实证明,rms中有一个名为Glm的fitting函数,它是Glm的包装器,但如果您对使用bootcov感兴趣,也可以使用它。因此,为了让bootcov发挥作用:
library(mlbench)
library(rms)
data(PimaIndiansDiabetes)
model <- rms::Glm(diabetes~.,
data=PimaIndiansDiabetes,
family=binomial,
x=TRUE, y=TRUE)
model_bootcov <- bootcov(model, B=1000)
嘿,bootcov不能接受glm对象,根据其渐晕图,它用于“ols、lrm、cph、psm、Rq和任何其他拟合的回归系数集,其中x=TRUE,y=TRUE”我想你可以使用包boot来计算回归系数的自举估计数?@StupidWolf。谢谢你的回复。我不熟悉这项技术。你能在我的数据集
PimaIndiansDiabetes
上发布一个工作示例吗?当然没问题。是否可以从caret
中使用模型来执行此操作?因为我想在使用插入符号构建时利用列车控制
(特别是,我希望重复进行K-折叠交叉验证,如我问题的第一部分)。谢谢您使用交叉验证来获取拟合参数。最后,在整个数据集上拟合数据,请参见长度(插入符号模型$finalModel$y)以获取示例结果与仅拟合glm相同,因为没有针对glm训练的超参数?我建议只使用glm拟合。我还想绘制插入符号$pred
中包含的AUC。我猜是因为我想用一种方法实现很多事情……一旦你有了预测和概率来绘制AUC,你就可以使用ROCR软件包
library(mlbench)
library(rms)
data(PimaIndiansDiabetes)
model <- rms::Glm(diabetes~.,
data=PimaIndiansDiabetes,
family=binomial,
x=TRUE, y=TRUE)
model_bootcov <- bootcov(model, B=1000)
library(boot)
glm.fun <- function(dat, inds){
fit <- glm(diabetes~.,family=binomial,data=dat[inds,])
coef(fit)
}
model_boot <- boot(PimaIndiansDiabetes, glm.fun, R = 1000)
library(tidyr)
library(dplyr)
library(ggplot2)
melt_matrix = function(mat,NAMES,X){
colnames(mat) = NAMES
data.frame(mat) %>%
tibble::rownames_to_column("B") %>%
pivot_longer(-B) %>%
mutate(type=X)
}
VAR = names(coef(model))
plotdf = rbind(
melt_matrix(model_boot$t,VAR,"boot"),
melt_matrix(model_bootcov$boot.Coef,VAR,"bootcov")
)
ggplot(plotdf,aes(x=type,y=value))+ geom_violin() + facet_wrap(~name,scale="free_y")