0

lme4パッケージ を使用して、一般化された線形混合効果モデルをデータに適合させようとしています。

データは次のように記述できます (以下の例を参照): 28 日間にわたる魚の生存データ。サンプル データ セットの説明変数は次のとおりです。

  • Regionこれは、幼虫が発生した地理的地域です。
  • treatment各地域の魚のサブサンプルが上げられた温度。
  • replicate実験全体の 3 つの複製のうちの 1 つ
  • tub確率変数。合計 15 個の浴槽 (水槽で実験温度を維持するために使用) ( replicate5 つの温度ごとに3treatment秒)。各浴槽にはそれぞれ 1つのRegion水槽 (合計 4 つの水槽) が含まれており、実験室にランダムに配置されていました。
  • Day一目瞭然、実験開始からの日数。
  • stage分析には使用されていません。無視できます。

応答変数

  • csns累積生存。すなわちremaining fish/initial fish at day 0
  • start重みは、生存確率が実験開始時の魚の数に比例することをモデルに伝えるために使用されます。
  • aquarium2 番目の確率変数。これは、属している各因子の値を含む個々の水族館の一意の ID です。たとえば、N-14-1 はRegion NTreatment 14、を意味しreplicate 1ます。

私の問題は、以前に次のモデルを装着したことがあるという点で珍しいものです。

   dat.asr3<-glmer(csns~treatment+Day+Region+
      treatment*Region+Day*Region+Day*treatment*Region+
      (1|tub)+(1|aquarium),weights=start, 
      family=binomial, data=data2)  

ただし、モデルを再実行して公開用の分析を生成しようとすると、同じモデル構造とパッケージで次のエラーが発生します。出力は以下のとおりです。

> Warning messages:  

1: In eval(expr, envir, enclos) : 非整数 #二項 glm で成功!
2: in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
モデルは max|grad| = 1.59882 (tol = 0.001, component >1) で収束に失敗しました
3: checkConv( attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
モデルはほとんど識別できません: 非常に大きな固有値
- 変数を再スケーリングしますか?;モデルはほとんど識別できません: 大きな固有値比
- 変数を再スケーリングしますか?

私の理解は次のとおりです。

警告メッセージ 1.

non-integer #success in a binomial glm変数の比率形式を参照しcsnsます。ここに含まれるいくつかのソース、github、r-helpなどを調べましたが、すべてがこれを提案しました。3 年前にこの分析を手伝ってくれたリサーチ フェローは連絡が取れません。lme4過去3年間のパッケージの 変更と関係がありますか?

警告メッセージ 2.

モデルを当てはめるに はデータポイントが不十分であるため
L-30-1、これが問題であることは理解しています 。したがって、モデルを適合させるための変動性や十分なデータはありません。 L-30-2L-30-3

Day 0 csns=1.00Day 1 csns=0.00

それにもかかわらず、このモデルはlme4以前は機能していましたが、現在はこれらの警告なしでは実行できません。

警告メッセージ 3

これは私にはまったくなじみがありません。前にそれを見たことがない。

サンプルデータ:

Region treatment replicate tub Day stage csns start aquarium  
 N        14         1  13   0    1 1.00   107   N-14-1
 N        14         1  13   1    1 1.00   107   N-14-1
 N        14         1  13   2    1 0.99   107   N-14-1
 N        14         1  13   3    1 0.99   107   N-14-1
 N        14         1  13   4    1 0.99   107   N-14-1
 N        14         1  13   5    1 0.99   107   N-14-1

問題のデータは、1005cs.csvこちらから転送されます: http://we.tl/ObRKH0owZb

この問題を解読するための助けをいただければ幸いです。また、このデータを分析するための適切なパッケージまたは方法の代替提案も素晴らしいでしょう.

4

1 に答える 1

3

tl;dr「非整数成功」警告は正確です。二項モデルをこれらのデータに当てはめることが本当に意味があるかどうかを判断するのはあなた次第です。他の警告は、適合が少し不安定であることを示唆していますが、一部の入力変数をスケーリングして中央に配置すると、警告が消える可能性があります。繰り返しになりますが、これらの異なる処方による結果が、心配するほど異なるかどうかを判断するのはあなた次第です...

data2 <- read.csv("1005cs.csv")
library(lme4)

モデルのあてはめ (ややコンパクトなモデルの定式化)

dat.asr3<-glmer(
   csns~Day*Region*treatment+
        (1|tub)+(1|aquarium),
            weights=start, family=binomial, data=data2)

私はあなたが報告した警告を受け取ります。

データを見てみましょう:

library(ggplot2); theme_set(theme_bw())
ggplot(data2,aes(Day,csns,colour=factor(treatment)))+
        geom_point(aes(size=start),alpha=0.5)+facet_wrap(~Region)

ここに画像の説明を入力

ここでは明らかな問題はありませんが、一部の治療の組み合わせではデータが 1 に非常に近く、治療値がゼロからかけ離れていることが明確に示されています。いくつかの入力変数のスケーリングとセンタリングを試してみましょう:

data2sc <- transform(data2,
                     Day=scale(Day),
                     treatment=scale(treatment))
dat.asr3sc <- update(dat.asr3,data=data2sc)

「固有値が非常に大きい」という警告はなくなりましたが、まだ「整数以外の成功数」という警告があり、max|grad|=0.082 です。別のオプティマイザーを試してみましょう。

dat.asr3scbobyqa <- update(dat.asr3sc,
                     control=glmerControl(optimizer="bobyqa"))

これで、「非整数 #successes」警告のみが残ります。

d1 <- deviance(dat.asr3)
d2 <- deviance(dat.asr3sc)
d3 <- deviance(dat.asr3scbobyqa)
c(d1,d2,d3)
## [1] 12597.12 12597.31 12597.56

これらの逸脱はそれほど違いはありません (逸脱スケールの 0.44 は、丸め誤差で説明できる範囲を超えていますが、適合度には大きな違いはありません)。実際、最初のモデルは最高の (最低の) 逸脱を示し、警告が誤検知であることを示唆しています ...

resp <- with(data2,csns*start)
plot(table(resp-floor(resp)))

ここに画像の説明を入力

これにより、整数以外の応答が実際に存在することが明らかになるため、警告は正しいです。

于 2015-12-18T16:54:05.547 に答える