如何使用软件包bootcov
中的函数rms
计算回归系数的引导估计?我尝试使用样本数据集进行以下操作,但出现错误:
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中的错误(caret_model $ finalModel,B = 100):您没有 指定合适的x = TRUE和y = TRUE
如果我使用函数glm
来构建模型,这就是我要做的事情:
model <- glm(diabetes~.,
data=PimaIndiansDiabetes,
family=binomial,
x=TRUE, y=TRUE)
model_bootcov <- bootcov(model, B=100)
但是,我又得到了一个不同的错误:
bootcov(模型,B = 100)中的错误:装配工无效
答案 0 :(得分:0)
结果是有一个以rms为单位的拟合函数Glm,它是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)
要使用引导:
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")