2017-02-16 9 views
0

私はいくつかの曝露の関数として結果をモデル化しようとしています。交絡因子(モデルに追加されたときに係数を≥10%Δにする)の共変量のモデルを調整します。私は、潜在的な交絡因子として多くの共変量を検討しているので、それらのすべてを含むデータフレームを作成し、lapplyを使用しています(結果と曝露は、すでに添付された別のデータフレームにあります)。すべての出力を簡単にソートするには、共変量がコンフェディナーの場合にのみ出力を表示する関数を作成しようとしました。エクスポーズとその数はモデルごとに異なりますので、解析を実行するたびにコードを記述する必要がありますが、より簡単な方法が必要であることがわかります。 confoundersとCovariatesデータフレームを引数として使用しないモデルを使用して、ちょうどlapplyに書くことができる関数がありますか?ありがとう!交絡変数を特定するための関数を書く

lapply(Covariates, function(x) { 
    model <- summary(lm(Outcome ~ Exposure1 + Exposure2 + ... + x)) 
    if ((model$coefficients[2, 1] - summary(lm(Outcome ~ Exposure))$coefficients[2, 1])/ 
     model$coefficients[2, 1] >= .1) 
    return(model) 
}) 
+2

してください[再現性の例を提供](http://stackoverflow.com/questions/5963269/how-to-make-a- great-r-reproducible-example) – Jean

+0

すべての列名を取得するのに 'colnames'を使ってみてください。 Outcomeが他の唯一のフィールドである限り、基本的に関数 'exposures <-colnames(x)'を記述し、リストから '' Outcome ''を削除して、エクストラクターをブーリアンマスクに混入させることができます。おそらく文法を変えていくつかのことをする必要があるかもしれませんが、うまくいくはずです。 – sconfluentus

答えて

0

この問題を解決する関数を作成しました。

confounder <- function(model) { 
     model.sum <- summary(model) 
     model.b <- model.sum$coefficients[2, 1] 
     oldmodel <- update(model, . ~ . -x) 
     oldmodel.sum <- summary(oldmodel) 
     oldmodel.b <- oldmodel.sum$coefficients[2, 1] 
     model.frame <- tidy(model.sum) 
     model.sub <- subset(model.frame, term = "x") 
     model.sub.b <- model.sub[, 5] 
     if ((model.b - oldmodel.b)/model.b >= .1 | 
      model.sub.b < .05) 
     return(model.sum) 
    } 

私はその後lapplyこの機能モデルへ:

lapply(Covariates, function(x) { 
     confounder(lm(Outcome ~ Exposure1 + Exposure2 + ... + x)) 
    }) 
関連する問題