3

〜40万の予測変数のそれぞれについて、複数のロジスティック回帰分析を実行しようとしています。各実行の出力を出力テーブルの行/列にキャプチャしたいと思います。

私のデータは 2 つの部分で構成されています。400000 x 189 の double 行列 ( mydatamatrix) があります。これには、189 人の個人 ( ) で測定された 400000 の予測変数のそれぞれの観測値/データが含まれていますP1。また、2 つ目の 189 x 20 データ フレーム ( mydataframe) には、結果変数と別の予測変数 (O1およびP2) に加えて、この特定の分析では使用されていない 18 の他の変数が含まれています。

私の回帰モデルはO1~ P1+P2で、O1はバイナリです。

次のループが機能するようになりました。

結果の出力ファイルを作成する

output<-data.frame(matrix(nrow=400000, ncol=4))
names(output)=c("Estimate", " Std. Error", " z value", " Pr(>|z|)")

予測子のロジスティック回帰ループを実行iし、出力を出力ファイルに保存します

for (i in c(1:400000)){
  result<-(glm(mydataframe$O1 ~ mydatamatrix[,i] + as.factor(mydataframe$P2),
               family=binomial))
  row.names(output)<-row.names(mydatamatrix)
  output[i,1]<-coef(summary(result))[2,1]
  output[i,2]<-coef(summary(result))[2,2]
  output[i,3]<-coef(summary(result))[2,3]
  output[i,4]<-coef(summary(result))[2,4]
}

ただし、実行時間は膨大です (最初の 20k テストを出力するのに 1 時間以上かかりました)。この分析を実行するためのより効率的な方法はありますか?

4

1 に答える 1

1

ループapplyの代わりに使用すると高速になります。for

t(apply(mydatamatrix, 2,
        function(x)
          coef(summary(glm(mydataframe$O1 ~ x + as.factor(mydataframe$P2), 
                           family=binomial)))[2, 1:4]))
于 2012-11-16T14:12:09.547 に答える