2016-08-29 6 views
1

私は自己構築型インタラクション変数を使ってlmeを取得しようとしています。事後分析に必要なものが必要です。私はこのエラーを知ったR:自己構築型のインタラクション変数を使用するときにlme {nlme}を得ることができません

Error in MEEM(object, conLin, control$niterEM) : 
    Singularity in backsolve at level 0, block 1 

何も今のところ、私は問題を解決するために助けない:

library(nlme) 

# construct fake dataset 
obsr <- 100 
dist <- rep(rnorm(36), times=obsr) 
meth <- dist+rnorm(length(dist), mean=0, sd=0.5); rm(dist) 
meth <- meth/dist(range(meth)); meth <- meth-min(meth) 
main <- data.frame(meth = meth, 
        cpgl = as.factor(rep(1:36, times=obsr)), 
        pbid = as.factor(rep(1:obsr, each=36)), 
        agem = rep(rnorm(obsr, mean=30, sd=10), each=36), 
        trma = as.factor(rep(sample(c(TRUE, FALSE), size=obsr, replace=TRUE), each=36)), 
        depr = as.factor(rep(sample(c(TRUE, FALSE), size=obsr, replace=TRUE), each=36))) 

# check if all factor combinations are present 
# TRUE for my real dataset; Naturally TRUE for the fake dataset 
with(main, all(table(depr, trma, cpgl) >= 1)) 

# construct interaction variables 
main$depr_trma <- interaction(main$depr, main$trma, sep=":", drop=TRUE) 
main$depr_cpgl <- interaction(main$depr, main$cpgl, sep=":", drop=TRUE) 
main$trma_cpgl <- interaction(main$trma, main$cpgl, sep=":", drop=TRUE) 
main$depr_trma_cpgl <- interaction(main$depr, main$trma, main$cpgl, sep=":", drop=TRUE) 

# model WITHOUT preconstructed interaction variables 
form1 <- list(fixd = meth ~ agem + depr + trma + depr*trma + cpgl + 
          depr*cpgl +trma*cpgl + depr*trma*cpgl, 
       rndm = ~ 1 | pbid, 
       corr = ~ cpgl | pbid) 

modl1 <- nlme::lme(fixed=form1[["fixd"]], 
        random=form1[["rndm"]], 
        correlation=corCompSymm(form=form1[["corr"]]), 
        data=main) 

# model WITH preconstructed interaction variables 
form2 <- list(fixd = meth ~ agem + depr + trma + depr_trma + cpgl + 
          depr_cpgl + trma_cpgl + depr_trma_cpgl, 
       rndm = ~ 1 | pbid, 
       corr = ~ cpgl | pbid) 

modl2 <- nlme::lme(fixed=form2[["fixd"]], 
        random=form2[["rndm"]], 
        correlation=corCompSymm(form=form2[["corr"]]), 
        data=main) 

最初のモデルは、第2のモデルは私に次のエラーを与えるのに対し、何の問題もなくフィットします。しかし、その解決法はおそらくかなり簡単です。

誰かが私を助けることができますか?前もって感謝します!


EDIT 1:

私が実行します。

modl3 <- lm(form1[["fixd"]], data=main) 
modl4 <- lm(form2[["fixd"]], data=main) 

要約がmodl3とは対照的に(自己構築の相互作用変数を持つ)modl4は、より多くの予測因子を示していることを明らかにしました。 4であるが3ではなく、すべてが係数としてNAを示す。問題はそのため間違いEDIT 2


...私は相互作用変数を作成する方法の範囲内にある:私は「手で」対話変数を作成した一方で

(主にpaste()grepl()) - 今はうまくいくようです。しかし、私はまだinteraction()機能を使用して私がそれを実現できた方法に興味があります。

答えて

1

私は、相互作用変数の最大値(3つの単純変数すべてを組み合わせたもの)のみを構築しておきます。

もしそうなら、モデルは適合します。したがって、尤度はお互いに非常に近く、係数の数は正確に一致します。

関連する問題