9

R でのモデル平均化に glmulti を使用しています。私のモデルには 10 個までの変数があり、徹底的なスクリーニングは非現実的です。したがって、遺伝的アルゴリズム (GA) を使用する必要があります (call: method = "g")。

ランダム効果を含める必要があるため、lme4 のラッパーとして glmulti を使用しています。これを行う方法は、http://www.inside-r.org/packages/cran/glmulti/docs/glmultiで入手できます。また、glmulti パッケージに含まれる PDF で詳細が説明されています。問題は、この設定で GA を使用するように glmulti に指示すると、最適なモデルが見つかった後でも、GA が無期限に実行されることです。

これは、glmulti パッケージに含まれている pdf からの例です。

library(lme4)
library(glmulti)

# create a function for glmulti to act as a wrapper for lmer:
lmer.glmulti <- function (formula, data, random = "", ...) {
lmer(paste(deparse(formula), random), data = data, REML=F, ...)
}

# set some random variables:
y = runif(30,0,10) # mock dependent variable
a = runif(30) # dummy covariate
b = runif(30) # another dummy covariate
c = runif(30) # an another one
x = as.factor(round(runif(30),1))# dummy grouping factor

# run exhaustive screening with lmer:
bab <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)")

これはうまくいきます。問題は、遺伝的アルゴリズムを使用するように指示したときです。

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)", method = "g")

無期限に実行し続けるだけで、AIC は変更されません。

...

After 19550 generations:
Best model: y~1
Crit= 161.038899734164
Mean crit= 164.13629335762
Change in best IC: 0 / Change in mean IC: 0

After 19560 generations:
Best model: y~1
Crit= 161.038899734164
Mean crit= 164.13629335762
Change in best IC: 0 / Change in mean IC: 0

After 19570 generations:
Best model: y~1
Crit= 161.038899734164
Mean crit= 164.13629335762

... etc.

glmulti にいつ停止するかを伝える呼び出し (deltaB = 0、deltaM = 0.01、conseq = 6) を使用してみましたが、何も機能していないようです。問題は関数の設定にあるに違いないと思います(?)。それは本当に明白なことかもしれませんが、私はRに慣れていないのでうまくいきません。

これについての助けは大歓迎です。

4

2 に答える 2

5

パッケージメンテナーから解決策を受け取りました。問題は、探索されるモデルの数が引数によって設定されることconfsetsizeです。デフォルト値は 100 です。

によると?glmulti、この引数は次のとおりです。

検索するモデ​​ルの数、つまり返される信頼セットのサイズ。

confsetsize解決策は、モデルの総数以下になるように設定することです。

停止しなかったOPの例から始めます。

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "g")

glmultiを使用して候補モデルの総数を決定しますmethod = "d"

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "d")



Initialization...
TASK: Diagnostic of candidate set.
Sample size: 30
0 factor(s).
3 covariate(s).
...
Your candidate set contains 64 models.

したがって、confsetsize64 以下に設定すると、目的の動作が得られます。

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "g", confsetsize = 64)

ただし、小さなモデルの場合は、徹底的な検索 (method = "h") を使用するだけで十分な場合があります。

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "h")
于 2013-05-15T17:25:30.947 に答える
2

問題は、このパッケージをテスト実行するために使用した例 (上記) に 3 つの変数しか含まれていないことです。4 番目を追加すると、正常に動作します。

d = runif(30)

そして、GA を使用するように指示して再度実行します。

babs <- glmulti(y~a*b*c*d, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)", method = "g")

戻り値:

...

After 190 generations:
Best model: y~1
Crit= 159.374382952181
Mean crit= 163.380382861026
Improvements in best and average IC have bebingo en below the specified goals.
Algorithm is declared to have converged.
Completed.

3 つ未満の変数で GA を使用しようとすると、GLM ですぐに使用できる glmulti を使用しても同じ結果が得られます。これは実際には問題ではありませんが、変数が 3 つしかない場合は、徹底的な検索を行うことができます。問題は例でした。

于 2012-09-02T15:48:12.353 に答える