0

ライブラリ経由で R の OpenBUGS を使用して階層ベイジアン分析を実行しようとしていますR2OpenBUGSが、モデル コンパイルの初期段階でエラー メッセージが表示され続けます。植物のサイズと環境の関数として、植物の機能特性をモデル化しようとしています。いくつかの植物種について、形質、胸の高さ (dbh) での直径、および標高に関するデータがあります。

私のモデルとデータ仕様は次のとおりです(データ生成部分を除く):

model = function() {
  for(i in 1:22){
    mu[i] ~ dnorm(0, 0.00001)
    env[i] ~ dnorm(0, 0.00001)
    s[i] ~ dnorm(0, 0.00001)
    me[i] ~ dnorm(0, 0.00001)

    for(j in 1:np[i]){
      tr[i, j] ~ dnorm(eff[i, j], tau)
      eff[i, j] <- mu[i] + s[i] * log(dbh[i, j]) + env[i] * pow(edev[i, j], 2) * (edev[i, j] / abs(edev[i, j]))
      edev[i, j] <- e[i, j] - me[i]
    }
  }

  tau ~ dnorm(0, 0.00001)
  sig <- 1 / tau
}

library(R2OpenBUGS)
model.file = file.path(tempdir(), "model.txt")
write.model(model, model.file)

data.th = list(tr = tr.th, dbh = dbh, e = elevadj, np = np)
params = c("mu", "env", "s", "me", "sig")
inits = function() { list(mu = rep(1, 22), s = rep(1, 22), env = rep(1, 22), me = rep(1, 22), tau = 1) }

out.th = bugs(data.th, inits, params, model.file, n.iter = 10000, codaPkg = T)

モデル化するパラメータの説明:

  • mu: 種の平均
  • s: サイズ効果のパラメータ
  • env: 環境 (高度) 効果のパラメータ
  • me: 各種の理論上の「最適」高度
  • sig: 分散で表される誤差項

データは行列tr.thdbh、に格納されelevadj、各行は各植物種を表します。私のデータは不均衡です: 種ごとに異なる数のサンプル ポイントが含まれています。は、各植物種の実際の (非) サンプル ポイントnpの数を含むベクトルです。NA(エラーを特定するために実際のデータが必要かどうかはわかりません。リクエストがあれば、ここにサンプルを投稿します)

このモデルを実行しようとすると、「変数 dbh が定義されていません」というエラー メッセージが表示され、コンパイルに失敗します。以前にモデルを正常に実行したことがあり、現在実行しようとしているモデルとそれほど変わらないため、これは非常に奇妙です。R で OpenBUGS を使用してベイジアン解析を開始してからまだ数週間しか経っておらず、いくつかの重要なポイントが欠けている可能性があるため、これはおそらく書式設定または仕様に関する単純でばかげた間違いだと思います。

サイトを見て、次の質問を見つけましたが、問題を解決するための申請に成功しませんでした:

マニュアルを読んでも役に立ちませんでした。次のテキストがありますが、あいまいすぎて理解できません。

'undefined variable' - リレーションの右辺で使用されない限り、モデルで未定義の変数を使用できます

RStudio バージョン 0.98.1091 と OpenBUGS バージョン 3.2.3 rev 1012 を使用しています。

誰かが問題の根本とそれを修正する方法を特定するのを手伝ってくれれば、とても感謝しています.

4

1 に答える 1

0

質問を編集するかコメントを追加する必要があるかどうかは実際にはわかりませんが、問題の原因を見つけたので、最初にここで対処しようとします. 一言で言えば、間違っているのはコードではなく、むしろデータ形式です。

上で述べたように、私のモデルでは、ベクトルを使用して、npさまざまな植物種の実際の (非 NA) サンプル ポイントの数を指定し、それぞれをjループで評価します。生成に使用したコードnpが正しくないことが判明したため、NA 以外のサンプル ポイントの数と実際には一致しません。したがって、モデルがデータを呼び出そうとするとNA、不均衡なデータに が含まれます。これが問題の原因であると思われます。これは、不均衡なデータをマトリックスに格納するためです。

この質問が個人的なブログ投稿になるのを防ぐために、持ち帰りのメッセージは次のようになると思います。

  1. コードを徹底的にチェックしてください(当たり前)
  2. データに次のものが含まれている場合は注意してくださいNA
  3. 特に不均衡なデータがある場合、データをマトリックスに格納することはあまり良い考えではないようです

質問を編集して、2 番目と 3 番目のポイントに直接対処する方がよいと考えていますが、その方法はまだわかりません。

于 2015-06-29T01:32:00.267 に答える