装箱物流回归

时间:2014-02-14 17:24:30

标签: r logistic-regression

R_blogger提供以下代码,我的添加内容被注释掉,因为它们不起作用;我正在寻找一种方法来保存迭代逻辑回归中的系数向量和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 个答案:

答案 0 :(得分:1)

NB 此回复已根据评论中的交换进行了修改。

所以这里有几件事情。

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

    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的所有系数的列表。