井出草平の研究ノート

ベイジアンロジスティック回帰分析・その2

HardinとHilbeのStata本にあるベイジアンロジスティック回帰分析の続き。前回のエントリはこちら

Generalized Linear Models and Extensions: Fourth Edition

Generalized Linear Models and Extensions: Fourth Edition

メトロポリスヘイスティングス

メトロポリスヘイスティングス法のやり方である。

前回も同じことを行っているが、データの読み込みと変数加工(センタリング)もう一度行っておこう。

. use http://www.stata-press.com/data/hh4/rwm1984
. quietly summarize docvis, meanonly
. generate cdoc = docvis - r(mean)
. quietly summarize age, meanonly
. generate cage = age - r(mean)

医者の往診の変数docvisと年齢ageをセンタリングしている。

MH法では変数の設定が必要である。priorは従属変数を指定し、その後にコンマをうち、分布とパラメーターを指定する構文が必要だ。以下のコマンドの2行目のところである。

. bayesmh outwork female kids cdoc cage, likelihood(logit)
> prior({outwork:}, normal (0,10000)) rseed (2017)
Model summary
------------------------------------------------------------------------------
Likelihood:
  outwork ~ logit(xb_outwork)

Prior:
  {outwork:female kids cdoc cage _cons} ~ normal(0,10000)                  (1)
------------------------------------------------------------------------------
(1) Parameters are elements of the linear form xb_outwork.

Bayesian logistic regression                     MCMC iterations  =     12,500
Random-walk Metropolis-Hastings sampling         Burn-in          =      2,500
                                                 MCMC sample size =     10,000
                                                 Number of obs    =      3,874
                                                 Acceptance rate  =      .2363
                                                 Efficiency:  min =     .02665
                                                              avg =     .05244
Log marginal-likelihood = -2001.0895                          max =       .101

------------------------------------------------------------------------------
             |                                                Equal-tailed
     outwork |      Mean   Std. Dev.     MCSE     Median  [95% Cred. Interval]
-------------+----------------------------------------------------------------
      female |  2.260566   .0803699   .002529    2.25819   2.103102   2.421029
        kids |  .3562706   .0893508   .004221   .3583318   .1783027   .5281715
        cdoc |   .024483   .0061758   .000329   .0244374   .0130205   .0369231
        cage |  .0545722   .0040688   .000174   .0547603   .0464829   .0622289
       _cons |  -2.01027    .082349   .005044   -2.00927  -2.172552  -1.852391
------------------------------------------------------------------------------

プロット

プロットは非収束の徴候が確認できる。

従属変数と各独立変数でプロットを作成する。
従属変数であるoutworkcdocでグラフを作成した。

Stataでは引数なしでグラフ診断を走らせると、4タイプのグラフが描画される。

. bayesgraph diagnostics {outwork: cage}

f:id:iDES:20191111183628p:plain

トレースプロットは各反復におけるパラメータ推定値をグラフ化する。ラグ項との自己相関である。ヒストグラムは事前分布と一致しているか確認する。outworkcdocでのグラフ診断は正規分布に近いが、世正規分布が必須というわけではないようだ。

outworkとセンタリングした年齢の変数であるcageのグラフ診断も走らせてみる。

f:id:iDES:20191111183616p:plain

cdocほどは良いグラフになっていないので、サンプリングに反復を追加し、値の選択を3から5減らすと自己相関を減らすことができるとのこと。

ESSコマンド

ESSコマンドでは、モデル内の指定された各パラメータについて、有効なサンプルサイズ、相関時間、および効率を表示できる。

. bayesstats ess

Efficiency summaries    MCMC sample size =    10,000
                        Efficiency:  min =    .02665
                                     avg =    .05244
                                     max =      .101

----------------------------------------------------
    outwork  |        ESS   Corr. time    Efficiency
-------------+--------------------------------------
      female |    1009.74         9.90        0.1010
        kids |     448.19        22.31        0.0448
        cdoc |     352.37        28.38        0.0352
        cage |     545.17        18.34        0.0545
       _cons |     266.54        37.52        0.0267
----------------------------------------------------

ベイズモデルでは、モデルパラメータの事後平均は、パラメータの事後分布のMCMCサンプリングの平均によって決定される。推定されたサンプル平均の標準誤差はに比例する。

ESS値が低いと注意が必要である。理想的には、ESS値はMCMCサンプルサイズに近い値をとる。効率は、ESS値にまたはを乗算することによって決定される。女性のESS値は1009.74であり、効率は0.101である。

