{"action":"created","comment":{"url":"https://api.github.com/repos/stan-ja/stan-ja/pulls/comments/55120300","id":55120300,"diff_hunk":"@@ -0,0 +1,1186 @@\n+## 6. 回帰モデル\n+\n+Stanでは、単純な線形回帰からマルチレベルの一般化線形モデルまで、回帰モデルを扱えます。\n+\n+### 6.1. 線形回帰\n+\n+以下は最も単純な線形回帰モデルで、1つの予測変数と、傾きと切片の係数があり、ノイズは正規分布です。このモデルは、標準的な回帰の記法を用いて記述できます。\n+\n+![$$ y_{n} = \\alpha + \\beta x_{n} + \\epsilon_{n} \\quad\\text{ここで}\\quad \\epsilon_{n} \\sim \\mathsf{Normal}(0, \\sigma) $$](fig/fig01.png)\n+\n+これは、以下のように残差を取り入れてサンプリングするのと等価です。\n+\n+![$$ y_{n} - (\\alpha + \\beta X_{n}) \\sim \\mathsf{Normal}(0, \\sigma) $$](fig/fig02.png)\n+\n+さらに短くなります。\n+\n+![$$ y_{n} \\sim \\mathsf{Normal}(\\alpha + \\beta X_{n}, \\sigma) $$](fig/fig03.png)\n+\n+このモデルの最後の形はStanでは以下のようにコーディングします。\n+\n+```\n+data {\n+  int<lower=0> N;\n+  vector[N] x;\n+  vector[N] y;\n+}\n+parameters {\n+  real alpha;\n+  real beta;\n+  real<lower=0> sigma;\n+}\n+model {\n+  y ~ normal(alpha + beta * x, sigma);\n+}\n+```\n+\n+`N`回の観測がおこなわれ、その各回に予測変数`x[n]`と結果`y[n]`とがあります。切片と傾きのパラメータは`alpha`と`beta`です。このモデルでは、スケール`sigma`の、正規分布するノイズ項を仮定しています。また、2つの回帰係数には非正則事前分布が設定されています。\n+\n+#### 行列記法とベクトル化\n+\n+前のモデルのサンプリング文はベクトル化されています。\n+\n+```\n+y ~ normal(alpha + beta * x, sigma);\n+```\n+\n+同じモデルの、ベクトル化されていないバージョンは以下のとおりです。\n+\n+```\n+for (n in 1:N)\n+  y[n] ~ normal(alpha + beta * x[n], sigma);\n+```\n+\n+より簡潔なことに加えて、ベクトル化された形の方がはるかに高速です。<sup>1</sup>\n+\n+Stanでは一般に、`normal`のような分布に渡す引数はベクトルにすることができます。いずれかの他の引数がベクトルまたは配列なら、すべて同じサイズでなくてはなりません。いずれかの他の引数がスカラーなら、その値はベクトルの各要素に再利用されます。確率関数のベクトル化についてのより詳しい情報は37.5節を参照してください。\n+\n+この書き方がうまくいく他の理由は、行列には行列演算を行なうように、Stanの算術演算子がオーバーロードされるからです。この場合では、`x`が`vector`型で`beta`が`real`型なので、式`beta * x`は`vector`型です。Stanはベクトル化をサポートしているので、2つ以上の予測変数がある回帰モデルもそのまま行列の記法を用いて書くことができます。\n+\n+```\n+data {\n+  int<lower=0> N;  // number of data items\n+  int<lower=0> K;  // number of predictors\n+  matrix[N,K] x;   // predictor matrix\n+  vector[N] y;     // outcome vector\n+}\n+parameters {\n+  real alpha;           // intercept\n+  vector[K] beta;       // coefficients for predictors\n+  real<lower=0> sigma;  // error scale\n+}\n+model {\n+  y ~ normal(x * beta + alpha, sigma);  // likelihood\n+}\n+```\n+\n+`sigma`の宣言には`lower=0`という制約をつけて、値が0以上になるように制限しています。`model`ブロックには事前分布がないので、非負の実数の非正則事前分布ということになります。より情報のある事前分布を加えることもできますが、正則事後分布が導ける限り、非正則事前分布も使えます。\n+\n+上のモデルでは、`x`は$N \\times K$行列の予測変数、`beta`は$K$次元ベクトルの係数なので、`x * beta`は$N$次元ベクトルの予測値です。$N$個のデータ項目のそれぞれに対応します。これら予測値は、$N$次元ベクトル`y`にある結果に対応して並んでいますので、上のようにモデル全体を行列演算を使って書くことができます。値が1の列を`x`に含めることにより、`alpha`パラメータをなくすこともできるでしょう。\n+\n+上のモデルのサンプリング文は、統計的に等価な以下のモデルのような、ループを使ったモデルを、より効率的に、ベクトルによる方法でコーディングしただけです。\n+\n+```\n+model {\n+  for (n in 1:N)\n+    y[n] ~ normal(x[n] * beta, sigma);\n+}\n+```\n+\n+Stanの行列のインデキシング方式により、`x[n]`は行列`x`の行`n`を取り出します。`beta`は列ベクトルなので、積`x[n] * beta`は`real`型のスカラーです。\n+\n+<sup>1</sup> インタープリタのPythonやRとは違って、StanはC++に変換されてコンパイルされるので、ループも代入文も高速です。ベクトル化したコードがStanで速いのは次の理由によります。(a)導関数を計算するのに使われる式木を単純にできるので、実質的な関数呼び出しを少なくできます。(b)上のモデルの`log(sigma)`のような計算は、ループ版では繰り返し実行されますが、ベクトル化すると1度だけ実行されて、その後は再利用されます。\n+\n+##### 入力に含めた切片\n+\n+以下にあるモデルの定式化では、切片の係数`alpha`はもうありません。\n+\n+```\n+y ~ normal(x * beta, sigma);\n+```\n+\n+そのかわり、入力行列`x`の最初の列が、値が1の列であると仮定しています。この方法では、`beta[1]`が切片の役割を果たしているのです。もし切片が、傾きの項とは異なる事前分布を取っているなら、違いがはっきりするでしょう（**?be clearer to break it out?**）。乗算の回数が1つ減るので、係数の変数を明示的に別にする形式よりもやや効率的でもあります。といっても、速度にはたいした違いはでないでしょうから、これを選ぶ理由は明確さにあるでしょう。\n+\n+### 6.2. 係数とスケールの事前分布\n+\n+この節では、回帰の係数とスケールの事前分布をモデリングするときにどのような選択肢があるか説明します。階層モデルにおける1変量のパラメータの事前分布は6.9節で議論し、多変量のパラメータについては6.12節で議論します。また、モデルの識別性のために使う事前分布については6.11節で議論します。\n+\n+#### 背景となる文献\n+\n+スケールパラメータの事前分布の選択についての概要についてさらに知るにはGelman (2006)を参照してください。罰則付き最尤推定値におけるスケールの事前分布の選択の概要についてはChung et al. (2013)を参照してください。回帰係数の事前分布の選択に関する議論についてはGelman et al. (2008)を参照してください。\n+\n+#### 非正則一様事前分布\n+\n+Stanはデフォルトでは、宣言された制約で決まる値をすべて取りうる一様（あるいは「平坦」）事前分布をパラメータに設定します。したがって、制約なしに宣言されたパラメータはデフォルトでは($-\\infty$,$\\infty$)の一様事前分布が与えられます。一方、下限が0と宣言されたスケールパラメータでは、(0,$\\infty$)の非正則一様事前分布となります。両者の事前分布とも、取りうる範囲全体で積分すると1になるような密度関数には決して定式化されないという意味で非正則です。\n+\n+Stanでは、非正則事前分布でモデルを定式化することができますが、サンプリングあるいは最適化がうまくいくためには、事後分布が正則になるようなデータを与える必要があります。そのためには通常、最小量のデータがなくてはなりませんが、これは推定の基準として有用なことがあります。あるいは、感度分析（すなわち、事前分布が事後分布に及ぼす影響を検討する）の起点としても同様です。\n+\n+一様事前分布は、それが定式化された軸に依存します。例えば、スケールパラメータ$\\sigma > 0$に(0,$\\infty$)という一様事前分布を与え、$q(\\sigma)=c$（「密度」は正規化されていないものだけではなく、正規化されない可能性のあるものにも使われるので、ここでは$q$を使います）とすることもできるでしょうし、対数軸を使って、$\\log\\sigma$に($-\\infty$,$\\infty$)という一様事前分布を与え、$q(\\log\\sigma)=c$とすることもできるでしょう。対数変換に必要なヤコビアンの調整のため、これらは$\\sigma$について別の事前分布となります。変数の変化とそれに必要なヤコビアンの調整についてもっと知りたいときは56.1節を参照してください。\n+\n+Stanは、制約付きで宣言された変数について、制約の値を取りうる一様密度となるように、必要なヤコビアンの調整を自動的におこないます。このヤコビアンの調整は最適化のときには行なわれませんが、これは適切な最尤推定値を生成するためです。\n+\n+#### 正則一様事前分布: 範囲の制約\n+\n+上限と下限の両方を設定することで、正則一様事前分布を取るような変数を宣言することも可能です。以下はその例です。\n+\n+```\n+real<lower=0.1, upper=2.7> sigma;\n+```\n+\n+これは`sigma`に、$\\mathsf{Uniform}(0.1,2.7)$という事前分布を暗黙のうちに与えるでしょう。\n+\n+##### 制約を合わせる\n+\n+制約すべてについて同じことが言えますが、`sigma`の取りうるすべての値についてモデルでも同じとなっていることが重要です。例えば、下のコードでは`sigma`が正に制約されていますが、その一様事前分布では上下限を設定しています。\n+\n+```\n+parameters {\n+  real<lower=0> sigma;\n+  ...\n+model {\n+  // *** 悪い例 *** : 制約より狭い範囲しか取りません\n+  sigma ~ uniform(0.1, 2.7);\n+```\n+\n+このサンプリング文は`sigma`に(0.1, 2.7)の範囲を設定しています。この範囲は、制約で宣言された範囲、すなわち(0, $\\infty$)よりも狭くなっています。このようにすると、Stanプログラムは、初期化が困難になったり、サンプリング中にハングしたり、ランダムウォークに陥ったりする可能性があります。\n+\n+##### 上下限付近の推定値\n+\n+範囲制限のついたパラメータの境界近くに推定値があることは通常、事前分布がモデルに合っていないことを示しています。また、サンプリングまたは最適化の際に、アンダーフローやオーバーフローといった数値的な問題を起こす可能性もあります。\n+\n+#### 「無情報」正則事前分布\n+\n+回帰係数に$\\mathsf{Normal}(0,1000)$のような事前分布をつけたモデルは珍しくありません。<sup>2</sup>事前分布のスケールが、1000のように、推定される係数よりも数桁大きい場合は、そのような事前分布は事実上まったく何の効果も持ちません。\n+\n+BUGSの例題(Lunn et al., 2012)は全般に、スケールについてのデフォルトの事前分布を下のようにしていますが、これは使わないようにしましょう。\n+\n+![$$ \\sigma^2 \\sim \\mathsf{InvGamma}(0.001, 0.001) $$](fig/fig04.png)\n+\n+このような事前分布は、妥当な事後分布の値の外側に、あまりに大きく集中した確率の山があります。正規分布につける対称的で広い事前分布とは異なり、これにより事後分布をゆがめる深刻な影響が発生する可能性があります。例題と議論はGelman (2006)を参照してください。\n+\n+<sup>2</sup>この習慣はBUGSでは普通で、例題(Lunn et al., 2012)のほとんどに見受けられます。\n+\n+#### 切断事前分布\n+\n+下限が0として宣言された変数に、正規分布の事前分布を設定すると、Stanのモデルでは、正則に切断された半正規分布の事前分布を設定するのと同じ効果を持ちます。0での切断分布を指定する必要はありません（**訳：「切断分布」でよい？**）。Stanで必要なのは、密度から割合までだけだからです。そこで、以下のように変数を宣言します。\n+\n+```\n+real<lower=0> sigma;\n+```\n+\n+そして、事前分布を与えます。\n+\n+```\n+sigma ~ normal(0,1000);\n+```\n+\n+すると、`sigma`には半正規分布の事前分布が与えられます。技術的には以下のようになります。\n+\n+![$$ p(\\sigma) = \\frac{\\mathsf{Normal}(\\sigma \\mid 0,1000)}{1 - \\mathsf{NormalCDF}(0 \\mid 0, 1000)} \\propto \\mathsf{Normal}(\\sigma \\mid 0, 1000) $$](fig/fig05.png)\n+\n+しかしStanでは、半正規分布を正規化するのに必要な、正規分布の累積分布関数(CDF: cumulative distribution function)の計算を避けることができます。もし、事前分布の位置あるいはスケールがパラメータであるか、あるいは切断点がパラメータであるならば、切断の計算をせずに済ますことはできません。（**訳：「切断の計算」でよい？**）その場合は、正規分布のCDF項が定数にならないからです。\n+\n+#### 弱情報事前分布\n+\n+普通は、推定される変数のスケールについて研究者は何らかの知識を持っているでしょう。例えば、成人女性の身長の母平均について切片だけのモデルを推定するなら、答えは1から3メートルの間のどこかにあるでしょう。こうした情報から弱情報事前分布を構成できます。\n+\n+同様に、予測変数が標準スケール（おおよそ平均が0で、単位分散）のロジスティック回帰なら、係数の絶対値が5より大きくなることはあまりないでしょう。この場合、$\\mathsf{Normal}(0,5)$のような弱情報事前分布をそのような係数に設定するのは道理にかなっています。\n+\n+計算機的にも統計学的にも、推定を制御するのに弱情報事前分布は役に立ちます。計算機的には、解があると期待される量のまわりの曲率を増加させます。これにより、L-BFGSのような勾配に基づく方法でもハミルトニアンモンテカルロのサンプリングでも、曲面（**訳:'surface'は「曲面」でよい？**）の位置から遠く離れすぎたところに迷い込まないようになります。統計学的には、女性の平均身長のような問題で弱情報事前分布はより有効です。というのも、$\\mathsf{Normal}(0,1000)$のような非常に幅の広い事前分布では、事前分布の確率質量の大半が、期待される答えの範囲外にあるようにされるからです。小さなデータセットでは、そうした事前分布が推測値を覆い隠すことがありえます。\n+\n+#### 上下限のある事前分布\n+\n+女性の身長の例についてもう一度考えてみましょう。正則事前分布を定式化する方法の1つは、上下限のあるスケールに一様事前分布を設定することです。例えば、女性の平均身長のパラメータは、下限が1メートルで上限が3メートルと宣言することができるでしょう。確かに答えはこの間にあるはずです。\n+\n+同様に、スケールパラメータの事前分布の下限に0を、上限に、10,000のような非常に大きな数を設定する例を見ることも珍しくありません。<sup>3</sup>これは、幅の広い逆ガンマ分布を分散の事前分布に与えて推定するのと、おおまかに言って同じ問題をもたらします。物理的に完全に制約があるというわけではないパラメーターは固定せずに、情報事前分布を設定する方がよいでしょう。女性の身長の場合なら、そのような事前分布は、メートルのスケールで$\\mathsf{Normal}(2,0.5)$のようになると思われます。この場合、(1,3)の区間に確率質量の95%が集中しますが、依然としてその範囲外の値も取りえます。\n+\n+上下限のある事前分布を使う場合は、パラメータの推定値が上下限に、あるいはそれに非常に近い値になっていないか、当てはめた事後分布を確認すべきです。そうなっていることは、計算上の問題が発生しているだけではなく、モデルの定式化に問題があることを示しています。そのような場合、設定した制約がないときにパラメータが当てはまると思われるところまで範囲を広げるか、あるいは上下限を避ける事前分布を使うべきです（6.9節を参照）。\n+\n+<sup>3</sup> これもBUGSの例題モデル(Lunn et al., 2012)でよくある戦略でした。もう1歩進めて、数値的に0へとアンダーフローするのを防ぐために下限に0.001のような小さい数を設定することもよくありました。\n+\n+#### 裾の重い事前分布と「デフォルト」の事前分布\n+\n+外れ値に対応したいときの合理的な選択肢は、取りうる値と期待される範囲のあたりに確率質量の大半が集中するものの、裾にもかなりの確率質量がまだ残るような事前分布を使うことです。このような状況では通常、コーシー分布を事前分布に使うことが選択されます。そうすれば、中央値のまわりに確率質量を集中させることができますが、分散が無限大になるくらいに裾が重くなります。\n+\n+とくに情報がないのであれば、回帰係数のパラメータにはコーシー分布の事前分布がデフォルトとして非常に良い選択ですし(Gelman et al., 2008)、スケールパラメータには半コーシー分布（Stanでは暗黙的にコードされます）がデフォルトとして良い選択です(Gelman, 2006)。\n+\n+#### 情報事前分布\n+\n+理想的な場合には、問題についての実質的な情報があって、弱情報事前分布よりもいっそう強い事前分布を含めることができるでしょう。これは、事前に実際に実験をして、別のデータの事後分布として得られるかもしれませんし、メタ解析から得られるかもしれませんし、単に分野の専門家から求められたというものかもしれません。より強度になったというだけで、弱情報事前分布の長所はすべて当てはまります。\n+\n+#### 共役性\n+\n+ギブズサンプリングとは異なり、共役事前分布（すなわち、事後分布が同族となるような事前分布）を設定する計算上の利点はStanのプログラムにはありません。<sup>4</sup>ハミルトニアンモンテカルロは、対数密度とその導関数だけで動いており、サンプリングも最適化も共役性を使っていません。\n+\n+<sup>4</sup> BUGSとJAGSはともに、ギブズサンプリングによる共役サンプリングをサポートしています。JAGSは共役の範囲を拡張しており、GLMモジュールで利用できます。Stanとは異なり、BUGSとJAGSはともに、共分散行列や単体のような多変量の量については共役事前分布を使うように制限されています。\n+\n+### 6.3. ロバストノイズモデル\n+\n+線形解析の標準的な手法では、ノイズ項$\\epsilon$が正規分布するとモデリングします。Stanの視点から言うと、正規分布のノイズは特別なものではありません。例えば、ノイズ項にスチューデントのt分布を与えるとロバスト回帰に対応できます。Stanでコーディングするには、サンプリングの分布を以下のように変えます。\n+\n+```\n+data {\n+  ...\n+  real<lower=0> nu;\n+}\n+...\n+model {\n+  for (n in 1:N)\n+    y[n] ~ student_t(nu, alpha + beta * x[n], sigma);\n+}\n+```\n+\n+自由度の定数`nu`はデータとして指定します。\n+\n+### 6.4. ロジスティック回帰とプロビット回帰\n+\n+結果が2値のときは、ロジスティック回帰とプロビット回帰という近い関係にあるモデルのいずれかが使われるでしょう。一般化線形モデルとしては両者は、($-infty$,$infty$)という線形軸の予測値を、(0,1)という確率の値へと対応させるリンク関数だけが異なります。リンク関数はそれぞれ、ロジスティック関数と標準正規累積分布関数で、ともにシグモイド関数（すなわり、両者ともS字型）です。\n+\n+予測変数1つと切片とからなるロジスティック回帰モデルは以下のようにコーディングされます。\n+\n+```\n+data {\n+  int<lower=0> N;\n+  vector[N] x;\n+  int<lower=0,upper=1> y[N];\n+}\n+parameters {\n+  real alpha;\n+  real beta;\n+}\n+model {\n+  y ~ bernoulli_logit(alpha + beta * x);\n+}\n+```\n+\n+ノイズパラメータは、直接指定されるのではなく、ベルヌーイ分布の定式化に組み込まれています。\n+\n+ロジスティック回帰は一般化線形モデルの1種で、結果が2値で、リンク関数が対数オッズ（ロジット）関数です。これは以下のように定義されます。\n+\n+![$$ \\mathrm{logit}(\\nu) = \\log\\left(\\frac{\\nu}{1 - \\nu}\\right) $$](fig/fig06.png)\n+\n+リンク関数の逆関数がモデル中にあります。\n+\n+![$$ \\mathrm{logit}^{-1}(u) = \\frac{1}{1 + \\exp(-u)} $$](fig/fig07.png)\n+\n+上のモデルの定式化では、ベルヌーイ分布をロジットでパラメータ化したバージョンを使っています。その定義は以下です。\n+\n+![$$ \\mathsf{BernoulliLogit}(y \\mid \\alpha) = \\mathsf{Bernoulli}(y \\mid \\mathrm{logit}^{-1}(\\alpha)) $$](fig/fig08.png)\n+\n+この定式化ではまたベクトル化もおこなわれています。`alpha`と`beta`とがスカラーで`x`がベクトルなので、`alpha + beta * x`はベクトルになるからです。このベクトル化された定式化は、下のもっと非効率なバージョンと等価です。\n+\n+```\n+for (n in 1:N)\n+  y[n] ~ bernoulli_logit(alpha + beta * x[n]);\n+```\n+\n+ロジットのベルヌーイ分布の部分を展開すると、モデルは等価なまま、より明示的になりますが、より非効率で、算術的により不安定になります。\n+\n+```\n+for (n in 1:N)\n+  y[n] ~ bernoulli(inv_logit(alpha + beta * x[n]));\n+```\n+\n+別のリンク関数も同様に使えるでしょう。例えば、プロビット回帰は、正規累積分布関数を使います。これは以下のように書かれます。\n+\n+![$$ \\Phi(x) = \\int_{-\\infty}^{\\infty}\\mathsf{Normal}(\\gamma \\mid 0, 1)dy $$](fig/fig09.png)\n+\n+標準正規累積分布関数$\\Phi$は、Stanでは`Phi`関数として実装されています。Stanでプロビット回帰モデルをコーディングするには、ロジスティックモデルのサンプリング文を以下のように変えればよいでしょう。\n+\n+```\n+y[n] ~ bernoulli(Phi(alpha + beta * x[n]));\n+```\n+\n+Stanでは、標準正規累積分布関数$\\Phi$の高速な近似が`Phi_approx`関数として実装されています。近似プロビット回帰モデルは以下のようにコーディングされるでしょう。\n+\n+```\n+y[n] ~ bernoulli(Phi_approx(alpha + beta * x[n]));\n+```\n+\n+### 6.5. 多項ロジット回帰\n+\n+ロジスティック回帰の形式で、結果が多値になるものもStanでそのままコーディングできます。例えば、それぞれの出力の変数$y_{n}$について、結果が$K$種類の値を取りうるとします。また、$y_{n}$について、予測変数の$D$次元ベクトル$x_{n}$があるとします。係数の事前分布を$\\mathsf{Normal}(0,5)$とした多項ロジットモデルは以下のようにコーディングされます。\n+\n+```\n+data { int K;\n+  int N;\n+  int D;\n+  int y[N];\n+  vector[D] x[N];\n+}\n+parameters {\n+  matrix[K,D] beta;\n+}\n+model {\n+  for (k in 1:K)\n+    beta[k] ~ normal(0,5);\n+  for (n in 1:N)\n+    y[n] ~ categorical(softmax(beta * x[n]));\n+}\n+```\n+\n+`softmax`関数の定義は34.11節を参照してください。最後の行をもっと効率的にすると以下のように書けます。\n+\n+```\n+y[n] ~ categorical_logit(beta * x[n]);\n+```\n+\n+`categorical_logit`分布は、カテゴリカル分布に似ていますが、パラメータがロジットスケールになります（`categorical_logit`の完全な定義は39.5節を参照してください）。\n+\n+最初のループをもっと効率的にするには、行列`beta`をベクトルに変換して最初のループをベクトル化するとよいでしょう。\n+\n+```\n+to_vector(beta) ~ normal(0,5);\n+```\n+\n+##### データ宣言時の制約\n+\n+上のモデルの`data`ブロックは、サイズ`K`, `N`, `D`や結果の配列`y`に制約をつけず定義しています。データ宣言での制約は、データが読み込まれた時点での（あるいは変換データが定義された時点での）エラーチェックのためのもので、サンプリングが始まる前に行なわれます。データ宣言での制約はまた、モデルの作者の意図をより明示的に示すもので、可読性が高くなります。上のモデルの宣言をもっと厳しくするとすると以下のようになります。\n+\n+```\n+int<lower=2> K;\n+  int<lower=0> N;\n+  int<lower=1> D;\n+  int<lower=1,upper=K> y[N];\n+```\n+\n+これら制約の根拠ですが、カテゴリーの数`K`は、カテゴリカル分布が使えるためには少なくとも2でなくてはなりません。データ項目の数`N`は0となりえますが、負ではいけません。Rとは違ってStanの`for`ループは常に前進するので、`1:N`というループの範囲は、`N`が0に等しいときにはループの内部を実行しないことを保証します。予測変数の数`D`は、`beta * x[n]`が`softmax()`に適切な引数を生成するよう、少なくとも1でなくてはいけません。カテゴリカル分布の結果`y[n]`は、離散サンプリングがうまく定義されるように`1`から`K`までになくてはなりません。\n+\n+データ宣言の制約は任意です。一方、`parameters`ブロックで宣言されるパラメータの制約は任意**ではありません**。すべてのパラメータの値が制約を確実に満たすようにすることが求められます。`transformed data`, `transformed parameters`, `generated quantities`での制約も任意です。\n+\n+#### 識別可能性\n+\n+入力の各成分に定数を加えてもsoftmaxは不変ですので、このモデルは一般に、係数についての適切な事前分布があるときにだけ識別されます。\n+\n+別の選択肢は、$(K-1)$次元のベクトルを使って、そのうちのひとつを0に固定することです。8.2節で、ベクトル中に定数とパラメータとを混在させる方法を議論します。多項ロジットの場合は、`parameters`ブロックは、$(K-1)$次元ベクトルを使って以下のように再定義されるでしょう。\n+\n+```\n+parameters {\n+  matrix[K - 1, D] beta_raw;\n+}\n+```\n+\n+それから、モデルで使うパラメータに変換します。まず、`transformed data`ブロックを`parameters`ブロックの前に加えて、零値からなる列ベクトルを定義します。\n+\n+```\n+transformed data {\n+  vector[D] zeros;\n+  zeros <- rep_vector(0, D);\n+}\n+```\n+\n+つづいて、これを`beta_row`に付け加えて、係数行列`beta`をつくります。\n+\n+```\n+transformed parameters {\n+  matrix[K, D] beta;\n+  beta <- append_col(beta_raw, zeros);\n+}\n+```\n+\n+`rep_vector`の定義は34.7節を、`append_col`の定義は34.10節を参照してください。\n+\n+これは、パラメータとして$K$次元ベクトルを使ったモデルとまったく同じというわけではありません。事前分布が$(K-1)$ベクトルにのみ適用されるようになったからです。実用的には、これにより最尤法の解が違うものになり、事前分布を0のまわりに中央化すると事後分布もやや変わります。これは回帰係数でよく起こります。(**訳:ここは不安**)\n+\n+### 6.6. 中央化ベクトルへのパラメータ化\n+\n+パラメータのベクトル$\\beta$を、合計して0になる制約を満たすように中央化すると都合が良いことがよくあります。\n+\n+![$$ \\sum_{k=1}^{K}\\beta_{k} = 0 $$](fig/fig10.png)\n+\n+このようなパラメータのベクトルは、多項ロジット回帰のパラメータのベクトルを識別するのに使われたり（6.5節を参照）、IRTモデルの能力パラメータや困難度パラメータ（ただしどちらか一方）に使われることがあります（6.10節を参照）。\n+\n+#### K-1自由度\n+\n+合計して0になる制約をパラメータのベクトルに課す方法は1つだけではありません。もっとも効率的なのは、1から$K-1$番目までの合計の符号を反転させたものとして$K$番目の要素を定義する方法です。\n+\n+```\n+parameters {\n+  vector[K-1] beta_raw;\n+  ...\n+transformed parameters {\n+  vector[K] beta;  // centered\n+  for (k in 1:(K-1)) {\n+    beta[k] <- beta_raw[k];\n+  }\n+  beta[K] <- -sum(beta_raw);\n+  ...\n+```\n+\n+このパラメータ化で`beta_row`に事前分布を設定すると、合計して0の制約をつけずに元のパラメータ化で`beta`に同じ事前分布を設定したものと比較して、事後分布はわずかに異なることになります。とくに、`beta_raw`の各要素にに単純な事前分布を設定すると、制約のない$K$次元ベクトル`beta`の各要素に同じ事前分布を設定したのと異なる結果が得られます。たとえば、`beta`の事前分布に$\\mathsf{Normal}(0,5)$を設定すると、`beta_raw`に同じ事前分布を設定したものと事後分布は異なることになるでしょう。\n+\n+#### 単体への移動およびスケール変換\n+\n+もう1つの方法は効率の点では劣りますが、対称な事前分布に改良できます。オフセットをつけてスケールを合わせることにより単体とする方法です。\n+\n+```\n+parameters {\n+  simplex[K] beta_raw;\n+  real beta_scale;\n+  ...\n+transformed parameters {\n+  vector[K] beta;\n+  beta <- beta_scale * (beta_raw - 1.0 / K);\n+  ...\n+```\n+\n+`beta_raw`は単体なので、合計すると1になります。これにより、要素ごとに$1/K$を減じると合計が0になることが保証されます（整数演算により0に丸められるのを防ぐため、`1 / K`ではなく、`1.0 / K`という式を使うことに注意しましょう）。単体の要素の大きさには限度がありますから、`beta`が、合計して0となるようなあらゆる値を取るために必要な自由度$K$を持つようにするためにはスケーリング因子が必要になります。\n+\n+このパラメータ化では、ディリクレ分布の事前分布を`beta_raw`に設定することができます。おそらくは一様分布でしょう。そして、通常は「縮約」となるような別の事前分布を`beta_scale`に設定します。\n+\n+#### 弱い中央化\n+\n+$\\beta \\sim \\mathsf{Normal}(0,\\sigma)$のような事前分布を加えることは、パラメータのベクトル$\\beta$について、$\\sum_{k=1}^{K}\\beta_{k}=0$となることはないものの、それに近くなるような、1種の弱い中央化を設定することになるでしょう。スカラーの定数$c$についての要素ごとの和$\\beta+c$と$\\beta$とが同じ尤度を生成する場合のみ、この方法でおおまかに中央化されることが保証されます（IRTモデルではおそらく、別のベクトル$\\alpha$があって、$\\alpha-c$と変換されます）。これは、対称な事前分布を得るためのまた別の方法です。\n+\n+### 6.7. 順序ロジスティック回帰と順序プロビット回帰\n+\n+予測変数$x_{n} \\in \\mathbb{R}^{D}$に対する結果$y_{n} \\in {1,\\dots,K}$の順序回帰は、単一の係数ベクトル$\\beta \\in \\mathbb{R}^{D}$と、切断点の数列$c \\in \\mathbb{R}^{K-1}$により決まります。ただし$c$は、$c_{d} < c_{d+1}$のように並んでいます。線形予測子$x_{n}\\beta$が$c_{k-1}$と$c_{k}$の間に入るなら、離散値の結果は$k$となります。ここでは、$c_{0} = -\\infty$かつ$c_{K} = \\infty$と仮定されています。ノイズ項は回帰の形式によって決まります。ここでは、回帰ロジスティック回帰と回帰プロビット回帰の例を示します。\n+\n+#### 順序ロジスティック回帰\n+\n+順序ロジスティック回帰はStanでは、切断点に`ordered`データ型を使い、組込みの`ordered_logistic`分布によりコーディングできます。\n+\n+```\n+data {\n+  int<lower=2> K;\n+  int<lower=0> N;\n+  int<lower=1> D;\n+  int<lower=1,upper=K> y[N];\n+  row_vector[D] x[N];\n+}\n+parameters {\n+  vector[D] beta;\n+  ordered[K-1] c;\n+}\n+model {\n+  for (n in 1:N)\n+    y[n] ~ ordered_logistic(x[n] * beta, c);\n+}\n+```\n+\n+切断点`c`のベクトルは`ordered[K-1]`として宣言します。これにより、`c[k]`が`c[k+1]`よりも小さいことが保証されます。\n+\n+切断点に独立に事前分布を割り当てれば、この制約は、順序の制約を満たす点となるようにうまく同時事前分布を切断します。都合の良いことに、Stanでは確率は割合で分かればよいので、正規化項についての制約の効果を計算する必要がありません。\n+\n+##### 順序プロビット\n+\n+順序プロビットモデルは、累積ロジスティック分布(`inv_logit`)を累積正規分布(`Phi`)に変えるだけで、まったく同様にコーディングできるでしょう。\n+\n+```\n+data {\n+  int<lower=2> K;\n+  int<lower=0> N;\n+  int<lower=1> D;\n+  int<lower=1,upper=K> y[N];\n+  row_vector[D] x[N];\n+}\n+parameters {\n+  vector[D] beta;\n+  ordered[K-1] c;\n+}\n+model {\n+  vector[K] theta;\n+  for (n in 1:N) {\n+    real eta;\n+    eta <- x[n] * beta;\n+    theta[1] <- 1 - Phi(eta - c[1]);\n+    for (k in 2:(K-1))\n+      theta[k] <- Phi(eta - c[k-1]) - Phi(eta - c[k]);\n+    theta[K] <- Phi(eta - c[K-1]);\n+    y[n] ~ categorical(theta);\n+  }\n+}\n+```\n+\n+ロジスティックモデルも、`Phi`を`inv_logit`に入れ替えれば、この方法でコーディングできるでしょう。ただし、softmax変換に基づく組込みのエンコーディングの方がより効率的で、数値的により安定です。`Phi(eta - c[k])`の値を一度だけ計算させて、その後は保存しておいた値を再利用するようにすると、少しだけ効率が良くなるでしょう。\n+\n+### 6.8. 階層ロジスティック回帰\n+\n+もっとも単純なマルチレベルモデルは、$L$だけある離散カテゴリー（あるいはレベル）にデータがグループ化されるような階層モデルです。極端な方法は、全データを完全にプールして、回帰係数$\\beta$のベクトルを共通のものとして推定するというものでしょう。また反対側に極端な方法は、プールはせず、各レベル$l$に固有の係数ベクトル$\\beta_{l}$を割り当て、他のレベルとは別に推定するというものでしょう。階層モデルは中間の解法で、プールの程度は、データと、プールの量についての事前分布とで決まります。\n+\n+2値の結果$y_{n} \\in {0,1}$がすべて、レベル$ll_{n} \\in {1,\\dots,L}$と関連しているとします。各結果はまた、予測変数のベクトル$x_{n} \\in \\mathbb{R}^{D}$とも関連しているでしょう。各レベル$l$は、固有の係数ベクトル$\\beta_{l} \\in \\mathbb{R}^{D}$をとります。階層モデルでは、これもデータから推定される事前分布から係数$\\beta_{l,d} \\in \\mathbb{R}^{D}$が抽出されます。この、階層的に推定される事前分布がプールの量を決定します。各レベルのデータが非常に似ているなら、低い階層分散を反映して強いプールが行なわれるでしょう。レベル間でデータが違っていれば、高い階層分散を反映して弱いプールが行なわれるでしょう。\n+\n+以下のモデルは、回帰係数に階層事前分布を設定した階層ロジスティック回帰モデルをコーディングしたものです。\n+\n+```\n+data {\n+  int<lower=1> D;\n+  int<lower=0> N;\n+  int<lower=1> L;\n+  int<lower=0,upper=1> y[N];\n+  int<lower=1,upper=L> ll[N];\n+  row_vector[D] x[N];\n+}\n+parameters {\n+  real mu[D];\n+  real<lower=0> sigma[D];\n+  vector[D] beta[L];\n+} model {\n+  for (d in 1:D) {\n+    mu[d] ~ normal(0,100);\n+    for (l in 1:L)\n+      beta[l,d] ~ normal(mu[d],sigma[d]);\n+  }\n+  for (n in 1:N)\n+    y[n] ~ bernoulli(inv_logit(x[n] * beta[ll[n]]));\n+}\n+```\n+\n+標準偏差のパラメータ`sigma`は、下限値0の制約をつけて宣言されているので、暗黙の一様事前分布$(0, \\infty)$を取ります。Stanでは、事後分布が正則である限り、非正則の事前分布を許します。とはいっても通常は、すべてのパラメータに情報事前分布、あるいは少なくとも弱情報事前分布をつけるのが有用です。回帰係数とスケールの事前分布についてのおすすめは6.2節を参照してください。\n+\n+##### モデルの最適化\n+\n+可能なところでは、サンプリング文をベクトル化すると、対数確率と導関数の評価が速くなります。高速化するのは、ループがなくなったからではなく、対数確率と勾配計算の下位計算がベクトル化により共有されること、勾配計算に必要な式木のサイズが減少することによります。\n+\n+まず最初の最適化として、`D`についての`for`ループをベクトル化します。\n+\n+```\n+mu ~ normal(0,100);\n+  for (l in 1:L)\n+    beta[l] ~ normal(mu,sigma);\n+```\n+\n+`beta`はベクトルの配列として宣言されていますので、式`beta[l]`はベクトルを示すことになります。`beta`を行列として宣言することもできたでしょうが、ベクトルの配列（あるいは2次元配列）の方が行へのアクセスはより効率的です。配列、ベクトル、行列の間での効率性のトレードオフについては第4章にさらに情報があります。\n+\n+このモデルは、ベルヌーイ分布内で逆ロジットを使用しているのを、ロジットでパラメータ化したベルヌーイ分布に置き換えることで、さらに高速化し、算術的にもより安定させることができます。\n+\n+```\n+for (n in 1:N)\n+  y[n] ~ bernoulli_logit(x[n] * beta[ll[n]]);\n+```\n+\n+`bernoulli_logit`の定義は38.2節を参照してください。\n+\n+RやBUGSとは異なり、ループや、配列へのアクセスおよび代入は、Stanでは直接C++に変換されるので高速です。ほとんどの場合、コンテナに配置したり代入したりするコストは、対数確率と勾配の計算をベクトル化することによる効率の増加でおつりが来ます。ですので、サンプリング文をループさせていた元の定式化よりも下のバージョンの方が高速です。\n+\n+```\n+{\n+  vector[N] x_beta_ll;\n+  for (n in 1:N)\n+    x_beta_ll[n] <- x[n] * beta[ll[n]];\n+  y ~ bernoulli_logit(x_beta_ll);\n+}\n+```\n+\n+局所変数`x_beta_ll`のため、中括弧で、新しいスコープを導入しています。あるいは代わりに、`model`ブロックの最初で変数を宣言しても構いません。\n+\n+上のように局所変数への代入を使うと、モデルが読みにくくなる場合があります。そのような場合には、まず読みやすいバージョンでモデルを開発、デバッグし、単純な定式化でデバッグし終わってはじめて最適化の作業にかかるというようにするのがおすすめです。\n+\n+### 6.9. 階層事前分布\n+\n+事前分布の事前分布は「超事前分布」とも呼ばれます。超事前分布も、下位レベルのパラメータの事前分布と同様に扱われるはずです。すなわち、利用可能なだけの事前分布の情報がすべて使われるはずです。超事前分布は、ほんの少数の下位レベルのパラメータにしか適用されないことが多いので、事後分布が正則であることと、事前分布の裾を広くすることに対して統計的にも計算的にも過度に敏感ではないことの両方が確かかどうか注意を払う必要があります。\n+\n+#### 階層モデルのMLEで、限度がなくなる事前分布\n+\n+階層モデルの設定における最尤推定(MLE)の基本的な問題は、階層分散が小さくなって、階層平均のまわりに値が集まり、全体の密度が限度なく大きくなることです。例として、$x_{n} \\in \\mathbb{R}^{K}$についての$y_{n} \\in \\mathbb{R}$の単純な階層線形回帰（事前平均を固定）を考えます。定式化は以下のとおりです。\n+\n+![$$ \\begin{array}{rl}y_{n} &\\sim \\mathsf{Normal}(x_{n}\\beta, \\sigma)\\\\ \\beta_{k} &\\sim \\mathsf{Normal}(0, \\tau)\\\\ \\tau &\\sim \\mathsf{Cauchy}(0, 2.5) \\end{array} $$](fig/fig11.png)\n+\n+この場合で、$\\tau \\rightarrow 0$かつ$\\beta_{k} \\rightarrow 0$となるとき、事後密度\n+\n+![$$ p(\\beta, \\tau, \\sigma \\mid y, x) \\propto p(y \\mid x, \\beta, \\tau, \\sigma) $$](fig/fig12.png)\n+\n+は限度なく大きくなります。図21.1にNealのじょうご密度の図がありますが、これと同様の挙動を示します。\n+\n+この場合明らかに、$\\beta$、$\\tau$、$\\sigma$に最尤推定値はありません。したがって、事後の最頻値を推測に使うなら、モデルを変えなければなりません。Chung et al. (2013)が勧めているのは、以下のように事前分布にガンマ分布を使用する方法です。\n+\n+![$$ \\sigma \\sim \\mathsf{Gamma}(2, 1/A) $$](fig/fig13.png)\n+\n+$A$には、$A=10$のようにかなり大きな値を与えます。\n+\n+### 6.10. 項目反応理論モデル\n+\n+項目反応理論(Item-response theory: IRT)は、何人かの生徒がそれぞれ、1つ以上のテスト問題群に答えるという状況をモデリングします。このモデルは、生徒の能力と、問題の困難度というパラメータに基づいています。より明瞭なモデルでは、問題の識別性と、当て推量で正解になる確率についてのパラメータもあります。階層IRTモデルの入門用教科書についてはGelman and Hill (2007)を参照してください。また、さまざまなIRTモデルのBUGSによるコーディングについてはCurtis (2010)を参照してください。\n+\n+#### 欠測のあるデータ宣言\n+\n+IRTモデルに渡されるデータは、全生徒が全問題に解答するとは限らないことを考慮すると、以下のように宣言されるでしょう。\n+\n+```\n+data {\n+  int<lower=1> J;              // 生徒の数\n+  int<lower=1> K;              // 問題の数\n+  int<lower=1> N;              // 観測の数\n+  int<lower=1,upper=J> jj[N];  // 観測nの生徒\n+  int<lower=1,upper=K> kk[N];  // 観測nの問題\n+  int<lower=0,upper=1> y[N];   // 観測nの正誤\n+}\n+```\n+\n+この宣言では、生徒-問題の組み合わせが全部で`N`あり、`1:N`の各`n`が、2値の観測値`y[n]`のインデックスで、`y[n]`は、生徒`jj[n]`が問題`kk[n]`に正答したかどうかを示します。\n+\n+超パラメータの事前分布は、この節の後では簡単のためハードコーディングします。とはいえ、Stanではもっと柔軟にデータとしてコーディングできます。\n+\n+#### 1PL (Rasch) モデル\n+\n+1PL項目反応モデルは、Raschモデルともいわれ、問題についての1つのパラメータ(1P)を持ち、ロジスティックリンク関数(L)を使います。\n+\n+モデルのパラメータは以下のように宣言されます。\n+\n+```\n+parameters {\n+  real delta;          // 平均の生徒の能力\n+  real alpha[J];       // 生徒jの能力 - 平均能力\n+  real beta[K];        // 問題kの困難度\n+}\n+```\n+\n+パラメータ`alpha[j]`は生徒`j`の能力の係数、`beta[k]`は問題`k`の困難度の係数です。ここで使われている非標準のパラメータ化では、切片項`delta`も含みます。これは、平均的な生徒の平均的な問題への反応をあらわします。<sup>5</sup>モデル自体は以下のようになります。\n+\n+```\n+model {\n+  alpha ~ normal(0,1);      // 真値の情報事前分布\n+  beta ~ normal(0,1);       // 真値の情報事前分布\n+  delta ~ normal(.75,1);    // 真値の情報事前分布\n+  for (n in 1:N)\n+    y[n] ~ bernoulli_logit(alpha[jj[n]] - beta[kk[n]] + delta);\n+}\n+```\n+\n+このモデルはロジットでパラメータ化したベルヌーイ分布を使っています。\n+\n+![$$ \\mathsf{bernoulli\\_logit}(y \\mid \\alpha) = \\mathsf{bernoulli}(y \\mid \\mathsf{logit}^{-1}(\\alpha)) $$](fig/fig14.png)\n+\n+このモデルを理解する鍵は、`bernoulli_logit`分布の中の項です。以下の式に従います。\n+\n+![$$ \\Pr[y_{n} = 1] = \\mathrm{logit}^{-1}(\\alpha_{jj[n]} - \\beta_{kk[n]} + \\delta) $$](fig/fig15.png)\n+\n+このモデルでは、事前分布を設定しないと加法的な識別可能性の問題が発生します。例えば、$\\alpha_{j}$と$\\beta_{k}$の両方に$\\xi$を加えると、予測値が同じになります。$\\alpha$と$\\beta$に位置0（** ``located at 0''の訳はこれでよい? **）の事前分布を設定すると、パラメータが識別できます。識別可能性の問題と、識別可能にする他の手法についてはGelman and Hill (2007)を参照してください。\n+\n+テスト用に、Stanとともに配布されているIRT 1PLモデルは、Rでデータをシミュレートするために使われる実際のデータ生成過程に合うような情報事前分布を使っています（このシミュレーションのコードはモデルと同じディレクトリに入っています）。実際に利用するにはほとんどの場合は現実的ではありませんが、Stanの推定が有効であることは分かります。事前分布の幅を広くして簡単な感度分析を行なうと、400人の生徒に100問の問題で、25%だけランダムに欠測するとしても、事後分布は事前分布にかなり敏感です。実際に使用するときには、他のパラメータと同様に事前分布も階層的にすべきです（**?the priors should be fit hierarchically alog with the other parameters?**）。これは次の節で記述します。\n+\n+<sup>5</sup> Gelman and Hill (2007)は$\\delta$項を、生徒の能力の分布における位置のパラメータと等価に扱っています。\n+\n+#### マルチレベル2PLモデル\n+\n+前の節で記述した単純な1PLモデルをこの節では、問題にどのくらいのノイズがあるかをモデルする識別パラメータを加え、問題の困難度と識別パラメータにマルチレベルの事前分布を加えることで一般化します。モデルのパラメータは以下のように宣言されます。\n+\n+```\n+parameters {\n+  real mu_beta;                // 平均の生徒の能力\n+  real alpha[J];               // jの能力 - 平均\n+  real beta[K];                // kの困難度\n+  real<lower=0> gamma[K];      // kの識別性\n+  real<lower=0> sigma_beta;    // 困難度のスケール\n+  real<lower=0> sigma_gamma;   // 識別性のスケール\n+}\n+```\n+\n+モデルの定義を見た後の方がパラメータはよくわかるでしょう。\n+\n+```\n+model {\n+  alpha ~ normal(0,1);\n+  beta ~ normal(0,sigma_beta);\n+  gamma ~ lognormal(0,sigma_gamma);\n+  mu_beta ~ cauchy(0,5);\n+  sigma_alpha ~ cauchy(0,5);\n+  sigma_beta ~ cauchy(0,5);\n+  sigma_gamma ~ cauchy(0,5);\n+  for (n in 1:N)\n+    y[n] ~ bernoulli_logit(gamma[kk[n]]\n+                           * (alpha[jj[n]] - (beta[kk[n]] + mu_beta)));\n+}\n+```\n+\n+1PLモデルに似ていますが、追加のパラメータ`gamma[k]`で、問題`k`の識別能力をモデリングしています。`gamma[k]`が1より大きければ、ランダムに正答になる可能性は低くなるので反応は減衰します。（**attenuated の訳?**）パラメータ`gamma[k]`は正値に制約されています。これは、能力が低い生徒の方により簡単な問題はないとするものです。そのような問題を耳にしないわけではありませんが、IRTモデルが利用されるような試験ではほとんどの場合、そのような問題は除かれる傾向にあります。\n+\n+生徒の能力`alpha`に標準正規分布の事前分布を与えるようなモデルに、ここではパラメータ化しています。これは、このパラメータの位置とスケールの両方を識別可能にするためです。そうしなければ、その両方が識別不可能になるでしょう。識別可能性については20章でさらに議論します。困難度と識別性のパラメータ`beta`と`gamma`には弱情報事前分布を与えています。\n+\n+```\n+beta ~ normal(0,5);\n+gamma ~ lognormal(0,2);\n+```\n+\n+ポイントは、`alpha`がスケールと位置を決定し、`beta`と`gamma`は変動できるようにしていることです。\n+\n+パラメータ`beta`には、ここでは中央化しないパラメータ化を行なっています。パラメータ`mu_beta`が`beta`の平均の位置を与えています。あるいはまた、以下のようにもできるでしょう。\n+\n+```\n+beta ~ normal(mu_beta, sigma_beta);\n+```\n+\n+および\n+\n+```\n+y[n] ~ bernoulli_logit(gamma[kk[n]] * (alpha[jj[n]] - beta[kk[n]]));\n+```\n+\n+中央化しないパラメータ化は階層モデルではより効率的になる傾向にあります。中央化しない再パラメータ化についてもっと知るには21.2節を参照してください。\n+\n+切片の項`mu_beta`はそれ自身は階層的にモデリングできません。そのため、弱情報事前分布$\\mathsf{Cauchy}(0,5)$を与えています。同様に、スケールの項`sigma_alpha`および`sigma_beta`、`sigma_gamma`には半コーシー分布の事前分布を与えています。半コーシー分布の切断は暗黙のものです。明示的な切断は必要ありません。これは、対数確率は割合だけ計算すればよく、スケールの変数は宣言により(0,$\\infty$)に制約されているからです。\n+\n+### 6.11. 識別可能性のための事前分布\n+\n+#### 位置とスケールの固定\n+\n+（階層）事前分布の応用の1つに、パラメータ群のスケールあるいは位置、またはその両方を識別させるということがあります。例えば、前の節で議論したIRTモデルでは、位置とスケールの両方に識別不能性がありました。一様事前分布をつけると、スケールと位置の両方の項でパラメータは変動するでしょう。これが推定にもたらす問題については、20.1節に簡単な例がありますので、参照してください。\n+\n+生徒の能力のような1群の係数に標準正規分布（すなわち$\\mathsf{Normal}(0,1)$）の事前分布をを与えると、識別不能性は解決されます。生徒の能力に標準正規分布の事前分布を与えると、IRTモデルは識別され、生徒の能力のパラメータについての1群の推定値が事後分布により生成されます。その標本平均は0に近く、標本分散は1に近い値となるでしょう。問題の困難度と識別性のパラメータには、広がった、理想的には階層的な事前分布を与えるべきです。そうすると、生徒の能力のパラメータとの相対的な位置とスケールにより、これらパラメータは識別されるでしょう。\n+\n+#### 共線性\n+\n+事前分布により識別可能になる別の例として、線形回帰における共線性の場合があります。線形回帰では、2つの予測変数が共線的（すなわち一方が他方の線形関数となっている）ならば、事後分布ではそれらの係数の相関係数は1（または-1)でしょう。これは識別不能になります。係数の事前分布を正規分布とすることで、2つの2重になった予測変数（自明に共線的）の最尤推定解（**maximum likelihood solution?**）は、1つだけを含むときに得られる値の半分になるでしょう。（**ここはよくわかりません。**）\n+\n+#### 分離可能性\n+\n+ロジスティック回帰では、結果が1で予測変数が正のときや、結果が0で予測変数が負のときには、こうした予測変数の係数の最尤推定値は無限に発散します。係数に事前分布を与えることでこうした発散を制御することができます。これにより、推定値を0に向けて「縮約」することで、事後分布についてモデルは識別可能になるでしょう。\n+\n+同様の問題は非正則平坦事前分布からのサンプリングでも発生します。このときのサンプラーは非常に大きな値を抽出しようとするでしょう。事前分布を与えることで、事後分布は有限の値のまわりに集中し、サンプリングはうまくいくでしょう。\n+\n+### 6.12. 階層モデルにおける多変量の事前分布\n+\n+階層回帰モデルでは（他の状況でもありますが）、いくつかの個別レベルの変数に階層事前分布を割り当てることがあります。例えば、複数の変動する切片や傾きを含むモデルでは、多変量の事前分布を割り当てることでしょう。\n+\n+例として、人を個別(**individual:個体の方がよい?**)レベルとして、収入を結果に、教育水準と年齢を予測変数とし、州などの地理区分を群としましょう。切片のほか、教育水準と年齢の効果も州ごとに変わりうるとします。さらに、州ごとの収入や失業水準の平均といった、州レベルの予測変数もあるとしましょう。\n+\n+#### 多変量回帰の例\n+\n+Gelman and Hill (2007)の13章・17章では、$N$個体が$J$群にまとめられる階層モデルについて議論しています。各個体は、大きさ$K$の列ベクトル$x_{n}$からなる予測変数を持ちます。記法の統一のため、$x_{n,1} = 1$として、固定された「切片」予測変数としています。群への所属をコード化するため、個体$n$は群$jj[n] \\in 1:J$に属するとしています。各個体$n$はまた、実数値の観測結果$y_{n}$を持ちます。\n+\n+##### 尤度\n+\n+このモデルは、群によって切片と係数が変動する線形回帰となりますので、$\\beta_{j}$は、群$j$についての$K$次元ベクトルの係数です。個体$n$についての尤度関数は以下のとおりです。\n+\n+![$$ y_{n} \\sim \\mathsf{Normal}(x_{n}\\beta_{jj[n]}, \\sigma) \\quad\\text{ただし}\\quad n \\in 1:N $$](fig/fig16.png)\n+\n+##### 係数の事前分布\n+\n+GelmanとHillは、係数ベクトル$\\beta_{j}$を、平均ベクトル$\\mu$と共分散行列$\\Sigma$を持つ多変量分布から抽出されるとモデリングしています。\n+\n+![$$ \\beta_{j} \\sim \\mathsf{MultiNormal}(\\mu, \\Sigma) \\quad\\text{ただし}\\quad j \\in 1:J $$](fig/fig17.png)\n+\n+以下、GelmanとHillのフルモデルについて議論しますが、このモデルでは$\\mu$をモデリングするのに群レベルの予測変数を使っています。ここでは、$\\mu$は単純なベクトルのパラメータと仮定します。\n+\n+##### 超パラメータ\n+\n+階層モデリングでは、群レベルの平均ベクトル$\\mu$と共分散行列$\\Sigma$自身に事前分布を与えなくてはなりません。群レベルの平均ベクトルには、独立した係数に合理的な弱情報事前分布を与えることができます。\n+\n+![$$ \\mu_{j} \\sim \\mathsf{Normal}(0, 5) $$](fig/fig18.png)\n+\n+もちろん、係数$\\beta_{j,k}$の期待値について知識があれば、その情報を$\\mu_{k}$の事前分布に取り入れることができます。\n+\n+共分散行列の事前分布についてGelmanとHillは、スケールを掛けた（**?scaled?**）逆Wishart分布を使うことを勧めています。それを選ぶ理由は主として、多変量の尤度関数に対して共役であり、Gibbsサンプリングが単純になるという利便性にあります。\n+\n+Stanでは、多変量の事前分布に共役の制限はありませんし、実際のところやや違った手法をお勧めしています。GelmanとHillと同様、事前分布をスケールと行列に分解しますが、実際の変数のスケールと相関行列に基づいた、もっと自然な方法でできます。具体的には以下のように定義します。\n+\n+![$$ \\Sigma = \\mathrm{diag_matrix}(\\tau)\\Omega\\mathrm{diag_matrix}(\\tau) $$](fig/fig19.png)\n+\n+ここで$\\Omega$は相関行列で、$\\tau$は係数のスケールのベクトルです。\n+\n+スケールのベクトル$\\tau$の要素には、スケールの事前分布として合理的ならどのようなものでも与えることができますが、下の、小さいスケールの半コーシー分布のような弱情報のものをお勧めします。\n+\n+![$$ \\tau_{k} \\sim \\mathsf{Cauchy}(0, 2.5) \\quad\\text{ただし}\\quad k \\in 1:J \\quad\\text{かつ}\\quad \\tau_{k} > 0 $$](fig/fig20.png)\n+\n+事前平均については、群間の係数の変動のスケールについて情報があるなら、$\\tau$の事前分布に取り入れるべきでしょう。交換可能な係数が多数あるときは、$\\tau$自体の要素自体に（おそらく切片は除いて）階層事前分布が与えらえるでしょう。\n+\n+最後に、相関行列$\\Omega$には、形状パラメータ$\\nu > 1$のLKJ事前分布を与えることをお勧めします。\n+\n+![$$ \\Omega \\sim \\mathsf{LKJcorr}(\\nu) $$](fig/fig21.png)\n+\n+LKJ相関分布は51.1節で定義していますが、モデリングの基本的なアイデアは、$\\nu$が大きくなるにつれ、事前分布が単位相関行列のまわりに集中するようになる（すなわち$\\beta_{j}$の要素間の相関を低くする）ということです。$\\nu=1$のとき、LKJ相関分布は、相関行列に対して同一の分布にまで小さくなります。したがって、LKJ事前分布は、パラメータ$\\beta_{j}$間の相関について期待する量を制御するのに用いることがあります。\n+\n+##### 事前平均についての群レベルの予測変数\n+\n+GelmanとHillのモデルを完成させるため、各群$j \\in 1:J$には、群レベルの予測変数$u_{j}$の$L$次元の行ベクトルを与えるとします。すると$\\beta_{j}$の事前平均は、$L$次元の係数ベクトル$gamma$を使って、それ自体を回帰としてモデリングできます。群レベルの係数の事前分布は以下のようになります。\n+\n+![$$ \\beta_{j} \\sim \\mathsf{MultiNormal}(u_{j}\\gamma, \\Sigma) $$](fig/fig22.png)\n+\n+群レベルの係数$gamma$には、それ自体に弱情報事前分布を独立に与えてもよいでしょう。\n+\n+![$$ \\gamma_{l} \\sim \\mathsf{Normal}(0, 5) $$](fig/fig23.png)\n+\n+いつもと同様に、群レベルの平均についての情報は事前分布に取り入れるべきでしょう。\n+\n+##### Stanでのモデルのコーディング\n+\n+群レベルの係数についての多変量の事前分布と、群レベルの事前平均を与えた完全な階層モデルのStanのコードは以下のように定義されます。\n+\n+```\n+data {\n+  int<lower=0> N;              // 個体の数\n+  int<lower=1> K;              // 個体の予測変数の数\n+  int<lower=1> J;              // 群の数\n+  int<lower=1> L;              // 群の予測変数の数\n+  int<lower=1,upper=J> jj[N];  // 個体が属している群\n+  matrix[N,K] x;               // 個体の予測変数\n+  row_vector[L] u[J];          // 群の予測変数\n+  vector[N] y;                 // 結果\n+}\n+parameters {\n+  corr_matrix[K] Omega;        // 事前分布の相関\n+  vector<lower=0>[K] tau;      // 事前分布のスケール\n+  matrix[L,K] gamma;           // 群の係数\n+  vector[K] beta[J];           // 群ごとの個体の係数\n+  real<lower=0> sigma;         // 予測誤差のスケール\n+}\n+model {\n+  tau ~ cauchy(0,2.5);\n+  Omega ~ lkj_corr(2);\n+  to_vector(gamma) ~ normal(0, 5);\n+  {\n+    row_vector[K] u_gamma[J];\n+    for (j in 1:J)\n+      u_gamma[j] <- u[j] * gamma;\n+    beta ~ multi_normal(u_gamma, quad_form_diag(Omega, tau));\n+  }\n+  {\n+    vector[N] x_beta_jj;\n+    for (n in 1:N)\n+      x_beta_jj[n] <- x[n] * beta[jj[n]];\n+    y ~ normal(x_beta_jj, sigma);\n+  }\n+}\n+```\n+\n+超事前分布の共分散行列は、2次形式でコード中で暗黙に定義されています。これは、相関行列`Omega`とスケールのベクトル`tau`が出力を調べるのにより自然だからです。`Sigma`を出力するためには、変換パラメータとして定義します。関数`quad_form_diag`は、`quad_form_diag(Sigma,tau)`が`diag_matrix(tau) * Sigma * diag_matrix(tau)`と等価になるように定義されています。ここで、`diag_matrix_(tau)`は、対角成分が`tau`となり、それ以外が0の行列を返します。ただし、`quad_form_diag`を使うバージョンの方が高速のはずです。特別な行列演算についてさらに知るには34.2節を参照してください。\n+\n+##### ベクトル化による最適化\n+\n+上のStanプログラムのコードでは、予測変数`x[n]`と群レベルの係数`beta[jj[n]]``を使って、`x_beta_jj[n]`という平均を記述する（**?entry?**）ベクトルを組み立てていました。`x_beta_jj`が局所変数として宣言できるように、その周りに中括弧でブロックを定義しました。このベクトル化したコードは、より単純な、ベクトル化していない次のコードと等価です。\n+\n+```\n+for (n in 1:N)\n+  y[n] ~ normal(x[n] * beta[jj[n]], sigma);\n+```\n+\n+上にあるStanプログラムのコードではまた、結果と多変量正規分布に関係するところでベクトルの配列を組み立てています（**結果yはベクトルだが?**）。解いて微分する必要のある線形系の数を減らすことで、非常に顕著な高速化が可能になります。\n+\n+```\n+{\n+  matrix[K,K] Sigma_beta;\n+  Sigma_beta <- quad_form_diag(Omega, tau);\n+  for (j in 1:J)\n+    beta[j] ~ multi_normal((u[j] * gamma)', Sigma_beta);\n+}\n+```\n+\n+この例では、共分散行列`Sigma_beta`は、二次形式の計算を$J$回繰り返さなくても良いように局所変数として定義されています。このベクトル化は、次の節のコレスキー因子による最適化と組み合わせることもできます。\n+\n+##### コレスキー分解による最適化\n+\n+多変量正規密度と、相関行列に対するLKJ事前分布はともに、行列パラメータを因子分解する必要があります。これは、前の節のようにベクトル化すると、各密度について1度だけ行われることが保証されます。効率性の点でも数値的な安定性の点でももっと良い解法は、中央化しないパラメータ化の多変量版を使って、相関行列のコレスキー因子により直接的にモデルをパラメータ化することです。前の節のモデルについて、プログラム中の完全な行列の事前分布の部分を、等価なコレスキー分解した事前分布に置き換えると以下のようになります。\n+\n+```\n+parameters {\n+  matrix[K,J] z;\n+  cholesky_factor_corr[K] L_Omega;\n+  ...\n+transformed parameters {\n+  matrix[J,K] beta;\n+  beta <- u * gamma + (diag_pre_multiply(tau,L_Omega) * z)';\n+}\n+model {\n+  to_vector(z) ~ normal(0,1);\n+  L_Omega ~ lkj_corr_cholesky(2);\n+  ...\n+```\n+\n+新しいパラメータ`L_Omega`は、元の相関行列`Omega`のコレスキー因子です。つまり、以下のようになっています。\n+\n+```\n+Omega = L_Omega * L_Omega'\n+```\n+\n+事前分布のスケールのベクトル`tau`は変化ありません。さらに、コレスキー因子にスケールを左から掛ける(**pre-multiplying**)ことで、最終的な共分散行列のコレスキー因子が生成されます。\n+\n+```\n+Sigma_beta\n+= quad_form_diag(Omega,tau)\n+= diag_pre_multiply(tau,L_Omega) * diag_pre_multiply(tau,L_Omega)'\n+```\n+\n+ここで、対角行列の、左から掛ける複合演算は以下のように定義されています。","path":"part02/chap06/chap06.md","position":893,"original_position":893,"commit_id":"0f963f4d6965f4a414b8932efa257f51011bc07b","original_commit_id":"0f963f4d6965f4a414b8932efa257f51011bc07b","user":{"login":"MatsuuraKentaro","id":11885625,"avatar_url":"https://avatars.githubusercontent.com/u/11885625?v=3","gravatar_id":"","url":"https://api.github.com/users/MatsuuraKentaro","html_url":"https://github.com/MatsuuraKentaro","followers_url":"https://api.github.com/users/MatsuuraKentaro/followers","following_url":"https://api.github.com/users/MatsuuraKentaro/following{/other_user}","gists_url":"https://api.github.com/users/MatsuuraKentaro/gists{/gist_id}","starred_url":"https://api.github.com/users/MatsuuraKentaro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatsuuraKentaro/subscriptions","organizations_url":"https://api.github.com/users/MatsuuraKentaro/orgs","repos_url":"https://api.github.com/users/MatsuuraKentaro/repos","events_url":"https://api.github.com/users/MatsuuraKentaro/events{/privacy}","received_events_url":"https://api.github.com/users/MatsuuraKentaro/received_events","type":"User","site_admin":false},"body":"* 対角行列の、左から掛ける複合演算→ `a`を対角成分とした対角行列を作って左から掛ける複合演算","created_at":"2016-03-05T12:18:18Z","updated_at":"2016-03-05T12:18:18Z","html_url":"https://github.com/stan-ja/stan-ja/pull/29#discussion_r55120300","pull_request_url":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29","_links":{"self":{"href":"https://api.github.com/repos/stan-ja/stan-ja/pulls/comments/55120300"},"html":{"href":"https://github.com/stan-ja/stan-ja/pull/29#discussion_r55120300"},"pull_request":{"href":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29"}}},"pull_request":{"url":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29","id":59284122,"html_url":"https://github.com/stan-ja/stan-ja/pull/29","diff_url":"https://github.com/stan-ja/stan-ja/pull/29.diff","patch_url":"https://github.com/stan-ja/stan-ja/pull/29.patch","issue_url":"https://api.github.com/repos/stan-ja/stan-ja/issues/29","number":29,"state":"open","locked":false,"title":"6章を翻訳しました","user":{"login":"ito4303","id":13703977,"avatar_url":"https://avatars.githubusercontent.com/u/13703977?v=3","gravatar_id":"","url":"https://api.github.com/users/ito4303","html_url":"https://github.com/ito4303","followers_url":"https://api.github.com/users/ito4303/followers","following_url":"https://api.github.com/users/ito4303/following{/other_user}","gists_url":"https://api.github.com/users/ito4303/gists{/gist_id}","starred_url":"https://api.github.com/users/ito4303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ito4303/subscriptions","organizations_url":"https://api.github.com/users/ito4303/orgs","repos_url":"https://api.github.com/users/ito4303/repos","events_url":"https://api.github.com/users/ito4303/events{/privacy}","received_events_url":"https://api.github.com/users/ito4303/received_events","type":"User","site_admin":false},"body":"IRTモデルとかSURモデルはよく知らないので、このあたりを含めましてどなたかレビューをお願いします。","created_at":"2016-02-14T01:57:25Z","updated_at":"2016-03-05T12:18:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1fa32cb8665610916b64652c63eaa6a62d742a04","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29/commits","review_comments_url":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29/comments","review_comment_url":"https://api.github.com/repos/stan-ja/stan-ja/pulls/comments{/number}","comments_url":"https://api.github.com/repos/stan-ja/stan-ja/issues/29/comments","statuses_url":"https://api.github.com/repos/stan-ja/stan-ja/statuses/0f963f4d6965f4a414b8932efa257f51011bc07b","head":{"label":"stan-ja:create/part02/chap06","ref":"create/part02/chap06","sha":"0f963f4d6965f4a414b8932efa257f51011bc07b","user":{"login":"stan-ja","id":16357636,"avatar_url":"https://avatars.githubusercontent.com/u/16357636?v=3","gravatar_id":"","url":"https://api.github.com/users/stan-ja","html_url":"https://github.com/stan-ja","followers_url":"https://api.github.com/users/stan-ja/followers","following_url":"https://api.github.com/users/stan-ja/following{/other_user}","gists_url":"https://api.github.com/users/stan-ja/gists{/gist_id}","starred_url":"https://api.github.com/users/stan-ja/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stan-ja/subscriptions","organizations_url":"https://api.github.com/users/stan-ja/orgs","repos_url":"https://api.github.com/users/stan-ja/repos","events_url":"https://api.github.com/users/stan-ja/events{/privacy}","received_events_url":"https://api.github.com/users/stan-ja/received_events","type":"Organization","site_admin":false},"repo":{"id":48265007,"name":"stan-ja","full_name":"stan-ja/stan-ja","owner":{"login":"stan-ja","id":16357636,"avatar_url":"https://avatars.githubusercontent.com/u/16357636?v=3","gravatar_id":"","url":"https://api.github.com/users/stan-ja","html_url":"https://github.com/stan-ja","followers_url":"https://api.github.com/users/stan-ja/followers","following_url":"https://api.github.com/users/stan-ja/following{/other_user}","gists_url":"https://api.github.com/users/stan-ja/gists{/gist_id}","starred_url":"https://api.github.com/users/stan-ja/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stan-ja/subscriptions","organizations_url":"https://api.github.com/users/stan-ja/orgs","repos_url":"https://api.github.com/users/stan-ja/repos","events_url":"https://api.github.com/users/stan-ja/events{/privacy}","received_events_url":"https://api.github.com/users/stan-ja/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/stan-ja/stan-ja","description":"","fork":false,"url":"https://api.github.com/repos/stan-ja/stan-ja","forks_url":"https://api.github.com/repos/stan-ja/stan-ja/forks","keys_url":"https://api.github.com/repos/stan-ja/stan-ja/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stan-ja/stan-ja/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stan-ja/stan-ja/teams","hooks_url":"https://api.github.com/repos/stan-ja/stan-ja/hooks","issue_events_url":"https://api.github.com/repos/stan-ja/stan-ja/issues/events{/number}","events_url":"https://api.github.com/repos/stan-ja/stan-ja/events","assignees_url":"https://api.github.com/repos/stan-ja/stan-ja/assignees{/user}","branches_url":"https://api.github.com/repos/stan-ja/stan-ja/branches{/branch}","tags_url":"https://api.github.com/repos/stan-ja/stan-ja/tags","blobs_url":"https://api.github.com/repos/stan-ja/stan-ja/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stan-ja/stan-ja/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stan-ja/stan-ja/git/refs{/sha}","trees_url":"https://api.github.com/repos/stan-ja/stan-ja/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stan-ja/stan-ja/statuses/{sha}","languages_url":"https://api.github.com/repos/stan-ja/stan-ja/languages","stargazers_url":"https://api.github.com/repos/stan-ja/stan-ja/stargazers","contributors_url":"https://api.github.com/repos/stan-ja/stan-ja/contributors","subscribers_url":"https://api.github.com/repos/stan-ja/stan-ja/subscribers","subscription_url":"https://api.github.com/repos/stan-ja/stan-ja/subscription","commits_url":"https://api.github.com/repos/stan-ja/stan-ja/commits{/sha}","git_commits_url":"https://api.github.com/repos/stan-ja/stan-ja/git/commits{/sha}","comments_url":"https://api.github.com/repos/stan-ja/stan-ja/comments{/number}","issue_comment_url":"https://api.github.com/repos/stan-ja/stan-ja/issues/comments{/number}","contents_url":"https://api.github.com/repos/stan-ja/stan-ja/contents/{+path}","compare_url":"https://api.github.com/repos/stan-ja/stan-ja/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stan-ja/stan-ja/merges","archive_url":"https://api.github.com/repos/stan-ja/stan-ja/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stan-ja/stan-ja/downloads","issues_url":"https://api.github.com/repos/stan-ja/stan-ja/issues{/number}","pulls_url":"https://api.github.com/repos/stan-ja/stan-ja/pulls{/number}","milestones_url":"https://api.github.com/repos/stan-ja/stan-ja/milestones{/number}","notifications_url":"https://api.github.com/repos/stan-ja/stan-ja/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stan-ja/stan-ja/labels{/name}","releases_url":"https://api.github.com/repos/stan-ja/stan-ja/releases{/id}","deployments_url":"https://api.github.com/repos/stan-ja/stan-ja/deployments","created_at":"2015-12-19T02:08:26Z","updated_at":"2016-02-24T06:05:55Z","pushed_at":"2016-02-27T05:51:00Z","git_url":"git://github.com/stan-ja/stan-ja.git","ssh_url":"git@github.com:stan-ja/stan-ja.git","clone_url":"https://github.com/stan-ja/stan-ja.git","svn_url":"https://github.com/stan-ja/stan-ja","homepage":null,"size":1340,"stargazers_count":9,"watchers_count":9,"language":"Shell","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":13,"forks":2,"open_issues":13,"watchers":9,"default_branch":"master"}},"base":{"label":"stan-ja:master","ref":"master","sha":"937197e323e4d7e176a2479adc5211b00141ae32","user":{"login":"stan-ja","id":16357636,"avatar_url":"https://avatars.githubusercontent.com/u/16357636?v=3","gravatar_id":"","url":"https://api.github.com/users/stan-ja","html_url":"https://github.com/stan-ja","followers_url":"https://api.github.com/users/stan-ja/followers","following_url":"https://api.github.com/users/stan-ja/following{/other_user}","gists_url":"https://api.github.com/users/stan-ja/gists{/gist_id}","starred_url":"https://api.github.com/users/stan-ja/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stan-ja/subscriptions","organizations_url":"https://api.github.com/users/stan-ja/orgs","repos_url":"https://api.github.com/users/stan-ja/repos","events_url":"https://api.github.com/users/stan-ja/events{/privacy}","received_events_url":"https://api.github.com/users/stan-ja/received_events","type":"Organization","site_admin":false},"repo":{"id":48265007,"name":"stan-ja","full_name":"stan-ja/stan-ja","owner":{"login":"stan-ja","id":16357636,"avatar_url":"https://avatars.githubusercontent.com/u/16357636?v=3","gravatar_id":"","url":"https://api.github.com/users/stan-ja","html_url":"https://github.com/stan-ja","followers_url":"https://api.github.com/users/stan-ja/followers","following_url":"https://api.github.com/users/stan-ja/following{/other_user}","gists_url":"https://api.github.com/users/stan-ja/gists{/gist_id}","starred_url":"https://api.github.com/users/stan-ja/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stan-ja/subscriptions","organizations_url":"https://api.github.com/users/stan-ja/orgs","repos_url":"https://api.github.com/users/stan-ja/repos","events_url":"https://api.github.com/users/stan-ja/events{/privacy}","received_events_url":"https://api.github.com/users/stan-ja/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/stan-ja/stan-ja","description":"","fork":false,"url":"https://api.github.com/repos/stan-ja/stan-ja","forks_url":"https://api.github.com/repos/stan-ja/stan-ja/forks","keys_url":"https://api.github.com/repos/stan-ja/stan-ja/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stan-ja/stan-ja/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stan-ja/stan-ja/teams","hooks_url":"https://api.github.com/repos/stan-ja/stan-ja/hooks","issue_events_url":"https://api.github.com/repos/stan-ja/stan-ja/issues/events{/number}","events_url":"https://api.github.com/repos/stan-ja/stan-ja/events","assignees_url":"https://api.github.com/repos/stan-ja/stan-ja/assignees{/user}","branches_url":"https://api.github.com/repos/stan-ja/stan-ja/branches{/branch}","tags_url":"https://api.github.com/repos/stan-ja/stan-ja/tags","blobs_url":"https://api.github.com/repos/stan-ja/stan-ja/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stan-ja/stan-ja/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stan-ja/stan-ja/git/refs{/sha}","trees_url":"https://api.github.com/repos/stan-ja/stan-ja/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stan-ja/stan-ja/statuses/{sha}","languages_url":"https://api.github.com/repos/stan-ja/stan-ja/languages","stargazers_url":"https://api.github.com/repos/stan-ja/stan-ja/stargazers","contributors_url":"https://api.github.com/repos/stan-ja/stan-ja/contributors","subscribers_url":"https://api.github.com/repos/stan-ja/stan-ja/subscribers","subscription_url":"https://api.github.com/repos/stan-ja/stan-ja/subscription","commits_url":"https://api.github.com/repos/stan-ja/stan-ja/commits{/sha}","git_commits_url":"https://api.github.com/repos/stan-ja/stan-ja/git/commits{/sha}","comments_url":"https://api.github.com/repos/stan-ja/stan-ja/comments{/number}","issue_comment_url":"https://api.github.com/repos/stan-ja/stan-ja/issues/comments{/number}","contents_url":"https://api.github.com/repos/stan-ja/stan-ja/contents/{+path}","compare_url":"https://api.github.com/repos/stan-ja/stan-ja/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stan-ja/stan-ja/merges","archive_url":"https://api.github.com/repos/stan-ja/stan-ja/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stan-ja/stan-ja/downloads","issues_url":"https://api.github.com/repos/stan-ja/stan-ja/issues{/number}","pulls_url":"https://api.github.com/repos/stan-ja/stan-ja/pulls{/number}","milestones_url":"https://api.github.com/repos/stan-ja/stan-ja/milestones{/number}","notifications_url":"https://api.github.com/repos/stan-ja/stan-ja/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stan-ja/stan-ja/labels{/name}","releases_url":"https://api.github.com/repos/stan-ja/stan-ja/releases{/id}","deployments_url":"https://api.github.com/repos/stan-ja/stan-ja/deployments","created_at":"2015-12-19T02:08:26Z","updated_at":"2016-02-24T06:05:55Z","pushed_at":"2016-02-27T05:51:00Z","git_url":"git://github.com/stan-ja/stan-ja.git","ssh_url":"git@github.com:stan-ja/stan-ja.git","clone_url":"https://github.com/stan-ja/stan-ja.git","svn_url":"https://github.com/stan-ja/stan-ja","homepage":null,"size":1340,"stargazers_count":9,"watchers_count":9,"language":"Shell","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":13,"forks":2,"open_issues":13,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29"},"html":{"href":"https://github.com/stan-ja/stan-ja/pull/29"},"issue":{"href":"https://api.github.com/repos/stan-ja/stan-ja/issues/29"},"comments":{"href":"https://api.github.com/repos/stan-ja/stan-ja/issues/29/comments"},"review_comments":{"href":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29/comments"},"review_comment":{"href":"https://api.github.com/repos/stan-ja/stan-ja/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/stan-ja/stan-ja/pulls/29/commits"},"statuses":{"href":"https://api.github.com/repos/stan-ja/stan-ja/statuses/0f963f4d6965f4a414b8932efa257f51011bc07b"}}}}