経済情報処理講義ノート - u-toyama.ac.jp · 2 回帰分析 3 2 回帰分析 2.1...
Transcript of 経済情報処理講義ノート - u-toyama.ac.jp · 2 回帰分析 3 2 回帰分析 2.1...
1
経済情報処理 講義ノート第 15回 Rによる統計分析 Part 4
2017 年 7 月 24 日(月)4限
担当教員: 唐渡 広志website: http://www3.u-toyama.ac.jp/kkarato/
email: [email protected]
目次
1 データの読み込み 2
2 回帰分析 3
2.1 散布図と回帰直線 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 最小 2乗推定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 多重回帰モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 一般化線形モデル 10
3.1 ロジット・リンク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 最尤法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 一般化線形モデルの評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.4 ロジット・モデルの推定 . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 プロビット・モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.6 順序選択モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1 データの読み込み 2
1 データの読み込み
データやスクリプト(プログラム)を読み書きする場合は,あらかじめ作業フォルダ(ディレク
トリ)を決めておくとよい。Rを起動したら,ファイル・メニューのディレクトリの変更から,自
分の作業ディレクトリを指定することができる。指定したフォルダにデータやスクリプト(プログ
ラム)を置いておくと,ファイルの読み込みや書き出しを行うときに便利である。
まず,以下の準備を行う。
1. ファイル・メニューのディレクトリの変更から,自分の作業ディレクトリを指定する
2. ファイル・メニューの新しいスクリプトから,Rに内蔵されているエディタを起動する(「無
題 Rエディタ」と表示される)。エディタにはソースコードを記述していく。
3. ファイル・メニューの保存で作業ディレクトリに名前をつけて保存しておく。拡張子は r と
する。
4. data 11.csvをダウンロードして,自分の作業ディレクトリにファイルを移動しておく。
準備ができたら,次のソースコードをエディタに記述する。� �data<- read.csv("data_11.csv")� �
ここで,read.csvは CSV(Comma Separated Value,カンマ区切り)データを読み込むためのコ
マンドであり,括弧の中に読み込むファイル名を(拡張子もつけて)ダブル・クォーテーションで
括っている。読み込んだものを dataという名前を付けて記憶している。
書き終わったら,右クリックをして「カーソル行または選択中の Rコードを実行」を選択してコ
マンドを実行する。または,ショートカットの ctrl + Rでも同じく実行できる。エラーが出てい
なければ,続いて以下のソースコードを書く。� �attach(data)
obs<- length(data[,1])
str(data)
# データの集約
summary(data)� �上記の 4行を書いたら,4行分をまとめて選択して実行する。ここで,
• attach はデータの変数へのアクセスを簡単にするコマンド,
• length(data[,1])は(1列目の)データの長さ(観測値の数)を測るコマンド,
• strは dataの中にあるオブジェクト(つまり変数)の内容を簡易表示するコマンド,
• # の行は Rでは無視されるので,コメント文やメモを書いておきたい場合に利用する
• summaryは dataの簡易記述統計(四分位数や平均など)を示すコマンドである。
str(data)の結果から,観測値の数は 2162,変数の数は 44であることが示されている。
2 回帰分析 3
2 回帰分析
2.1 散布図と回帰直線
直線: curve, lines, abline
x-y 座標平面に直線を描くにはいくつかの方法がある。curve コマンドを利用して直線 y =
3− 2x を描くには,� �curve(3-2*x)� �
と記述する。linesコマンドは 2点の座標値を結ぶ直線を描く。� �lines(c(0.2,0.8),c(2,2.5))� �
これは,第 1 の座標を (0.2, 2),第 2 の座標を (0.8, 2.5) としたときの 2 点を結んだ直線にな
る。abline コマンドは直線の切片と傾きを指定して描く方法である。例えば,切片 1,傾き 2
(y = 1 + 2x)の直線の場合� �abline(1,2)� �
となる。また,abline(v=0.5) とすると横軸 x = 0.5 の位置に垂線 (vertical line) を,
abline(h=1.5) とすると縦軸 y = 1.5の位置に水平線 (horizontal line)を描くことができる。
回帰直線の描画
2つのデータの散布図を作成して,最小 2乗法で求めた回帰直線を当てはめる場合にも abline
を利用する。回答者本人の年齢 [18]age.sfと配偶者の年齢 [25]age.spの場合,次のように書く。� �plot(age.sf, age.sp)
reg<- lm(age.sf~age.sp)
abline(reg)� �ここで,lmは直線モデル当てはめのコマンド (fitting linear models)であり,最小 2乗推定値を
計算する。 age.sf~age.sp は formula とよばれるオブジェクトで,age.sf = α + β age.sp
という線形回帰直線を表現するための記法である。lm コマンドで計算した切片や傾きの情報を
reg という名前で保存しておいて,これを abline に渡すことで散布図に回帰直線を描画してい
る。abline(lm(age.sf age.sp))と記述しても同じ結果が得られる。lmコマンドで計算した内
容は,保存名 regと入力することで表示できる。
2 回帰分析 4� �reg
Call:
lm(formula = age.sf ~ age.sp)
Coefficients:
(Intercept) age.sp
2.131 0.959� �2.2 最小 2乗推定
summary による分析結果の表示
lmコマンドで計算した内容の詳細を表示するには summaryコマンドを使う。summary(reg) ま
たは summary(lm(age.sf~age.sp)) と入力する。� �summary(reg)
Call:
lm(formula = age.sf ~ age.sp)
Residuals:
Min 1Q Median 3Q Max
-20.5875 -2.6887 -0.3003 2.7407 26.4690
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.130918 0.393006 5.422 6.55e-08 ***
age.sp 0.958977 0.006999 137.011 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.581 on 2160 degrees of freedom
Multiple R-squared: 0.8968, Adjusted R-squared: 0.8968
F-statistic: 1.877e+04 on 1 and 2160 DF, p-value: < 2.2e-16� �推定パラメータ(係数)を α, β,誤差項を ui としたときの線形回帰モデル
age.sf = α+ β age.sp+ ui
の推定結果について,Residuals は最小 2乗残差の最小,最大,四分位数の記述統計を示している。
Coefficients は係数 α, β の推定値 (Estimate),標準誤差 (Std. Error),t値 (t value),p
値 (Pr(>|t|)) を示している。(Intercept) は切片(定数項の係数推定値)α を,age.sp は傾
2 回帰分析 5
き(age.sp の係数推定値)β である。アスタリスク * は有意性の判断基準を示す記号 Signif.
codesであり,
• *** ならば有意水準 0.1%で有意,
• ** ならば有意水準 1%で有意,
• * ならば有意水準 5%で有意,
• . ならば有意水準 10%で有意
となる。その他の情報は次のようになっている。
• Residual standard error 回帰の標準誤差 σ =∑
u2i /自由度 とその自由度 degrees of
freedom
• Multiple R-squared (重)決定係数 R2
• Adjusted R-squared 自由度調整済み決定係数 adj.R2
• F-statistic 説明変数の係数がすべて 0であるという帰無仮説(この場合は H0 : β = 0)
に対する F 検定統計量と分子・分母の自由度 DF,および p値
summary の成分
summary コマンドで示される計算結果は,いくつかの成分をまとめて表示している。
names(lm(formula)) と入力すると全ての成分を表示できる。� �names(reg)
[1] "coefficients" "residuals" "effects" "rank"
[5] "fitted.values" "assign" "qr" "df.residual"
[9] "xlevels" "call" "terms" "model"� �個々の成分を見る場合には,summaryコマンドの後ろに成分の番号やValueを付加する。例えば,
回帰の標準誤差(残差分散の平方根)を見るには summary(reg)[6] あるいは summary(reg)$sig
と記述する( summary(reg)$sigmaと記述してもよい)。代表的なものを表 1に示した。
表 1 summary(lm(formula)) の代表的な成分
成分の番号 Value 出力内容[3] $res 残差[4] $coef 係数推定値,標準誤差,t値,p値[6] $sig 回帰の標準誤差[8] $r.sq 決定係数[9] $adj.r.sq 自由度調整済み決定係数[10] $fstat F検定統計量,分子の自由度,分母の自由度[11] $cov 推定値の分散・共分散
2 回帰分析 6
2.3 多重回帰モデル
ダミー変数
就労時間 [21] hour.sfを説明するために,年齢 [18] age.sfと性別 [5] sexを要因とする多重回
帰モデルを考える。性別のような名義尺度は次のようにしてダミー変数に変換する。� �D<- ifelse(sex==2,1,0)� �
sex==2は女性であることを示しているので,Dは女性ダミー変数になる。
データの条件指定
なお,就労時間は仕事をしていない場合観察できない(非該当)データであるので,hour.sf!=888
を条件にする(非該当データを除去する)。回帰分析に利用するデータセットを次のように定義
する。� �y<- hour.sf[hour.sf!=888]
x<- age.sf[hour.sf!=888]
D<- D[hour.sf!=888]� �推定モデルは
y = β1 + β2 x+ β3 D+ u (1)
なので,次のようにして推定する。� �reg<- lm(y~x + D)
summary(reg)� �被説明変数を y,説明変数を x2, x3, x4とするときの多重回帰モデルは,」
y~x2+x3+x4
のように formulaを記述していく(回帰係数を書く必要がない)。
subset の使用
あらかじめ,条件指定したデータセットで分析をする場合には,subsetコマンドでデータを抽
出しておく。例えば,都道府県が富山県 pref==16 の就労時間 [21] hour.sf データを抽出する
には� �subset(hour.sf,pref==16)� �
と書く。また,富山県 pref==16 の男性 sex==1 就労時間 [21] hour.sf データを抽出するには� �subset(hour.sf,pref==16 & sex==1)� �
とする。
2 回帰分析 7
data全体を抽出するには,� �subset(data,pref==16 & sex==1)� �
と書く。就労時間が非該当のデータ hour.sf==888を除いて,data全体を抽出するには,� �subset(data,hour.sf!=888)� �
と書く。
data.frame の使用と factor によるダミー変数
csvファイルを data<- read.csv("data_11.csv") のように読み込むとき, data のこと
を data.frame (データ・フレーム)とよぶ。元のデータ・フレームから別のデータ・フレーム
を作成するには,subset コマンドでデータを条件抽出しておき,data.frame 関数で別の名前
data2を付けておく。� �data2<- data.frame(subset(data, hour.sf!=888))� �
(1)を推定するには� �reg<- lm(hour.sf~age.sf + factor(sex), data=data2)
summary(reg)� �のように書く。lmコマンドで最小 2乗推定をする際に,どのデータ・フレームを使うのかというこ
とを data=data2で指定している。factorは量的な尺度を名義尺度に変換するときに使う命令で
ある。元々のデータ sexは量的な尺度としての 1や 2という数値であるが,factorによって 1や
2という数値を分類上の番号として定義し直している。lmコマンドの formulaにおいて,factor
を使用すると自動的に名義尺度に対するダミー変数として扱われる。
推定結果(係数推定値)は次のようになっている。� �Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 63.65005 1.76697 36.02 <2e-16 ***
age.sf -0.35703 0.03288 -10.86 <2e-16 ***
factor(sex)2 -15.95804 0.80737 -19.77 <2e-16 ***� �推定結果は lm(y~ x + D) と全く同じものになる。factor(sex)2 は名義尺度のうち sex==2 に
対する女性ダミー変数を示している。仮にこのモデルが正しいとすれば,被説明変数は(週当たり)
就労時間 hour.sf であるから,(他の条件が等しければ)年齢が 1歳上がると就労時間は 0.357時
間減少し,(他の条件が等しければ)女性は男性に比べて 15.958時間だけ就労時間が短いといえる。
2 回帰分析 8
2乗項
年齢と就労時間の関係を次の 2次式で表現する場合がある。
hour.sf = β1age.sf+ β2age.sf2 + β3factor(sex)2+ u (2)
年齢の 2 乗項を formula に含めるには I 関数 (Inhibit Interpretation/Conversion of Objects)
を利用して I(age.sf^2) を追加する。� �reg<- lm(hour.sf~age.sf + I(age.sf^2) + factor(sex), data=data2)
summary(reg)� �(2)式の推定結果は次のようになる� �
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 27.605957 5.633785 4.900 1.07e-06 ***
age.sf 1.169697 0.229275 5.102 3.84e-07 ***
I(age.sf^2) -0.015166 0.002255 -6.726 2.56e-11 ***
factor(sex)2 -16.279732 0.795979 -20.452 < 2e-16 ***� �2 乗項を含むときの回帰式の意味を考えるために,就業年数と年齢の関係性だけに注目してみよ
う。summary(reg)$coefより推定値や標準誤差などを表示できるので,β2 の推定値を b2,β3 の
推定値を b3 とすると,� �b2<- summary(reg)$coef[2,1]
b3<- summary(reg)$coef[3,1]� �より,b2 = 1.169697と b3 = -0.015166を保存できる。就業年数の理論値 Y は概ね次の形を
しているといえる。Y = 1.170x− 0.015x2 + extras (3)
ここで,xは年齢,extrasは固定されたその他の項を示している。これを図示するには次のように
書く。� �curve(b2*x+b3*x^2, 20,80, axes=F)
axis(1)� �ただし,axes=F は軸を表示させないオプション,axis(1)は横軸だけを表示させるコマンドであ
る。この結果を見ると,30歳代後半が就労時間のピークになっていることがわかる。実際に,就
労時間が最大となる年齢は,(3)を xについて微分して 0とおくことで,x = 38.56歳であること
がわかる。Rでは次のように計算したらよい。� �-b2/(2*b3)
[1] 38.5621� �
2 回帰分析 9� �例題 1 データ・フレーム data2 を利用して,次の説明変数で就労時間 hour.sfを説明す
るモデルを推定しなさい。
1. 年齢,年齢の 2乗,性別ダミー,就労形態ダミー (job.sf)
2. 10歳階級年齢ダミー (age.sf10),性別ダミー,就労形態ダミー (job.sf)
ただし,factorを使用して名義尺度に対するダミー変数を定義すること。� �例題 1の 1 の推定モデルとその推定は次のように書く。� �
reg<- lm(hour.sf~age.sf + I(age.sf^2) + factor(sex)
+ factor(job.sf), data=data2)
summary(reg)� �� �Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.195526 5.322200 6.801 1.56e-11 ***
age.sf 1.002056 0.208864 4.798 1.78e-06 ***
I(age.sf^2) -0.012484 0.002071 -6.029 2.13e-09 ***
factor(sex)2 -9.741887 0.859124 -11.339 < 2e-16 ***
factor(job.sf)2 -5.885321 1.442993 -4.079 4.80e-05 ***
factor(job.sf)3 -21.253979 1.584140 -13.417 < 2e-16 ***
factor(job.sf)4 -12.676375 3.859618 -3.284 0.00105 **
factor(job.sf)5 -10.263944 1.667614 -6.155 9.88e-10 ***
factor(job.sf)6 -5.737439 2.217513 -2.587 0.00978 **� �factor(job.sf)2から factor(job.sf)6は定義より,経営者・役員 job.sf==1 を基準とする
ダミー変数である。つまり,「経営者・役員」と比べた就労時間は(他の条件が等しければ)「常時
雇用の一般従業者」では 5.8時間だけ短い,「臨時雇用」では 21.2時間だけ短い,などの結果が得
られる。
例題 1の 2 の推定モデルとその推定は次のように書く。� �reg<- lm(hour.sf~factor(age.sf10) + factor(sex)
+ factor(job.sf), data=data2)
summary(reg)� �age.sf10は 10歳階級ごとの年齢なので,factor(age.sf10)30から factor(age.sf10)80ま
では,20歳代 age.sf10==20を基準とするダミー変数である。20歳代と比較すると,30, 40, 50
歳代の就労時間は有意な差がないが,60歳代は 20歳代に比べて 8.0時間短く,70歳代は 20歳代
に比べて 14.6時間短い,などの結果が得られる。
3 一般化線形モデル 10� �Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57.3306 2.2986 24.942 < 2e-16 ***
factor(age.sf10)30 -2.0756 1.9640 -1.057 0.290799
factor(age.sf10)40 -1.6515 1.9093 -0.865 0.387197
factor(age.sf10)50 -3.1518 1.9292 -1.634 0.102551
factor(age.sf10)60 -8.0257 2.0113 -3.990 6.95e-05 ***
factor(age.sf10)70 -14.6730 2.6060 -5.630 2.19e-08 ***
factor(age.sf10)80 -23.0555 5.7030 -4.043 5.58e-05 ***
factor(sex)2 -9.7094 0.8668 -11.202 < 2e-16 ***
factor(job.sf)2 -5.9239 1.4554 -4.070 4.97e-05 ***
factor(job.sf)3 -21.3883 1.5956 -13.405 < 2e-16 ***
factor(job.sf)4 -13.3221 3.8877 -3.427 0.000629 ***
factor(job.sf)5 -10.7186 1.6755 -6.397 2.18e-10 ***
factor(job.sf)6 -5.8525 2.2318 -2.622 0.008831 **� �3 一般化線形モデル
3.1 ロジット・リンク
線形確率モデル
work.sfは
• work.sf==1 「仕事をした」
• work.sf==2 「休んだ(病気,休暇)」
• work.sf==3 「仕事をしていない」
というデータであり,これをダミー変数
Yi =
{1 仕事をした
0 それ以外i = 1, 2, · · · , n (4)
のように 2項変数に変換して,Yi = α+ βXi + ui (5)
を推定する場合について考える(これを線形確率モデルとよぶ)。(5)式の推定は,左辺に 2項変数
(ダミー変数)があるという点で特徴があるが,最小 2乗法による推定は可能である(ただし,誤
差項は分散不均一である)。しかしながら,その理論値が必ずしも 0と 1の間に収まるとは限らず,
「就労確率」を 0と 1の間で定義するときには推定結果を理解するのは困難である。
Yi が 0か 1のデータということは,誤差項 Yi はベルヌーイ分布(試行回数 1の二項分布)にし
たがっていると考えることができる。つまり,真の成功確率(仕事をする確率) pi が存在すると
き,Yi = 0 や Yi = 1は 1回の試行による実現値である。また,E(Yi) = pi,V (Yi) = pi(1− pi)
である。
3 一般化線形モデル 11
潜在変数による回帰
仕事を「するか」,「しないか」という意思決定をモデル化する場合,(5)式に替えて,次の 2項
選択モデルを定義する。
Y ∗i = α+ βXi + ui (6)
Y ∗i < 0ならば Yi = 0
Y ∗i ≧ 0ならば Yi = 1
ここで,Y ∗i は観察できないが,何かを選択するときに間接的に観察される潜在変数 (latent
variable) である。潜在変数 Y ∗i は 2 項変数 Yi とは異なって,−∞ から∞ の範囲で連続的な値
をとる量的変数である。α + βXi + ui によって Y ∗i < 0 ならば,Yi = 0 という意思決定をし,
Y ∗i ≧ 0 ならば,Yi = 1という意思決定をする(「仕事をする」を選択する)。つまり,潜在変数が
0という閾値を超えるか否かを計測することによって,選択確率を推定する。
リンク関数
通常,回帰モデルでは誤差項 ui が正規分布であることを想定しているので,(5)を最小 2乗法で
計算することはできるものの,最小 2乗推定量の良い性質は失われてしまう。誤差項が正規分布以
外のケースに回帰モデルを適用できるように一般化したものを「一般化線形モデル」(generalized
linear model; GLM)とよんでいる。一般化線形モデルは「系統的部分」,「リンク関数」,「誤差項」
の 3点で記述することができる。「系統的部分」とは被説明変数 Yi を説明変数 Xi でどのように説
明するのかを示す α+ βXi のことである。「リンク関数」とは,Yi の期待値(E(Yi) = pi)と系統
的部分との関係を繋ぐ関数のことであり,関数 g を用いて
g(E(Yi)) = α+ βXi (7)
と表現する。つまり,被説明変数の期待値をリンク関数 g で変換したときの形が系統的部分に等し
くなる。例えば,通常の線形回帰モデルで ui ∼ N(0, σ2)の場合 E(Yi) = α + βXi となる。これ
を恒等リンクという。
ロジット変換
(4) 式のような 0 か 1 の 2 項変数の場合は,リンク関数をロジット変換で定義できる。確率
Pr(Yi = 1) = pi をロジスティック分布の累積確率で表現するとき,pi =eα+βXi
1+eα+βXiであり,これ
をロジット変換すると ln pi
1−piになる*1。ベルヌーイ分布より,E(Yi) = pi なので,リンク関数
g(pi)を
lnpi
1− pi= α+ βXi (8)
と書ける。これをロジット・リンクとよんでいる。
*1 第 10回講義ノートを参照。
3 一般化線形モデル 12
3.2 最尤法
ロジット・モデルを推定するために最尤法 (maximum likelihood method; ML) とよばれる推
定手法を用いる。最尤法とはモデルの尤度 (likelihood) を最大化するパラメータを求める手法であ
り,尤度とは与えられた標本のもとでの確率の積で表現できる。*2
L = Pr(Y1 = y1)× Pr(Y2 = y2)× · · · × Pr(Yn = yn) (9)
ここで,yi は 0または 1の実現値である。
ロジット・モデルの尤度は次のように考える。まず,試行回数 n,成功確率 pの 2項分布 B(n, p)
にしたがう確率変数を Y とおくとき,y 回成功する確率は Pr(Y = y) = nCypy(1− p)n−y である
ので,試行回数 n = 1のベルヌーイ分布の場合は,成功回数 Y = 0, 1について
Pr(Y = 0) = p0(1− p)1−0 = 1− p, Pr(Y = 1) = p1(1− p)1−1 = p
となる。つまり,i番目のデータが成功するか (Yi = 1)しないか (Yi = 0)を表現する確率は
Pr(Yi = yi) = pyi
i (1− pi)1−yi (10)
と書ける。ここで,(7)より,与えられた Xi のもとで Yi = 1となる確率は
Pr(Yi = 1) = Pr(Y ∗i ≧ 0) (11)
= Pr(α+ βXi + ui ≧ 0)
= Pr(ui ≧ −α− βXi)
= pi
であり,Yi = 0となる確率は
Pr(Yi = 0) = Pr(Y ∗i < 0) (12)
= Pr(α+ βXi + ui < 0)
= Pr(ui < −α− βXi)
= 1− pi
である。したがって,(12),(13)を (10)に代入して尤度は次のように書ける。
L = Pr(Y1 = y1)× Pr(Y2 = y2)× · · · × Pr(Yn = yn)
= Pr(u1 ≧ −α− βX1)y1 Pr(u1 < −α− βX1)
1−y1
×Pr(u2 ≧ −α− βX2)y2 Pr(u2 < −α− βX2)
1−y2
× · · ·×Pr(un ≧ −α− βXn)
yn Pr(un < −α− βXn)1−yn
X1, · · · , Xn を与えると,尤度 L はパラメータ α, β の値によって決まる関数であることがわか
る。最尤法は尤度 Lを最大化する α, β を見つける方法である。このとき,尤度の対数(対数尤度)
LL = lnL を α, β について最大化すると最尤推定量 α, β が得られる。
*2 連続分布の場合は確率密度関数の積で尤度を定義する。
3 一般化線形モデル 13
3.3 一般化線形モデルの評価
最尤推定量の仮説検定 β = 0 は標準正規分布で行う。すべての説明変数の係数が 0であるとい
う帰無仮説を検定するには尤度比検定 (likelihood ratio test; LR)を利用する。実際には尤度の比
率ではなく,尤度の対数差分で検定を行う。
LR = −2(LL0− LL) ∼ χ2(k) (13)
ここで,LL0はすべての説明変数の係数を 0と仮定した場合の最大対数尤度,kは説明変数の数で
ある。自由度 k のカイ 2乗分布で有意性を検定する。これは,線形回帰モデルでの F 検定に該当
する。
一般化線形モデルを評価する場合,赤池情報基準量 (Akaike’s Information Criterion; AIC) が
用いられる。AIC = −2LL+ 2(k + 1) (14)
いくつかのモデルを比較する場合,AIC が最小のモデルを選択することが望ましい。
一般化線形モデルでは,線形回帰モデルで用いられる残差 2乗和に替えて,残差逸脱度 (residual
deviance) Dev という指標を用いる。Dev = −2LL (15)
逸脱度は最大対数尤度に −2を乗じた値で定義する。LRや AIC などの統計量は,この表現の方
がすっきりする(LR = Dev0−Dev, AIC = Dev + 2k)。
対数尤度や逸脱度は他のモデルとの比較では重要であるが,その値自体でモデルの適合度
を判断できない。一般化線形モデルではマクファーデンの擬似決定係数 (McFadden’s pseudo
R-squared)という指標が利用される。
pR2 = 1− LL
LL0(16)
計算は単純であり LR検定を行うときに利用したものと同じ 2つの対数尤度を使う。
3.4 ロジット・モデルの推定
glmコマンド
Rでロジット・モデル(ロジスティック回帰モデル)を推定するには glmコマンドを利用する。� �y<- ifelse(work.sf==1 1,0)
y.glm<- glm(y~ age.sf + factor(sex), family=binomial(link="logit"))
summary(y.glm)� �2 項変数 (4) を work.sf データから作成して y とする。y を年齢 age.sf と女性ダミー
factor(sex)で説明するモデルを glmコマンド内で記述して,さらに familyで目的変数が 2項
変数 binomial であること,利用するリンク関数が link="logit"であることを指定する。推定
結果は次のようになる。
3 一般化線形モデル 14� �Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.527970 0.273707 20.20 <2e-16 ***
age.sf -0.077703 0.004228 -18.38 <2e-16 ***
factor(sex)2 -1.381965 0.109007 -12.68 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2877.6 on 2161 degrees of freedom
Residual deviance: 2360.4 on 2159 degrees of freedom
AIC: 2366.4
Number of Fisher Scoring iterations: 4� �ここで,ロジット・モデルのパラメータは標準正規分布で仮説検定を行うので,z valueを表示し
ている。推定モデルは 2つの説明変数を利用しているので k = 2である。Null deviance は 2つ
の説明変数がどちらも 0 であるという帰無仮説のもとでの逸脱度 (Dev0 = −2LL0) を示してい
る。サンプル・サイズ n = 2162に対して,Null devianceの自由度は n− 1である。Residual
deviance は最大対数尤度 LLに対して Dev = −2LLであり,自由度は n − (k + 1)である。赤
池情報基準量は AIC = Dev + 2(k + 1) = 2360.4 + 2× 3 となっている。
モデルの評価
sumamry コマンドでは,対数尤度,尤度比検定,擬似決定係数などの情報は表示されないが,
deviance などの情報を利用して簡単に計算することができる。� �LL<- y.glm$dev/(-2)
LL0<- y.glm$null.dev/(-2)
LR<- -2*(LL0-LL)
bhat<- y.glm$coef
k<- length(bhat)-1
LRp<- 1-pchisq(LR,df=k)
AIC<- y.glm$aic
pR2<- 1 - LL/LL0� �逸脱度は$dev で表示できるので,(15) より y.glm$dev/(-2) が最大対数尤度 LL になる。推定
値だけを取り出すには,$coef を利用する。lengthで推定パラメータの数を数えて,1を引くと
k = 2が得られる。尤度比は (13)式より計算し,その p値は自由度 k のカイ 2乗分布を利用して
計算する。赤池情報基準量は$aicで保存されている。擬似決定係数は (16)式より,対数尤度を利
3 一般化線形モデル 15
表 2 ロジット・モデルの推定結果(観測値の数 2162)
変数 推定値 標準誤差 限界効果ME
定数項 5.528 0.274 *** -
年齢 -0.078 0.004 *** -0.014
女性ダミー -1.382 0.109 *** -0.254
最大対数尤度 LL -1180.209
尤度比 LR 517.220
尤度比 LRの p値 0.000
赤池情報基準量 AIC 2366.417
擬似決定係数 pR2 0.180
用して計算する。
限界効果
ロジット・モデルでは,説明変数と確率の関係は非線形になっているので,係数推定値だけでは
具体的な効果を知ることができない。そこで,説明変数 X が 1単位変化したときの Pr(Y = 1)と
なる確率の変化である限界効果 (marginal effects)を求める(第 10回講義ノート)。ロジット・モ
デルの限界効果は
ME =∂ Pr(Yi = 1)
∂Xi= βp∗(1− p∗) (17)
より計算する。ここで,p∗(1 − p∗) はロジスティック分布の確率密度を示している。確率密度は
Xi の値によって変動するので,通常は代表的な値を利用して評価する。ここでは,確率の理論値
pi = Pr(ui ≧ −α− βXi)より
p∗(1− p∗) =
∑i pi(1− pi)
n
を利用して平均的な限界効果を求める。
確率の理論値は y.glm$fit に格納されているので,次のように記述する。� �phat<-y.glm$fit
ME<- bhat*mean(phat*(1-phat))
ME
(Intercept) age.sf D
1.01781992 -0.01430682 -0.25444983� �ここで,bhat は係数推定値,phat は確率の理論値,mean(phat*(1-phat)) は確率密度の平均
値を示している。つまり,(平均的には)就労確率は,年齢 age.sf が 1 歳上昇すると,0.0143
(1.43%) だけ低下し,女性 Dは男性に比べて 0.2544 (25.44%) だけ低いことが示される。
以上より,ロジット・モデル
lnpi
1− pi= β1 + β2 age.sfi + β3 Di + ui
の推定結果一覧表を表 2のようにまとめることができる。
3 一般化線形モデル 16� �例題 2 ownhouse==1 ならば y = 1,それ以外は y = 0 となる 2 項変数を作り,年齢
age.sf,世帯年収 factor(income.hh),都道府県 factor(pref) を説明変数とする持ち家
率のロジット・モデルを推定しなさい。また,年齢や年収をコントロールした場合,どの都道
府県の持ち家率が高いのかを限界効果で考えなさい。� �3.5 プロビット・モデル
プロビット・リンク
ロジット・モデルは,(12)式の pi をロジスティック分布における確率と考えてリンク関数を定
義している。これとは別に,(12)式の pi を正規分布 N(0, σ2)における確率と考えてリンク関数を
定義するのがプロビット・モデル (probit model)である。
pi = Pr(ui ≦ α+ βXi) =
∫ α+βXi
−∞f(ui)dui (18)
ここで,f(ui)は正規分布の確率密度関数である。ロジット・モデルと同様に,プロビット・モデ
ルも最尤法でパラメータ推定を行う。(18) における f(ui) の累積確率を F (α + βXi) と書くと,
α+ βXi について解いた逆関数は F−1(pi)なので,プロビット・リンクは
F−1(pi) = α+ βXi (19)
と書ける。
プロビット・モデルの推定
プロビット・モデルの推定も glmコマンドを利用する。yを仕事をするかしないかの 2項変数と
して,これを年齢と女性ダミーで説明するモデルを次のように記述する。� �y.glm<- glm(y~ age.sf + factor(sex), family=binomial(link="probit"))
summary(y.glm)� �推定結果を抜粋するとは次のようになる� �
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.262107 0.150845 21.63 <2e-16 ***
age.sf -0.045510 0.002371 -19.19 <2e-16 ***
factor(sex)2 -0.854726 0.063304 -13.50 <2e-16 ***� �対数尤度や AIC はロジット・モデルのときと同じように計算できる。ただし,限界効果を計算す
るには,標準正規分布の確率密度関数を利用する。
ME =∂ Pr(Yi = 1)
∂Xi= β
∑i f(α+ βXi)
n(20)
Rでは次のように計算する。
3 一般化線形モデル 17
表 3 プロビット・モデルの推定結果(観測値の数 2162)
変数 推定値 標準誤差 限界効果定数項 3.262 0.151 *** -
年齢 -0.046 0.002 *** -0.014
女性ダミー -0.855 0.063 *** -0.265
最大対数尤度 LL -1180.950
尤度比 LR 517.220
尤度比 LRの p値 0.000
赤池情報基準量 AIC 2367.900
擬似決定係数 pR2 0.180
� �phat<-y.glm$fit
ME<- bhat*mean(dnorm(qnorm(phat)))
ME
(Intercept) age.sf factor(sex)2
1.0103654 -0.0140957 -0.2647326� �以上のプロビット推定の結果は表 3にまとめられる。� �例題 3 例題 2をプロビット・モデルで推定しなさい。� �
3.6 順序選択モデル
区切り点選択
順序選択モデル(順序ロジットあるいはプロビット・モデル)は,目的変数が順序尺度のデータ
の場合に用いられる分析手法である。例えば,op56:
「子供の教育」は個人や家族の責任でしょうか,国や地方自治体の責任でしょうか?
という質問について,回答の選択肢 Yi = {1, 2, 3, 4, 5} は値が大きくなるにつれて,国や自治体(公)の責任をより重視し,値が小さくなるにつれて,個人や家族(個)の責任を重視するという順
序になっている。回答番号 Yi を被説明変数にして最小 2乗法で推定することもできるが,ロジッ
ト・モデルで説明したように結果の解釈は難しくなる。
目的変数が順序尺度のデータの場合も (7)と同様に潜在変数を利用した回帰モデルを考える。
Y ∗i = βXi + ui (21)
ζj−1 < Y ∗i < ζj ならば Yi = j (j = 1, 2, 3, 4, 5)
このモデルは,区切り点 (breakpoints) ζ0, ζ1, ζ2, ζ3, ζ4, ζ5 で区切られた区間に潜在変数が入ると
き,選択肢番号 j を選択することを示している。切片は一つではなく区切り点に応じて設定さ
3 一般化線形モデル 18
れる。
Yi = 1 ↔ ζ0 < Y ∗i < ζ1 ↔ ζ0 − βXi < ui < ζ1 − βXi
Yi = 2 ↔ ζ1 < Y ∗i < ζ2 ↔ ζ1 − βXi < ui < ζ2 − βXi
Yi = 3 ↔ ζ2 < Y ∗i < ζ3 ↔ ζ2 − βXi < ui < ζ3 − βXi
Yi = 4 ↔ ζ3 < Y ∗i < ζ4 ↔ ζ3 − βXi < ui < ζ4 − βXi
Yi = 5 ↔ ζ4 < Y ∗i < ζ5 ↔ ζ4 − βXi < ui < ζ5 − βXi
ここで,ζ0 = −∞, ζ5 = ∞ であるので,推定モデルで決定されるのは ζ1, ζ2, ζ3, ζ4 となる。
Λをロジスティック分布(累積確率)とすると,順序ロジット・モデルの Yi = j である(与えら
れた Xi のもとでの)確率は,
pij = Pr(Yi = j) = Λ(ζj − βXi)− Λ(ζj−1 − βXi) (22)
となる。また,F を正規分布(累積確率)とすると,順序プロビット・モデルの確率は
pij = Pr(Yi = j) = F (ζj − βXi)− F (ζj−1 − βXi) (23)
2項選択ではなく,多項選択であるので確率分布も多項分布 (pyi1
i1 ) · (pyi2
i2 ) · (pyi3
i3 ) · (pyi4
i4 ) · (pyi5
i5 ) に
なる。
モデルの評価
順序ロジット・モデルや順序プロビット・モデルの推定は,(22)や (23)を利用して尤度関数を
定義し,最尤法でパラメータ推定を行う。赤池情報基準量は
AIC = −2LL+ 2(k + kζ) (24)
により計算する。ただし,kは説明変数の数,kζ は推定すべき区切り点の数(選択肢が 5段階の場
合 ζ1, ζ2, ζ3, ζ4)である。
限界効果は密度関数の差分を利用して計算する。
順序ロジット・モデル :∂ Pr(Yi = j)
∂Xi= [λ(ζj−1 − βXi)− λ(ζj − βXi)]β (25)
順序プロビット・モデル :∂ Pr(Yi = j)
∂Xi= [f(ζj−1 − βXi)− f(ζj − βXi)]β (26)
ここで,λはロジスティック分布の密度関数,f は正規分布の密度関数である。
順序選択モデルの推定
目的変数となる順序尺度データを「子供の教育」op56 として,説明変数を年齢 age.sf,性別
ダミー facto(sex),6歳未満の子供の数 c06,6歳以上 12歳未満の子供の数 c0612,12歳以上
18歳未満の子供の数 c1218,学歴ダミー factor(edu.sf) とする。順序選択モデルを推定するに
は,パッケージ pkgを読み込む必要がある。パッケージには,あらかじめインストールされている
ものと,外部からダウンロードして新しくインストールする必要があるものがある。順序選択モデ
ルで利用するパッケージは MASSという名前で,Rには初期状態でインストールされている。MASS
パッケージを読み込むには libraryコマンドを使用する。
3 一般化線形モデル 19� �library(MASS)� �
順序選択モデルを推定するために polrコマンドを次のように使う。� �ologit<- polr(as.factor(op56)~ age.sf + factor(sex)
+ c06 + c0612 + c1218 + factor(edu.sf), method = "logistic")
summary(ologit)� �ここで,op56 を順序尺度として認識させるために as.ordered というコマンドを使う。順序ロ
ジット・モデルのときは method = "logistic"とし,順序プロビット・モデルのときは method
= "probit"とする。
推定モデルを評価するために,対数尤度や AIC などを以下のように計算する。� �LL<- ologit$deviance/(-2)
ologit0<- polr(as.ordered(op56)~ 1, method = "logistic")
LL0<- ologit0$deviance/(-2)
LR<- -2*(LL0-LL); # 尤度比
LRp<- 1-pchisq(LR,df=k) # H0:「係数がすべて 0」の尤度比検定の p値
bhat<- matrix(ologit$coef) # 推定値
k<- length(bhat) # 説明変数の数
kz<- length(ologit$zeta) # 順序尺度のカテゴリー数 - 1
AIC<- -2*LL + 2*(k+kz) # 赤池情報基準量
pR2<- 1-(LL/LL0) # 擬似決定係数� �polrコマンドでは,説明変数の係数をすべて 0と仮定した切片だけのモデルの対数尤度や逸脱度
(null.deviance)は出力されないので,自前で polr(as.ordered(op56)~ 1, method = "logistic")
を推定して LL0を計算する。
限界効果を求めるには誤差項 ui の確率密度の差分を計算する必要がある。ologit$fit には
(22)式で定義された確率の理論値が保存されているので,これを利用して確率密度を求める。� �phat<- ologit$fit
cphat<- array(0,c(ologit$n,4))
cphat[,1]<- phat[,1]
cphat[,2]<- phat[,1] + phat[,2]
cphat[,3]<- phat[,1] + phat[,2] + phat[,3]
cphat[,4]<- phat[,1] + phat[,2] + phat[,3] + phat[,4]
lambda<- dlogis(qlogis(cphat))� �ここで,lambdaは 4列のデータで (25)式における確率密度 λ(ζ1−βXi),λ(ζ2−βXi),λ(ζ3−βXi),
λ(ζ4 − βXi) の理論値を示している。これらの差分を次のように計算する。
3 一般化線形モデル 20� �dl1<- mean(-lambda[,1])
dl2<- mean(lambda[,1]-lambda[,2])
dl3<- mean(lambda[,2]-lambda[,3])
dl4<- mean(lambda[,3]-lambda[,4])
dl5<- mean(lambda[,4])� �最後に (25)式にしたがって,各係数の限界効果を計算する。� �ME<- cbind(bhat*dl1, bhat*dl2, bhat*dl3, bhat*dl4, bhat*dl5)
ME� �限界効果ME の出力結果は次のようになる。� �
[,1] [,2] [,3] [,4] [,5]
[1,] -0.0013880099 -0.0010179285 0.0002881974 0.001078294 0.001039447
[2,] -0.0037981183 -0.0027854363 0.0007886166 0.002950620 0.002844318
[3,] -0.0203954382 -0.0149574575 0.0042347764 0.015844473 0.015273646
[4,] -0.0300370033 -0.0220283180 0.0062366885 0.023334654 0.022493979
[5,] -0.0336688021 -0.0246917801 0.0069907716 0.026156066 0.025213744
[6,] 0.0197321449 0.0144710162 -0.0040970545 -0.015329185 -0.014776922
[7,] 0.0009674851 0.0007095272 -0.0002008823 -0.000751604 -0.000724526
[8,] 0.0173066125 0.0126921970 -0.0035934327 -0.013444877 -0.012960500
[9,] -0.0097591267 -0.0071570770 0.0020263217 0.007581510 0.007308372� �以上の推定結果は表 4にまとめることができる。推定結果より,「子供の教育」に対する「公」と
「個」の選択には年齢,6歳以上 12差未満の子供の数,12歳以上 18差未満の子供の数が有意に正
の関連性を持っていることがわかる。その一方で,性別,6歳未満の子供の数,学歴の違いは選択
に影響しない。このことから,本人の学歴に関わらず,年齢が高いほど,そして就学している子供
の数が多いほど,「子供の教育」を国や自治体の責任と考える傾向が強いことがわかる。
限界効果で具体的な確率をみてみよう。年齢が 1歳上昇すると,
•「個人や家族の責任」と考える確率が 0.14%だけ下落する。
•「どちらかといえば個人や家族の責任」と考える確率が 0.10%だけ下落する。
•「どちらかといえば国や自治体の責任」と考える確率が 0.11%だけ上昇する。
•「国や自治体の責任」と考える確率が 0.10%だけ上昇する。
また,6歳以上 12差未満の子供の数が一人増えると,
•「個人や家族の責任」と考える確率が 3.00%だけ下落する。
•「どちらかといえば個人や家族の責任」と考える確率が 2.20%だけ下落する。
•「どちらかといえば国や自治体の責任」と考える確率が 2.33%上昇する。
•「国や自治体の責任」と考える確率が 2.25%だけ上昇する。
3 一般化線形モデル 21
表 4 順序ロジット・モデルの推定結果(観測値の数 2162)
限界効果推定値 標準誤差 Y = 1 Y = 2 Y = 3 Y = 4 Y = 5
age.sf 0.010 0.004 ** -0.0014 -0.0010 0.0003 0.0011 0.0010factor(sex)2 0.028 0.082 -0.0038 -0.0028 0.0008 0.0030 0.0028c06 0.150 0.101 -0.0204 -0.0150 0.0042 0.0158 0.0153c0612 0.220 0.080 *** -0.0300 -0.0220 0.0062 0.0233 0.0225c1218 0.247 0.074 *** -0.0337 -0.0247 0.0070 0.0262 0.0252factor(edu.sf)2 -0.145 0.282 0.0197 0.0145 -0.0041 -0.0153 -0.0148factor(edu.sf)3 -0.007 0.275 0.0010 0.0007 -0.0002 -0.0008 -0.0007factor(edu.sf)4 -0.127 0.291 0.0173 0.0127 -0.0036 -0.0134 -0.0130factor(edu.sf)5 0.072 0.280 -0.0098 -0.0072 0.0020 0.0076 0.0073
区切り点:1|2 ζ1 -0.972 0.4092|3 ζ2 0.222 0.4083|4 ζ3 1.529 0.4094|5 ζ4 2.714 0.413
LL -3353.736LR 22.522LR p値 0.007AIC 6733.473pR2 0.003
12歳以上 18差未満の子供の数が一人増えると,
•「個人や家族の責任」と考える確率が 3.37%だけ下落する。
•「どちらかといえば個人や家族の責任」と考える確率が 2.47%だけ下落する。
•「どちらかといえば国や自治体の責任」と考える確率が 2.62%だけ上昇する。
•「国や自治体の責任」と考える確率が 2.52%だけ上昇する。
なお,女性ダミーは有意でないが,男性に比べて女性は
•「個人や家族の責任」と考える確率が 0.38%だけ小さい。
•「どちらかといえば個人や家族の責任」と考える確率が 0.28%だけ小さい。
•「どちらかといえば国や自治体の責任」と考える確率が 0.30%だけ大きい。
•「国や自治体の責任」と考える確率が 0.28%だけ大きい。� �例題 4 現在の仕事の満足度 job.satiを順序ロジット・モデルで推定する。ただし,仕事
をしている人を対象にするために,次の新しいデータ・フレームを用意しておく。
data3<- data.frame(subset(data, work.sf == 1))
また,満足度の順序を「満足している」を 5,「不満である」を 1に変更するために,目的変数
を as.ordered(6-job.sati)とし,説明変数を年齢 age.sf, 性別 factor(sex),本人年
収 factor(income.sf),就労時間 hour.sf とする。(library(MASS)でパッケージを読み
込んでおくこと。)� �
3 一般化線形モデル 22
推定結果は次のようになる。� �> data3<- data.frame(subset(data, work.sf == 1))
> ologit<- polr(as.ordered(6-job.sati)~ age.sf + factor(sex)
+ + factor(income.sf) + hour.sf
+ , method = "logistic", data=data3)
> summary(ologit)
Re-fitting to get Hessian
Call:
polr(formula = as.ordered(6 - job.sati) ~ age.sf + factor(sex) +
factor(income.sf) + hour.sf, data = data3, method = "logistic")
Coefficients:
Value Std. Error t value
age.sf 0.006856 0.004474 1.532
factor(sex)2 0.436100 0.131630 3.313
factor(income.sf)2 0.533906 0.144522 3.694
factor(income.sf)3 0.647301 0.158829 4.075
factor(income.sf)4 1.536530 0.236342 6.501
hour.sf -0.010312 0.003584 -2.877
Intercepts:
Value Std. Error t value
1|2 -3.2136 0.3643 -8.8205
2|3 -1.8616 0.3355 -5.5490
3|4 -0.3207 0.3277 -0.9786
4|5 1.4821 0.3301 4.4903
Residual Deviance: 3500.94
AIC: 3520.94
� �