1

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 値のオブジェクトを取得できるようにしたい

4

1 に答える 1

1

注:この応答は、コメントでのやり取りに基づいて作り直されています。

そのため、ここではいくつかのことが行われています。

  1. あなたが提供したデータセットは、あなたのコードtrainingと同じであるはずだと思いました。training2このデータセットの最初の列は ID であり、コードはそれをパラメータとして適合に含めます。それが欲しかったの??
  2. 行のサンプルを抽出するコードが必要以上に複雑です。1 と の間の整数のサンプルをnrow(training2)生成し、そこから論理値 with のベクトルを生成し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します。ここで、各行は反復に対応し、列 1 にはその反復の予測ベクトルがあり、列 2 には p 値のベクトルがあります。列 3 には、その反復の係数のベクトルがあります。.combine=rbind

コードは次のとおりです。

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.1prediction[,3]のリストであり、 は各反復の p 値 < 0.1 を持つすべての係数のリストです。

于 2014-02-14T17:58:59.323 に答える