16

STANで使用するカテゴリ予測子をフォーマットする適切な方法は何ですか? カテゴリー予測子を通常の因子変数として入力できないようです。スタンが受け入れられるように通常のカテゴリー変数を変換する最も簡単な方法は何ですか?

たとえば、継続予測子とカテゴリ予測子があったとします。

your_dataset = data.frame(income = c(62085.59, 60806.33, 60527.27, 67112.64, 57675.92, 58128.44, 60822.47, 55805.80, 63982.99, 64555.45),
country = c("England", "England", "England", "USA", "USA", "USA", "South Africa", "South Africa", "South Africa", "Belgium"))

次のようになります。

     income      country
1  62085.59      England
2  60806.33      England
3  60527.27      England
4  67112.64          USA
5  57675.92          USA
6  58128.44          USA
7  60822.47 South Africa
8  55805.80 South Africa
9  63982.99 South Africa
10 64555.45      Belgium

これを に入力するにはどのように準備すればよいrstanですか?

4

2 に答える 2

24

Stan が実数変数または整数変数のみを入力するのは正しいことです。この場合、カテゴリ予測子をダミー変数に変換します (おそらく参照カテゴリを除外します)。Rでは、次のようなことができます

dummy_variables <- model.matrix(~ country, data = your_dataset)

このようになります

   (Intercept) countryEngland countrySouth Africa countryUSA
1            1              1                   0          0
2            1              1                   0          0
3            1              1                   0          0
4            1              0                   0          1
5            1              0                   0          1
6            1              0                   0          1
7            1              0                   1          0
8            1              0                   1          0
9            1              0                   1          0
10           1              0                   0          0
attr(,"assign")
[1] 0 1 1 1
attr(,"contrasts")
attr(,"contrasts")$country
[1] "contr.treatment"

ただし、他の変数にモデル化されていない欠損値がある場合、適切な数の観測値が得られない可能性があります。このアプローチは、モデル式全体を次のように入力することで、さらに一歩進めることができます。

X <- model.matrix(outcome ~ predictor1 + predictor2 ..., data = your_dataset)

これで、次のような線形代数を使用する .stan プログラムで使用できる予測子の計画行列全体が得られました。

data {
  int<lower=1> N;
  int<lower=1> K;
  matrix[N,K]  X;
  vector[N]    y;
}
parameters {
  vector[K] beta;
  real<lower=0> sigma;
}
model {
  y ~ normal(X * beta, sigma); // likelihood
  // priors
}

.stan プログラムを同じモデルのさまざまなバリエーションや異なるデータセットで再利用できるようにするため、計画マトリックスを利用することをお勧めします。

于 2015-03-21T15:48:13.667 に答える