Gibbs法によるサンプリングを行わない限り、平均の効率値0.01が許容できるモデルの最小効率である。0.1以上の値はランダムウォークメトロポリスアルゴリズム(random-walk Metropolis algorithm)にとって効率的であるとされているとのこと。

相関時間(correlation time)は効率の逆数である。自己相関が低い推定遅延と考えられ、値は小さい方が良い。

献本御礼:宮本みち子編『すべての若者が生きられる未来を』

宮本先生に講演会でお会いして頂戴いたしました。
ありがとうございます。

www.city.shinagawa.tokyo.jp

インドでひきこもり、いや、Netflix依存症だ

dramanavi.net

米CNBCによると、昨年度Netflix加入者の1日平均視聴時間は50分。しかし、インド出身のある男性は、1日7時間もNetflixの作品を見続けるという生活を半年以上も続けた結果、睡眠障害や身体的疲労、眼精疲労などの症状が出てしまい、インドのバンガロールにある同施設に入所したという。

施設にある、テクノロジーの健全な使用推進を奨励している部署の精神科医、マノジュ・クマール・シャルマ医師によると、その男性は半年以上無職で、家族から職を見つけるようプレッシャーをかけられており、その重圧から逃れるためにNetflixで視聴を続けていたとのこと。

この男性は日本でいうとひきこもりであったり、精神疾患の分類ではうつ病あたりが妥当なところだろう。
Netflixを見たため睡眠障害や身体的疲労などの症状が出たというのではなく、ストレス下でそれらの精神症状が出たと捉える方が説明として無理がない。
Netflixは、ストレスから逃れるため、つまりコーピングの手段として使われていたのだから、Netflixはむしろ彼を救っていた部分の方が多いのではないだろうか。

有病率の計算[R]

こちらのエントリでStataで行ったことをRでもやってみたい。 有病率の計算はprevalenceパッケージを用いる。

prevalence.cbra.be

prevalenceパッケージはベイズ統計学の計算にJAGSとrjagsを利用する。
JAGSを使ったことがない場合には、インストールが必要である。

JAGSのインストール

sourceforgeからダウンロードする。

sourceforge.net

ほとんどの人は/files/JAGS/4.x/Windows/からダウンロードすることになるだろう。
通常のアプリケーションと同じようにダウンロードをして、ダイアログボックスに従ってインストールする。

ほとんどの人はJAGS/4.x/Windows/からダウンロードすることになるだろう。ちなみに僕は/files/JAGS/4.x/Windows/JAGS-4.3.0.exeをインストールした。
通常のアプリケーションと同じようにダウンロードをして、ダイアログボックスに従ってインストールする。Pathは通す必要がない。

rjagsパッケージのインストール

rjagsはRからインストールする。

install.packages("rjags")

prevalenceパッケージのインストール

いつもは書かないが、一応prevalenceパッケージのインストールもコードを書いておこう。

install.packages("prevalence")

内閣府ひきこもり調査の例

生活状況に関する調査 https://www8.cao.go.jp/youth/kenkyu/life/h30/pdf/kekka_gaiyo.pdf

この調査の結果は下記であった。
- 有効回答数 3248人 - ひきこもり群 47人

library(prevalence)
propCI(47, 3248, method = "all", level = 0.95, sortby = "level")

結果は以下。

   x    n          p        method level      lower      upper
1 47 3248 0.01447044 agresti.coull  0.95 0.01086018 0.01922783
2 47 3248 0.01447044         exact  0.95 0.01065120 0.01919662
3 47 3248 0.01447044      jeffreys  0.95 0.01078351 0.01902143
4 47 3248 0.01447044          wald  0.95 0.01036353 0.01857736
5 47 3248 0.01447044        wilson  0.95 0.01089964 0.01918838

Rのprevalenceパッケージの場合はどの推定方法であっても、信頼区間のレベルを指定できるとこがStataより優れている。Stataはすべての推定法で区間レベルの変更がオプションで用意されていない。
通常は、95%しか使わないので、不要かもしれないが、かゆいところに手が届くのがRおよび有志の作ったパッケージのよいところである。

推定方法が決まっている場合にはmethodで指定する。agresti.coull法を使うのであればmethod = agresti.coullにする。

ちなみに、僕の環境ではpropCI()はRStudioのコンソールからしか実行できなかった。 いつもの回避法だが、R Markdownでは、一度結果を格納してからprint()をすると表示できる。

