2017-02-20 16 views
0

私は、応答変数(dat_prob)を含む私のデータセットの列をループすることによってglmerを実行しようとしています。私が使用しているコードは、別のstackoverflow質問(Looping through columns in Rloop through column glmer

彼らのコード:

dat_y<-(dat[,c(2:1130)]) 
dat_x<-(dat[,c(1)]) 
models <- list() 
# 
for(i in names(dat_y)){ 
     y <- dat_y[i] 
    model[[i]] = lm(y~dat_x) 
    } 

マイコード:

dat_prob<-(probs[,c(108:188)]) 
dat_age<-(probs[,c(12)]) 
dat_dist<-(probs[,c(20)]) 
fyearcap=(probs[,c(25)]) 
fstation=(probs[,c(22)]) 
fnetnum=(probs[,c(23)]) 
fdepth=(probs[,c(24)]) 

models <- list() 
# 
for(i in names(dat_prob)){ 
    y <- dat_prob[i] 
    y2=as.vector(y) 
    model[[i]] = glmer(y ~ dat_age * dat_dist + (1|fyearcap) + (1|fstation)+ 
    (1|fnetnum)+ (1|fdepth),family=binomial,REML=TRUE) 
} 

そして、私はこのエラーが発生した、エラーに似ては、ハイパーリンクされた質問に受け取っ:

Error in model.frame.default(drop.unused.levels = TRUE, formula = y ~ : 
invalid type (list) for variable 'y' 

私はされていますこれを何時間も働いていて、今は木々を通って森を見ることができません。

何か助けていただければ幸いです。

+0

はあなたがすべてのものを置くことの方が良いだろうdata.frameを繰り返し、それを繰り返します。あるいは、事前に式を構築して(データをサブセット化する必要はありません)、それを 'glmer'関数に渡すことができます。 'sapply'や' lapply'を使って数式のリストを見ることができます。 –

答えて

0

y <- dat_prob[i]は、yをリスト(またはデータフレームなど)にします。リストはベクトルです - is.vector(list())を試してください。だからy2 = as.vector(y)さえまだリスト/データフレームです(あなたが使っていなくても)。

class(as.vector(mtcars[1])) 
# [1] "data.frame" 

[[使用し、データフレームから数値ベクトルを抽出する:y <- dat_prob[[i]]を。

class(mtcars[[1]]) 
# [1] "numeric" 

私はローマンに同意しますが、フォーミュラを使用するとおそらくより良い方法です。このような何かを試してみてください:

for(i in names(dat_prob)) { 
    my_formula = as.formula(paste(i, 
    "~ dat_age * dat_dist + (1|fyearcap) + (1|fstation)+ (1|fnetnum)+ (1|fdepth)" 
)) 
    model[[i]] = glmer(my_formula, family = binomial, REML = TRUE) 
} 

私はまた、あなたが80種類、応答変数をしようとしてやっている何のかなり懐疑的なんだけど、それはあなたの質問ではありません...

関連する問題