具有固定数量预测变量的逻辑逐步回归
Logistic stepwise regression with a fixed number of predictors
对于我参加的课程,我必须执行逻辑逐步回归以将特征的预测变量数量减少到固定数量并估计生成模型的准确性。
我一直在尝试使用 leaps 包中的 regsubsets()
,但我无法获得它的准确性。
现在我正在尝试使用 caret
,因为我可以将其指标设置为“准确性”,但是当我在 train()
函数中使用 method = "glmStepAIC"
时,我无法确定预测变量的数量,因为它没有调整参数。
step.model <- train(Outcome ~ .,
data = myDataset,
method = "glmStepAIC",
metric = "Accuracy",
trControl = trainControl(method = "cv", number = 10),
trace = FALSE)
我找到了这个问题,但答案和链接似乎对我不起作用。
如果不使用插入符号,使用固定数量的预测变量实现简化模型的最佳方法是什么?
您可以使用 glmulti
包指定逐步 selection 中要保留的变量数。在此示例中,列 a 到 g 与结果相关,但列 A 到 E 无关。在 glmulti 中,confsetsize
是 select 的模型数,并设置 minsize
等于 maxsize
以保留变量数。
library(MASS)
library(dplyr)
set.seed(100)
dat=data.frame(a=rnorm(10000))
for (i in 2:12) {
dat[,i]=rnorm(10000)
}
names(dat)=c("a", letters[2:7], LETTERS[1:5])
Yy=rep(0, 10000)
for (i in 1:7) {
Yy=Yy+i*dat[,i]
}
Yy=1/(1+exp(-Yy))
outcome=c()
for (i in 1:10000) {
outcome[i]=sample(c(1,0), 1, prob=c(Yy[i], 1-Yy[i]))
}
dat=mutate(dat, outcome=factor(outcome))
library(glmulti)
mod=glmulti(outcome ~ .,
data=dat,
level=1,
method="g",
crit="aic",
confsetsize=5,
plotty=F, report=T,
fitfunction="glm",
family="binomial",
minsize=7,
maxsize=7,
conseq=3)
输出
mod@objects[[1]]
Call: fitfunc(formula = as.formula(x), family = "binomial", data = data)
Coefficients:
(Intercept) a b c d e f g
-0.01386 1.11590 1.99116 3.00459 4.00436 4.86382 5.94198 6.89312
Degrees of Freedom: 9999 Total (i.e. Null); 9992 Residual
Null Deviance: 13860
Residual Deviance: 2183 AIC: 2199
对于我参加的课程,我必须执行逻辑逐步回归以将特征的预测变量数量减少到固定数量并估计生成模型的准确性。
我一直在尝试使用 leaps 包中的 regsubsets()
,但我无法获得它的准确性。
现在我正在尝试使用 caret
,因为我可以将其指标设置为“准确性”,但是当我在 train()
函数中使用 method = "glmStepAIC"
时,我无法确定预测变量的数量,因为它没有调整参数。
step.model <- train(Outcome ~ .,
data = myDataset,
method = "glmStepAIC",
metric = "Accuracy",
trControl = trainControl(method = "cv", number = 10),
trace = FALSE)
我找到了这个问题,但答案和链接似乎对我不起作用。
如果不使用插入符号,使用固定数量的预测变量实现简化模型的最佳方法是什么?
您可以使用 glmulti
包指定逐步 selection 中要保留的变量数。在此示例中,列 a 到 g 与结果相关,但列 A 到 E 无关。在 glmulti 中,confsetsize
是 select 的模型数,并设置 minsize
等于 maxsize
以保留变量数。
library(MASS)
library(dplyr)
set.seed(100)
dat=data.frame(a=rnorm(10000))
for (i in 2:12) {
dat[,i]=rnorm(10000)
}
names(dat)=c("a", letters[2:7], LETTERS[1:5])
Yy=rep(0, 10000)
for (i in 1:7) {
Yy=Yy+i*dat[,i]
}
Yy=1/(1+exp(-Yy))
outcome=c()
for (i in 1:10000) {
outcome[i]=sample(c(1,0), 1, prob=c(Yy[i], 1-Yy[i]))
}
dat=mutate(dat, outcome=factor(outcome))
library(glmulti)
mod=glmulti(outcome ~ .,
data=dat,
level=1,
method="g",
crit="aic",
confsetsize=5,
plotty=F, report=T,
fitfunction="glm",
family="binomial",
minsize=7,
maxsize=7,
conseq=3)
输出
mod@objects[[1]]
Call: fitfunc(formula = as.formula(x), family = "binomial", data = data)
Coefficients:
(Intercept) a b c d e f g
-0.01386 1.11590 1.99116 3.00459 4.00436 4.86382 5.94198 6.89312
Degrees of Freedom: 9999 Total (i.e. Null); 9992 Residual
Null Deviance: 13860
Residual Deviance: 2183 AIC: 2199