res<-propCI(47, 3248, method = "all", level = 0.95, sortby = "level")
print(res)

各推定方法についてはStataのエントリを参考にして欲しい → こちら

有病率の計算[Stata]

疫学調査で有病率を出す方法である。専門用語では母比率の推定という。日本語で母比率と言うとピンとこないが、英語だとpopulation rateなので、こちらの方が直感的に理解できるはずである。

Stataで有病率を推定する

Stataではcii propコマンドを使用する。

データは内閣府のひきこもり調査のものを利用しよう。

生活状況に関する調査 https://www8.cao.go.jp/youth/kenkyu/life/h30/pdf/kekka_gaiyo.pdf

この調査の結果は下記であった。

  • 有効回答者数 3248人
  • ひきこもり者数 47人
. cii prop 3248 47 , level(95)

                                                         -- Binomial Exact --
    Variable |        Obs  Proportion    Std. Err.       [95% Conf. Interval]
-------------+---------------------------------------------------------------
             |      3,248    .0144704    .0020954        .0106512    .0191966

日本の満40歳から満64歳までの人口は4235万人である。それぞれの値を人口に掛けると推定値と95%信頼区間が出てくる。

Proportion: 42350000 * .0144704 = 612821.4
95% CI Upper: 42350000 * .0106512 = 451078.3
95% CI Lower: 42350000 * .0191966 = 812976

よって推定値61.3万人、95%信頼区間45.1~81.3万人となる。

その他の推定方法

母比率の推定にはいくつか方法がある。

コマンド 説明
exact calculate exact confidence intervals; the default
wald calculate Wald confidence intervals
wilson wilson calculate Wilson confidence intervals
agresti calculate Agresti–Coull confidence intervals
jeffreys calculate Jeffreys confidence intervals

clopper-pearson正確法

デフォルトの設定で有病率である。F分布を使用する。 スクリプトは上段で示したものである。

f:id:iDES:20191030163802p:plain

wald法

本やウェブに掲載されているのはだいたいこの推定方法である。
wald法は正規分布を使用する。Stataでは wald法はデフォルトではないので、注意が必要かもしれない。

f:id:iDES:20191030163823p:plain

. cii prop 3248 47, wald

                                                         -- Binomial Wald ---
    Variable |        Obs  Proportion    Std. Err.       [95% Conf. Interval]
-------------+---------------------------------------------------------------
             |      3,248    .0144704    .0020954        .0103635    .0185774

wilsonのスコア法

f:id:iDES:20191030163844p:plain

. cii prop 3248 47, wilson

                                                         ------ Wilson ------
    Variable |        Obs  Proportion    Std. Err.       [95% Conf. Interval]
-------------+---------------------------------------------------------------
             |      3,248    .0144704    .0020954        .0108996    .0191884

agresti-coull法

f:id:iDES:20191030163903p:plain

. cii prop 3248 47, agresti

                                                         -- Agresti-Coull ---
    Variable |        Obs  Proportion    Std. Err.       [95% Conf. Interval]
-------------+---------------------------------------------------------------
             |      3,248    .0144704    .0020954        .0108602    .0192278

元論文
https://amstat.tandfonline.com/doi/abs/10.1080/00031305.1998.10480550#.Xbk-muj7Shc

本文(PDF)
http://www.uvm.edu/~rsingle/stat380/F04/possible/Agresti+Coull-Amstat-1998_ApproxVsExactCIfoP.pdf

jeffrey's法

JeffreyとはRichard Jeffreyのことでベイズ的な方法とされる。

f:id:iDES:20191030164454p:plain

定義式を見るとclopper-pearson法の改良版と位置付けてもよさそうだ。

. cii prop 3248 47, jeffreys

                                                         ----- Jeffreys -----
    Variable |        Obs  Proportion    Std. Err.       [95% Conf. Interval]
-------------+---------------------------------------------------------------
             |      3,248    .0144704    .0020954        .0107835    .0190214

考察

これらの方法は95%信頼区間の計算方法なので、比率(Stataの結果Proportionのところ、wald法の中央値)には影響を与えない。

例題のように一般人口を対象にしたサンプルサイズが十分に大きい調査で、有病率を計算する場合、agresti-coull法がreasonableであろう。

