繁体   English   中英

r中的袋装逻辑回归

[英]bagging logistic regression in r

R_blogger提供以下代码,其中我的添加内容被删除,因为它们不起作用; 我正在寻找一种方法来保存迭代Logistic回归中的系数向量和p值,这样我就可以修剪始终得分不高的变量。

predictions <- foreach(m=1:iterations,.combine=cbind) %do% {
  training_positions <- sample(nrow(training2), size=floor((nrow(training2)/length_divisor)))
  train_pos<-1:nrow(training2) %in% training_positions
  glm_fit <- glm(default~. ,data=training2[train_pos,],family=binomial(logit), 
                 type=response, control = list(maxit = 25))
  predict(glm_fit,newdata=testing)
  #pvalues <- summary(glm_fit)$coeff[-1,4] < 0.0001
  #coeffs <- summary(glm_fit)$coeff[-1,3] 
  }
probs <- rowMeans(predictions)

我希望能够检索类似于预测的系数和p值的对象

注意:此回复已根据评论中的交流进行了重新处理。

因此,这里发生了几件事。

  1. 我假设您提供的数据集training应该与代码中的training2相同。 此数据集中的第一列是一个ID,您的代码会将其作为参数包含在内。 那是你想要的吗?
  2. 您提取行样本的代码不必要地复杂。 您将生成一个介于1和nrow(training2)之间的整数样本,并从中生成一个带有length=nrow(training2)的逻辑向量。 您不需要这样做:只需使用整数向量来索引training2。 速度快得多,尤其是对于如此大的数据集。
  3. 尝试使用大量参数(> 1400)进行拟合时, glm(...)似乎需要对均值进行初始估计。 我没有花时间在上面,而是仅将模型限制为前9个参数(列2:10)。
  4. 在对glm(..)的调用中使用type=predict会影响权重的使用方式。 您没有使用权重,因此此参数不执行任何操作。
  5. 但是,在调用predict(...)确实需要指定type="predict"
  6. 使用maxit = 25通常意味着拟合不收敛,因此您需要对此进行试验。
  7. 在我尝试的一小部分迭代中,没有一个系数的p<0.0001 ,因此出于示例的考虑,我将临界值更改为0.1。
  8. 最后,使用下面的代码中的return(list(...)).combine=cbind更改为.combine=rbind将返回一个列表对象数组,其中每一对应一个迭代,并且列1具有该迭代的预测向量,第2列具有该迭代的p值向量,第3列具有该迭代的系数向量。

这是代码:

library(foreach)
set.seed(1)
training2      <- training
length_divisor <- 1000
iterations     <- 5
predictions <- foreach(m=1:iterations,.combine=rbind) %do% {
  training_positions <- sample(nrow(training2), 
                               size=floor((nrow(training2)/length_divisor)))
#  train_pos<-1:nrow(training2) %in% training_positions
  glm_fit <- glm(default~ . ,
                 data=training2[training_positions,c(2:10,ncol(training2))],
                 family=binomial(logit),
                 control = list(maxit = 25))
  pr <- predict(glm_fit,
                newdata=training2[sample(1:nrow(training2),10),], 
                type="response")
  s <- summary(glm_fit)
  p <- s$coeff[,4]
  c <- s$coeff[,1]
  pvalues <- p[p<0.1]
  coeffs  <- c[p<0.1]
  return(list(pr,pvalues,coeffs))
}
predictions
#          [,1]       [,2]      [,3]     
# result.1 Numeric,10 Numeric,0 Numeric,0
# result.2 Numeric,10 Numeric,0 Numeric,0
# result.3 Numeric,10 Numeric,2 Numeric,2
# result.4 Numeric,10 Numeric,0 Numeric,0
# result.5 Numeric,10 Numeric,0 Numeric,0

因此,在这种布置中, predictions[,1]是所有的预测矢量的列表, prediction[,2]是所有p值的列表<0.1对于每次迭代,和prediction[,3]是所有的列表每次迭代的p值<0.1的系数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM