注:この応答は、コメントでのやり取りに基づいて作り直されています。
そのため、ここではいくつかのことが行われています。
- あなたが提供したデータセットは、あなたのコード
training
と同じであるはずだと思いました。training2
このデータセットの最初の列は ID であり、コードはそれをパラメータとして適合に含めます。それが欲しかったの??
- 行のサンプルを抽出するコードが必要以上に複雑です。1 と の間の整数のサンプルを
nrow(training2)
生成し、そこから論理値 with のベクトルを生成しlength=nrow(training2)
ます。これを行う必要はありません。整数のベクトルを使用して、training2 のインデックスを作成するだけです。特にこのような大規模なデータセットでは、はるかに高速です。
- このように多数のパラメーター (>1400) で近似を試みる場合
glm(...)
、平均の初期推定が必要なようです。それに時間を費やすのではなく、モデルを最初の 9 つのパラメーター (列 2:10) に制限しました。
type=predict
の呼び出しで使用すると、glm(..)
重みの使用方法に影響します。重みを使用していないため、このパラメーターは何もしません。
- ただし、
predict(...)
あなたへの呼び出しでは、指定する必要がありますtype="predict"
。
- を使用
maxit = 25
すると、一般的に近似が収束しないことを意味するため、実験する必要があります。
- 私が試した小さな反復セットでは、どの係数も を持っていなかった
p<0.0001
ので、例のためにカットオフを 0.1 に変更しました。
- 最後に、
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 を持つすべての係数のリストです。