母比率の計算は様々なケースで行うので、当然、分布も様々なものが想定される。その際には正規分布よりF分布の方が適切という場合もあるだろうから、どんな場合でもagresti-coull法がよいというわけではない。その場合はF分布のclopper-pearson正確法かjeffrey's法を検討することになるだろう。ただ、だいたいのケースではagresti-coull法が最適なのではないかと思う。

AO入試はサイコパスばかりが通る試験なのでやめるべき

中野信子の主張である。

サイコパス (文春新書)

サイコパス (文春新書)

ビジネスマンにとって最大の興味は、「サイコパスは仕事ができるのか、できないのか?」ではないでしょうか。
アメリカの産業心理学者ポール・バビアクによれば、サイコパシー尺度のスコアはエグゼクティブ層の方が高く、世間一般の方が低いという結果が出ています。言いかえれば、「出世した人間にはサイコパスが多い」ことがわかっています。
ということは、サイコパスは仕事ができるのでは?と思うかもしれませんが、必ずしもそうではありません。(pp.182)

サイコパスが高いプレゼンテーション能力を持つことは確かです。
彼らは誠実さを欠き、批判されてもピンときません。だから平気で仕事を先延ばしにしたり、約束を破ったりしてしまいます。衝動性が高いため、凡帳面さを求められる仕事や、協調性や忍耐が求められるチームワークが苦手です。しゃべりは得意で存在感はあるのですが、よくよく精査してみると、意外と業績は低いことも少なくありません。
つまり口ばかりうまくて、地道な仕事はできないタイプが多いというわけです。バビアクによると、当初まわりが期待していたほどには仕事ができないということが、後になってわかる、というのです。(pp.183)

こうしたサイコパスの特性を考えると、面接ばかりを重視した採用試験や大学のAO入試には、問題があると言わざるをえません。過剰に魅力的で、確信をもって堂々とした話しぶりをするサイコパスばかりが通る試験になりかねないからです。
同様に、司法の素人に判断させる裁判員制度も、弁舌に長けたサイコパスの存在を考えると、危険きわまりない司法制度だと言えます。(pp.186)

ここでのサイコパスレクター博士やコーポレート・サイコパスのようなタイプのことであろう。
個人的には、サイコパスと言わずとも、AO入試が欠陥制度だと考えている。

社会科学の研究は論述を入試問題に含めることも不適格だとしている。理由は、論述の成績と入学後の成績に関連が低いためである。入試は、入学後に十分学べる素質があるか否かを計測するものだ。論述はその指標として機能していないとみなされているのである。

論述試験は、日本では2020年から導入される大学入学共通テストで導入され予定である。しかし、アメリカなどでは逆に廃止の方向に向かっている。ハーバード大学はSATやACTの中で小論文の得点を選考に使用しないように制度を変更している。

srad.jp

ベイジアンロジスティック回帰分析[Stata]

HardinとHilbeが書いたglmのStata本をちらちらと読んでいて少し気になったので、自分でも分析をしてみた。

Generalized Linear Models and Extensions: Fourth Edition

Generalized Linear Models and Extensions: Fourth Edition

この分析の出典はこの本の20章2節(20.2)である。

データ

rwm1984.dtaというデータを用いる。1984年のドイツの医療改革データである。下記の変数が含まれている。

変数 ラベル
docvis MD visits/year
hospvis Days in hospital/year
edlevel Level of education
age Ages 25-64
outwork 1=not working; 0=working
female 1=femaie; 0=male
married Married=1; Single=0
kids 1=have children; 0=no children
hhninc Household income (Marks,OECD wgt)
educ Highest years of education
self 1=Self employed; 0=other
edlevel1 edlevel==Not HS grad
edlevel2 edlevel==HS grad
edlevel3 edlevel==Coll/Univ
edlevel4 edlevel==Grad School

ロジスティック回帰分析

まずは普通のロジスティック回帰分析を行う。つまり頻度主義でP値が出力されるものである。

. use http://www.stata-press.com/data/hh4/rwm1984
. quietly summarize docvis, meanonly
. generate cdoc = docvis - r(mean)
. quietly summarize age, meanonly
. generate cage = age - r(mean)
. glm outwork female kids cdoc cage, family(binomial) link(logit) nolog

Generalized linear models                         Number of obs   =      3,874
Optimization     : ML                             Residual df     =      3,869
                                                  Scale parameter =          1
Deviance         =   3918.21514                   (1/df) Deviance =    1.01272
Pearson          =  4205.000001                   (1/df) Pearson  =   1.086844

