1

私はこのQA:「Rでの効率的なループロジスティック回帰」を自分の問題に適用しようとしましたが、それを完全に機能させることはできません。私はapplyを使用しようとはしていませんが、forループがここで最適であると数人から言われました(誰かがそうでないと信じている場合は、遠慮なく説明してください!)この問題はかなり一般化可能であり、フォーラム。

これが私が達成したいことです。3つの予測変数(性別、年齢、人種)と、数人の86の遺伝的位置の従属変数(比率)を含むデータセットがあります。各位置に対して2変量線形回帰を実行したいと思います(したがって、3つの予測変数に対して86の線形回帰)。次に、結果を読みやすい形式で出力したいと思います。私の考えは、rows =性別、年齢、人種、columns=86の位置を持つマトリックスです。行と列の組み合わせごとにap値があります。次に、p値<0.1(または必要なしきい値)を呼び出して、どの予測子が各位置の比率に有意に関連しているかを簡単に確認できます。

これは私がこれまでに持っているコードです。

BB <- seq.csv[,6:91]   #the data frame containing the 86 positions
AA <- seq.csv[,2:4]    #the data frame containing the 3 predictor variables

linreg <- matrix(NA,3,86)  #make a results vector and fill it with NA
    for (i in 1:86)     #loop over each position variable
    {
              for (j in 1:3)  #for each position variable, loop over each predictor
    {
              linreg[i,j] <- lm(BB[,i]~AA[,j])  #bivariate linear regression
}}

これをどのように変更しても(たとえば、1つの予測子の位置をループするように単純化しても)、行列が同じ長さではないというエラーが発生します(置換するアイテムの数は置換の長さの倍数ではありません) 。実際、length(linreg)= 286(3 * 86)およびlength(BB)= 86およびlength(AA)=3です。後者の2つは行列ではなくデータフレームであることは知っていますが、それらを行列に変換すると、無効な型エラー(変数'BB [、i]'の無効な型(リスト))が発生します。私はRを十分に理解していないので、このエラーを解決する方法がわかりません...私はRとArt of Rプログラミングを使用した応用統計遺伝学の本を参考にしましたが、Googleですべてを検索しています日。そして、私は結果を出力するためのコーディングにさえ到達していません...

これをコーディングするためのより良い方法に関するデバッグのヒントやいくつかの提案をいただければ幸いです。よろしくお願いします。

4

1 に答える 1

2

データの構造を事前に知らずに決定的な答えを出すのは本当に難しいですが、これはうまくいくかもしれません。2つのデータフレームの行数(観測値)が同じであると想定しています。

df <- cbind( AA[ , 2:4 ] , BB[ , 6:91 ] )
mods <- apply( as.data.frame( df[ , 4:89 ] ) , 2 , FUN = function(x){ lm( x ~ df[,1] + df[,2] + df[,3] } )

# The rows of this matrix will correspond to the intercept, gender, age, race, and the columns are the results for each of your 86 genetic postions
pvals <- sapply( mods , function(x){ summary(x)$coefficients[,4] )

それが正しいことであるかどうかについては、遺伝疫学者としてのあなたの判断を信頼します!

于 2013-03-08T23:30:10.300 に答える