2016-03-31 27 views
1

たとえば、応答変数が1つ(Y)、予測子が5つ(X1-X5)あります。 私は、GLMモデルに合うようにしようと、次のようにモデルに固定X5との乖離差を計算しています"for"ループ内の固定変数を除外する

ind_var <- names(dat)[substr(names(dat),1,1)=="X"] 
results <- data.frame() 
for (i in ind_var) 
{ 
glm1 <- glm(as.formula(paste("Y~X5+",i)), family=binomial, data=dat) 
dDeviance <- with(glm1,(null.deviance-deviance)) 
df <- data.frame(ind_var=i, diff=dDeviance) 
results <- rbind(results, df) 
} 

質問:

1)どのようにX5を除外するためのループがi

を選択しています

2)モデルに固定変数を挿入する方法(ここではX5です)。上記のようなモデルにX5を貼り付けると、結果が正しくないことに気付きました。ここでは、モデルをペースト機能でチェックするために手動で行いますが、99 dfの係数が1つしかないことがわかります。私はY~X5+X1と普通のモデルを信じていますと3係数(迎撃を含む)が必要です。

mod1 <- glm(as.formula(paste("Y~X5+",X1)), family=binomial, data=dat) 
mod1 

Call: glm(formula = as.formula(paste("Y~X5+", X1)), family = binomial, 
data = dat) 

Coefficients: 
X5 
0.02581 

Degrees of Freedom: 100 Total (i.e. Null); 99 Residual 
Null Deviance:  138.6 
Residual Deviance: 138.6  AIC: 140.6 

どのような提案も高く評価されます。

+0

これは完全に私には明らかではありません。 'ind_var'は変数名を含む変数ですか?もしそうなら、質問1に答えるために、ベクトルから 'X5'を取り除くことでこれを解決できませんでしたか?質問2については、なぜ間違っているのですか?ここに結果と期待される結果を表示できますか? – Laterow

+0

あなたのコメントのために@Laterowに感謝します。以前の投稿にいくつかの情報を追加しました。 ind_varについて、私は実際に他の変数(固定変数として他のX1/X2/X3/X4)でもこれを繰り返す必要があります。しかし、私が解決策を見つけることができなかったなら、私はそれを手動で削除する必要があります。 – Shima

答えて

2

ifの条件は、for loopの冒頭に追加するとどうなりますか?

for(i in 1:10){ 
    if(i == 5) next 

    print(i) 
} 

i == 5場合、これは次のiにスキップします。あなたのケースでは

は使用しない理由X5

また、に置き換えます

ind_var <- 1:10 

for(i in ind_var[-5]){ 
      print(i) 
     }