Variance function: V(u) = u*(1-u)                 [Bernoulli]
Link function    : g(u) = ln(u/(1-u))             [Logit]

                                                  AIC             =   1.013995
Log likelihood   =  -1959.10757                   BIC             =  -28047.63

------------------------------------------------------------------------------
             |                 OIM
     outwork |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      female |   2.256804   .0827624    27.27   0.000     2.094593    2.419016
        kids |   .3579762   .0899639     3.98   0.000     .1816503    .5343022
        cdoc |   .0244323   .0062628     3.90   0.000     .0121574    .0367071
        cage |   .0543791   .0041591    13.07   0.000     .0462274    .0625308
       _cons |  -2.010276   .0810901   -24.79   0.000     -2.16921   -1.851342
------------------------------------------------------------------------------

glmの前に変数を加工している行が4行入っている。quietlyは出力抑止のコマンドで、- r(mean)はセンタリングをするコマンドである。centeringのcがついたcdocとcageがglmの独立変数になっている。この処理はベイジアンのために行っており、通常のglmには不要である。結果の比較のために通常のglmでも変数を利用している。

ベイジアンロジスティック回帰分析

次にベイジアンでの分析である。変数はさきほど作ったものと同一である。bayesを接頭語にした場合、nologをつけるとエラーがでるので削除するようだ。デフォルトでは無情報事前分布、一様分布と一様分布と分散normal(0、10000)に設定されている。デフォルトで特に問題がないので、そのまま実行する。シードは2017というおそらく執筆時点の年数を入れていて、別の値でも構わない。

. bayes, rseed (2017): glm outwork female kids cdoc cage, family(binomial)


Model summary
------------------------------------------------------------------------------
Likelihood:
  outwork ~ glm(xb_outwork)

Prior:
  {outwork:female kids cdoc cage _cons} ~ normal(0,10000)                  (1)
------------------------------------------------------------------------------
(1) Parameters are elements of the linear form xb_outwork.

Bayesian generalized linear models               MCMC iterations  =     12,500
Random-walk Metropolis-Hastings sampling         Burn-in          =      2,500
                                                 MCMC sample size =     10,000
Family : Bernoulli                               Number of obs    =      3,874
Link   : logit                                   Scale parameter  =          1
                                                 Acceptance rate  =      .2363
                                                 Efficiency:  min =     .02665
                                                              avg =     .05244
Log marginal-likelihood = -2001.0895                          max =       .101

------------------------------------------------------------------------------
             |                                                Equal-tailed
     outwork |      Mean   Std. Dev.     MCSE     Median  [95% Cred. Interval]
-------------+----------------------------------------------------------------
      female |  2.260566   .0803699   .002529    2.25819   2.103102   2.421029
        kids |  .3562706   .0893508   .004221   .3583318   .1783027   .5281715
        cdoc |   .024483   .0061758   .000329   .0244374   .0130205   .0369231
        cage |  .0545722   .0040688   .000174   .0547603   .0464829   .0622289
       _cons |  -2.01027    .082349   .005044   -2.00927  -2.172552  -1.852391
------------------------------------------------------------------------------
Note: Default priors are used for model parameters.

結果は基本的には変わらない。

逸脱度情報量規準(DIC)と限界対数尤度値(marginal log-likelihood value)

他のモデルと比較する際はicコマンドが使える。

. bayesstats ic

Bayesian information criteria

----------------------------------------------
             |       DIC    log(ML)    log(BF)
-------------+--------------------------------
      active |  3928.038   -2001.09          .
----------------------------------------------
Note: Marginal likelihood (ML) is computed
      using Laplace-Metropolis approximation.

DICは3928.038、 log(ML)が限界対数尤度値であり、-2001.09である。DICはAICと基本的に同じようなものであるが、事後分布がおおむね多変量正規分布である時に有効な指標となるので、少し注意が必要かもしれない。

余談

このエントリのタイトルはベイジアンロジスティック回帰分析だが、これはBayesian Logistic Regressionを翻訳したものだ。日本語の定訳を探してみたが見つからなかった。Bayesianは翻訳がしにくい用語である。そのままベイジアンであったり(例えばベイジアン・ネットワーク)、ベイズ的であったり(ベイズ的アプローチ)、ベイズ式であったり(ベイズ式分類法)、訳がころころと変わる。

このデータを用いた分析は著者のHilbeの別の本で言及があるそうだ。

Modeling Count Data (English Edition)

Modeling Count Data (English Edition)