毎日がんばれあたん

計量社会学に関するメモとモチベーションを高めてくれる推しについて

stataコマンド~欠損値処理にめっちゃ便利なmisschkコマンド~

おつかれあたん

 

stataユーザー作成のコマンドで特に便利と思うコマンドとしてmisschkというのがあります.欠損値は社会調査データにおいては切っても切り離せないコマンドで,分析それ自体よりも処理するための時間がかかるものです.

stataの場合,if文で処理するのが最も一般的であとはdropやkeepを使う方法などがありますが,misschkというコマンドを覚えておけば欠損処理がとても快適に行えます.

 

以下で使い方と便利なポイントを紹介します.

 

 

今回用いる架空例は下記のようにします.

ID y x1 x2 x3
1 1 2 1 2
2 . . 1 2
3 2 . 2 2
4 1 . . 1
5 1 1 2 .
6 2 2 2 1
7 1 2 2 2

 
今回はyを従属変数,x1,x2,x3を独立変数として回帰分析や記述統計量,クロス表などを

作成したいとします.y~x3にはそれぞれ欠損値が存在します.ID番号が1,6,7の人は欠損値が一つもないため特別の指定をしない限り常に分析に含まれることになりますが,その他のIDは使用する変数や条件によっては分析に含まれないことになります.

以下で具体的な分析をみていきます.

 

まず,yを従属変数,x1,x2,x3を独立変数とするOLS重回帰分析を行います.

reg y x1 x2 x3

となります.このコマンドに代表される通常の回帰分析における分析対象は,「投入する変数がすべて欠損でない」ものに限定されます.つまり,IDが1,6,7の3人しか分析対象に含まれません.

上記のregの実行すれば,stataが勝手に欠損がある人を除外してくれるので大きな問題はありません.

 

しかし通常,分析に先立ち記述統計量を示すことが一般的です.

その場合sumというコマンドを実行するわけですが,仮に以下のようなコマンドを実行したとします.

sum y x1 x2 x3

すると,下記が出力されます

Variable Obs Mean Std. Dev. Min Max
           
y 6 1.33 0.52 1 2
x1 4 1.75 0.50 1 2
x2 6 1.67 0.52 1 2
x3 6 1.67 0.52 1 2

 

ここで問題となるのが,回帰分析におけるサンプルサイズと記述統計量で算出している各変数のサンプルサイズが異なる点です.通常sumを実行した場合には各変数ごとに欠損がない人を探しだしてきて記述統計量を算出します.たとえばx1についてはID1,5,6,7の4人が分析対象です.またy,x2,x3はサンプルサイズが同じであるため,一見同じ対象者であるようですが,データをみると,yはID2の人が欠損,x2はID4の人,x3はID5の人が欠損であるので,対象者が異なるわけです.

 

ここで,回帰分析に合わせて,ID1,6,7の3人だけを分析対象にしたい場合には,以下のようなコマンドを実行する人が多いと思います.

sum y x1 x2 x3 if y~=. & x1~=. & x2~=. & x3~=.

すると下記が出力されます.

Variable Obs Mean Std. Dev. Min Max
           
y 3 1.3 0.58 1 2
x1 3 2 0 2 2
x2 3 1.67 0.58 1 2
x3 3 1.67 0.578 1 2

このコマンドはy,x1,x2,x3がすべて欠損でない人だけを対象として記述統計量を算出してね,というコマンドであるので,まさに回帰分析の対象者と同じになります.その証拠にサンプルサイズがすべて3で統一されています.

 

また,回帰分析に先立ち2変数の関連をクロス表で見るということがしばしあります.

記述統計量の算出の時と同じように,サンプルサイズを統一したい場合には下記のようなif文を追加する必要があります.

tab x1 y if y~=. & x1~=. & x2~=. & x3~=.

tab x2 y if y~=. & x1~=. & x2~=. & x3~=.

tab x3 y if y~=. & x1~=. & x2~=. & x3~=.

 

すなわちすべて同じif文を設定してコマンドを実行することになります.

 

-----------

データ分析にある程度慣れた人ならここまでの話はある程度常識でありながら,いちいちif文を設定するのがとても面倒に感じているのではないかと思います.コピペするにしても,変数が条件が増えるほどコマンドが長くなってみづらいということもあります.

 

そこでmisschkコマンドが活躍します.以下実行例です.

まず,

search misschk

と入力してmisschkのプログラムをダウンロードします.

 

コマンドは以下のように入力します.

misschk y x1 x2 x3,gen(mis)

 

コマンドの意味は出力を見ながら説明します.

上記を実行すると下記のような出力が表示されます.

# Variable # Missing % Missing
           
1 y   1   14.3
2 x1   3   42.9
3 x2   1   14.3
4 x3   1   14.3

最初の出力はmisschkのコマンドの後に並べた4つの変数それぞれが欠損の数と割合を示しています.たとえばx1だと欠損が3つあり,全体のうち42.9%が欠損であるということを一覧表で示してくれます.この表を出力してくれるだけでもこのコマンドのメリットがあるかと思います.

 

次が欠損のパターンの出力です.

Missing for      
which      
variables? Freq. Percent Cum.
       
12__ 1 14.29 14.29
_23_ 1 14.29 28.57
_2__ 1 14.29 42.86
___4 1 14.29 57.14
____ 3 42.86 100
       
Total 7 100  

 

ここで,12__とは投入した変数4つのうち,最初の二つつまりyとx1が欠損の人が何人いるかを示してくれて,ここでは1人で全体のうち14.29%であることが分かります.

最後の____が,4つの変数がすべて欠損でない人の情報で,それは3人いて全体の42.86%であるという情報を示してくれます.この欠損のパターンを一覧で見れるコマンドはstataのデフォルトコマンドにはないためかなり重宝されます.しかも,この欠損パターンについては新変数としてデータセットに作成されます.

Missing for      
how many      
variables? Freq. Percent Cum.
       
0 3 42.86 42.86
1 2 28.57 71.43
2 2 28.57 100
       
Total 7 100  

最後出力が欠損の数で分類した度数分布表です.たとえば4つの変数のうち欠損が0に人が3人,欠損が1つの人が2人,という情報を示してくれます.

これらの表のうち,2つ目の欠損パターンと欠損の数の度数分布表から今回分析対象となるのが3人であることが分かります.

この表は回帰分析に限らず,欠損パターンの分析,たとえばyに回答しない人は他にどんな変数に回答しないのか,というパターンを示してくれるためかなり便利です.

 

 

そして,もっとも便利なのが,

misschk y x1 x2 x3,gen(mis)

のサブコマンドで指定した(mis)の部分で,データセットをみてみると,次のようになっています.

ID y x1 x2 x3 mispattern misnumber
1 1 2 1 2 ____ 0
2     1 2 12__ 2
3 2   2 2 _2__ 1
4 1     1 _23_ 2
5 1 1 2   ___4 1
6 2 2 2 1 ____ 0
7 1 2 2 2 ____ 0

ここで,mispatternというのは,先ほど説明したように,このサンプルがどういった欠損のパターンであるかを文字列として示されたものです.

そして,misnumberというのが,投入した4つの変数のうちいくつ欠損があるかを示した変数で数値として作成されています.

変数名は()で示した文字にnumberが足されます.たとえばgen(misA)と指定すれば

misAnumberのようになります.

 

この変数が作成される所がとても便利な所で,

先ほどまで,

sum y x1 x2 x3 if y~=. & x1~=. & x2~=. & x3~=.

tab x1 y if y~=. & x1~=. & x2~=. & x3~=.

tab x2 y if y~=. & x1~=. & x2~=. & x3~=.

tab x3 y if y~=. & x1~=. & x2~=. & x3~=.

と長いコマンドを指定していたと思いますが,

これをすべて,

sum y x1 x2 x3 if misnumber==0

tab x1 y if misnumber==0

tab x2 y if misnumber==0

tab x3 y  if misnumber==0

と置き換えて分析することができます.

 

見た目もすっきりする上にmisschkのコマンドで様々な欠損パターンを作成を確認できて,その新変数を作成できるために重宝する場面は多いコマンドです.

 

 

 

 

 

 

 

 

 

stataコマンド logファイルの使い方とメリット

おつかれあたん

 

 

今回,logファイルの機能を用いてstataの出力結果とコマンドをまとめて確認する

ためのstataコマンドとその方法についてメモしておきます.

※このコマンドの通称が「log ファイル」なのか不明ですが,ここではそうします.

 

stataの欠点の一つとして,出力ファイルの編集が面倒だということがあると思います.

excelとの互換性に乏しいため,そのまま貼り付けようとしても,

行ずれや余計な空白ができたりして,それをいちいち修正するのは

かなり手間だったりします.

 

もし,論文などに表を掲載する場合は,面倒でもちゃんと修正する必要はありますが,

たとえば「ゼミの報告で使いたい」といった場面や「自分が後ですぐ確認できるようにしたい」というように,わざわざ成型された図表を提示する必要がない場面では

なるべく手間をかけずにわかりやすく結果を発表したいということがありえるかと思います。

 

そこで重宝するのが,logファイルです.

logファイルとは,(自分のざっくりした理解では)

「stataのコマンドを実行したときに出力viewに表示される結果を.smclという拡張子で

保存して,その出力を後で閲覧する機能」

になります.

 

使ったことがない人にはいまいち利点やイメージが伝わらないと思うので

(最初は自分も意味不明でした)仮想データを用いながら

コマンドも併せて説明します.

 

仮想データは下記のものです.

変数は

sex(性別:1=男性,2=女性),

age(年齢:20~40歳の連続変数)

job(雇用形態:0=非正規,1=正規)

income(収入:100~1000万の連続変数)

となります.

乱数を発生して作成しましたが,雇用形態とincomeが正の関連を

取るように,一部恣意的な入力を行いました.

 

さて,データを使って実際にdoファイルを作成していきます.

今回使用しているのはstata ver.16になります.

 

今回は収入を従属変数とした分析をすると設定し,以下のような分析を試みます.

①独立変数として使う「女性ダミー」変数を性別変数から作成

②雇用形態別に収入の記述統計量を出力

③女性ダミー,年齢,雇用形態を独立変数,収入(対数変換)を従属変数とした重回帰分析

となります.

(ふつう,収入は自然対数に変換しますが本筋ではないので無視してます)

 

実際のdo ファイルのコマンドはこんな感じです.

 

****2020年●月▲日作業*****
**データの読み込み
capture use "C:\Users\reata\OneDrive\デスクトップ\log_example.dta",clear

*****変数の変換
***女性ダミー変数作成
recode sex 1=0 2=1,gen(femaledummy)

*****収入を従属変数とした分析
***雇用形態別の収入の記述統計量
***正規雇用のほうが収入が高い
sum income if job==0
sum income if job==1

***収入を従属変数とした重回帰分析
**雇用形態のみ有意となった.収入や年齢が有意となっていないけど大丈夫か?
reg income femaledummy age job

  

本筋から逸れますが,コマンドの細かい確認です.

 

【データの読み込み:use】

データの読み込みはuseというコマンドになります.これで.dtaファイルが開けます.

フォルダからデータを探してクリックして開くこともできますが,

こちらのほうが後で説明する理由から便利です.

captureと先頭につけると,もしこのコマンドにエラーが出た場合でも,

続きのコマンドを実行してもよい,という命令になります.

(ふつう,stataはコマンドエラーが出ると続きのコマンドが実行されない.)

このcaptureはuseに限らずあらゆるコマンドの先頭につけることができますが,

特にuseコマンドの前につけると便利なことが多いです.

というのも,個人が複数のPCを用いてstataのコマンドを書いているor共同研究者と異なるPCでstataのコマンドを共有しあっているといった場合に、

一つのdoファイルの中に,

capture use・・・

capture use・・・

というように,AさんとBさんの複数のディレクトリを示しておけば,

どちらか一方のディレクトリが正しく示されていればデータを読み込むことができる

ため大変便利です.また,doファイルの保存場所さえ覚えておけばデータの保存先と

データ名はdoファイルにメモされているため記憶の節約ができると思います.

 

ちなみにディレクトリとはコンピュータの中の住所だと思ってもらえれば問題ないです.useの後の" "で囲まれた中に実際の住所を指定するわけですが,

簡単にいってしまえば,

 "日本:東京都\文京区\本郷\東京大学"

のように\の後ほど下層の住所を指定していく感じです。

 

オプションのclearはすでに,stata内に別のデータが読み込まれていて,それが

保存されていない状態であっても,そのデータを保存しないで新しいデータを読み込ませる,という命令になります.

 

 

 

 

さて,上記のコマンドを実行すると次のような出力が出てくると思います.

(スクショで貼り付けてます.)

f:id:umatake:20200423183624p:plain

f:id:umatake:20200423183628p:plain

 

 

もし,上記のような結果をすべてゼミ報告をしたいという場合,

これらの結果をexcel等に一つずつ貼り付けて,それを編集して,最後にwordファイル等に貼り付ける,といった手順を踏むことが多く,かなり面倒です.

 

そこで,log ファイルというものを活用します.

下記のようなコマンドです.

 

*****log ファイル*****
cd "C:\Users\reata\OneDrive\デスクトップ"
log using result2020income,replace

****2020年●月▲日作業*****
**データの読み込み
capture use "C:\Users\reata\OneDrive\デスクトップ\log_example.dta",clear

*****変数の変換
***女性ダミー変数作成
recode sex 1=0 2=1,gen(femaledummy)

*****収入を従属変数とした分析
***雇用形態別の収入の記述統計量
***正規雇用のほうが収入が高い
sum income if job==0
sum income if job==1

***収入を従属変数とした重回帰分析
**雇用形態のみ有意となった.収入や年齢が有意となっていないけど大丈夫か?
reg income femaledummy age job

log close

 ***************************************

 

 

logファイルを実行する前にはまず,cdというコマンドを実行します.

cdとは,change directoryの略です.

ディレクトリは前述したとおり,コンピュータの住所になります.

cdの後の" "の中に住所を指定し,

今回の例でいえば,最終的にはデスクトップを指定していることになります.

 

その後のコマンドがlogファイルを取るコマンドとなります.

まず,log using までが「logファイルを記録しろ」というコマンドで,その後のresult2020incomeはファイル名となっています.

つまり,「result2020incomeというファイル名でログを記録して,それをデスクトップに保存しろ」というコマンドを実行したことになります.

オプションのreplaceも重要で,これを入れると上書き保存になります.

replaceを入れないといちいち,ファイル名を変更しなければなりません.

(すでに存在するファイル名です,というエラーが表示されるため).

書き換えない場合はもちろん,replaceをとって,ファイル名を変更してください.

そのため,ここは各自のPCの環境に合わせてディレクトリを変更する必要があります.

 

そして,重回帰分析を行ったコマンドの最後にlog closeというコマンドを入力します.

これは,文字通り「logファイルの記録を終了します」

というコマンドなのですが,これはlog usingと合わせて使うコマンドであって,

「log usingからlog closeの間に挟んでいるdoファイルの実行結果のログをすべて記録しろ」

という命令になります.

 

ここまでlogファイルと繰り返し言ってきましたが,実際何が起きているのかよくわからないと思うので,実際の画面で確認してみます.

 

まず,上記のコマンドをstataですべて実行してみます.

するとstata上の出力ではlog usingのコマンドを実行する前と

特段変わったところはなさそうです.

 

次にcdで指定したディレクトリ先に行ってみます.今回の例だと,デスクトップです.

すると,下記のように「result2020.income.smcl」というファイルが作成されていることが分かります.

f:id:umatake:20200423185346p:plain

 

 

 

これこそがlogファイルの正体です.拡張子はデフォだと.smclとなっています.

 

これを開くと下記のような画面が出てきます.

f:id:umatake:20200423190440j:plain

f:id:umatake:20200423190029p:plain

 

これは,log using とlog closeで囲まれたdoファイルのコマンドを実行した

結果,stataの出力画面に表示されたすべての情報を記録したものとなります.

 

これの便利なところは,例えばゼミの場面でこの画面を見せれば

その人がどういった変換をして結果を出したのかすぐ分かるし,

かつコメントを残しておけば,どういった手順で変数の変換をして出した結果なのか,

どういった点が気になっているのか,などを実際の結果と合わせてみることができる

点にあります.

今回女性ダミーという変数を作成しましたが,もしこの変換がおかしい場合なんかには

結果の表と見比べてながら「このコマンドがおかしい」というコメントをもらったり,

過去のログファイルを開けばいつの時点でコマンドが間違えていたのか,振り返ることもできるわけです.

 

またopened onというところには,logファイルを取った日時が記録されているため,

この分析がいつの時点のものかも知ることができます.

 

 

使い方は色々ですが,いずれにせよ,わざわざエクセル等で図表を編集して提示する手間が省けます.

 

ディレクトリの指定など,慣れるまでは少し面倒なところがありますが,

とても便利な機能です。

 

 

 

 

xrlogitとgllamm

おつかれあたん

 

xtliogitとgllammで2値の従属変数についてランダム効果を推定した場合,なぜか結果が違うことがあり,その理由がたまたまPower and XieのStatistical methods for categorical data analysisを見てた時にわかったんですが(P125注釈),xtlogit ではapproximation methodを用いるが,gllammでは,quadrature rulesで推定を行うためということでした.すごく細かくてささいなことですが,メモです.

 

がんばれあたん

観測データ(列数)の上限を増やす方法~stata~

おつかれあたん

 

stataを使って観測データの上限を増やす方法です.

 

使いどころは主に経年調査のデータを合併するなどした場合に変数の数が滅茶苦茶増えた時です.

例えばパネル調査で第10波まで達するような場合,変数の数が余裕で1万を超えてくる

ようなことがあります.そうした場合,デフォルトだとデータを読み取ることが

できません.

ちなみにstata15ではデフォルトの変数数の上限は,ICが2,048,SEが5,000,MPが5,000となっています(ラインストーン社サイトより).しかしそれぞれの最大上限をICは2,048,SEは32,767,MPは120,000まで拡大することができます.

※ICは変更できません.

 

コマンドは

set maxvar 10000

10000のところは任意の数値で上記の場合,読み取れる最大の変数数が10000となります.ちなみに,デフォで読み取れる変数の数が少ないのは,PCのメモリの関係上,負担が少ないよう少なめに設定してあると書いてました.要するに弱っちいPCでもstataの起動や分析の際に固まらないようにするため.

 

また,サブコマンドを付けて

set maxvar 10000,permanently

とすると,設定を保存でき次回以降開いた際も10000で読み取ることが可能になります.

 

がんばれあたん

パネルデータのロジスティック回帰分析メモ~stata~

 

パネルデータを使った分析は最近徐々に浸透しつつあるような気がしますが,

多くはいわゆるOLS線形回帰モデルであり,あまりロジットやプロビットに代表される

従属変数が2値のものでリンク関数をロジスティック分布とするような分析は相対的に少ないように思うので,備忘の意味もこめてxtlogitコマンドの使い方のメモです.

コマンドはstata ユーザー用(私の環境はstata ver.15)です.

 

基本は,線形回帰と同様に固定効果(fixed effect)とランダム効果(random effecr).

前者は時間不変の共変量の影響を完全に取り除いた上(つまり,独立変数と誤差項が無相関)で推計を行う.コマンドは,

xtlogit  Y  X ,fe 

が基本.サブコマンドfeは必須でfixed effectの略.

まず,Y(従属変数)は0か1かの2値を取る変数でかつ,時間によって変化する変数.

例えば結婚しているかどうか.これは同じA君でも25歳では未婚であっても30歳になると既婚となることが考えられるため,当然ながら時間によって変化する変数.よって例えば性別などの時間によって変化しない2値変数は使用できない(推定されない).

 またたとえば体重は,1か0という2値でないため,上記のコマンドではエラーとなり,この場合は線形回帰のxtregを用いる.ただし,体重が増えたかどうかかのように変換するのであれば(増えたら1,変化なしもしくは減ったら0などの変換)2値となるので使用可能.

 また,X(独立変数)は複数投入することができ,かつ時間によって変化する変数であれば,2値変数(ダミー変数)も多値変数(連続変数)も投入可能.もし,時間によって変化しない変数を投入した場合,変化の水準が変わらないため推定されない(エラーにはならないがstataの場合はomittedと表示される).

従属変数が量的変数の場合にはふつうxtregを使う(xtlogitは使えない).

 

ここまでの話はパネルデータ分析では基本的な話ではあるが念のための補足.

すべての変数は2値(ダミー変数)であるか否かという軸と,その変数が時間によって変わりうるか否かという軸に分けられる.それぞれ具体的な変数を示す.

 

①性別:男性か女性かの2値かつ,時間によって変化しない(性転換などは例外).

②出生時体重:2値でなくかつ,時間によって変化しない変数.

③婚姻状態:既婚か未婚かの2値かつ,時間によって変化する変数

④収入:2値でなくかつ,時間によって変化する変数

 

大きくは上記のように分けられる.うち,xtlogitの固定効果の推定において,従属変数は①婚姻状態,独立変数は④収入あるいは③婚姻状態を用いることができる.固定効果モデルの場合,①は独立変数としても従属変数としても使用できない.

 

また,これも念のための補足であるが,ここでいう「変数」とは,ある特定の値に定まらない数のことを指す.変数でないもの,つまり特定の値に一意に決まるものを「定数」という.

 分析に落とし込んで考えてみると,変数とは分散を持っており,つまりはデータを見た時に値が変わりうるものであれば変数となる.

 こうしたくどい説明をするのは,上記の例で「時間によって変化しない変数」と述べたことで混乱する人がいるためである.「変化しない」のに「変数」??と違和感を覚かもしれないが,これは何も不思議なことではなく,あくまで「同一個人の中では値が変わらない」の意味で時間不変という意味である.一方で個人「」では変わりうるものであれば変数となる.たとえば性別を考えてみれば,Aさんは1年間に男であれば今年も男になるため時間によって変化しないが,Bさんは女であれば「個人間で変わりうる」ため,変数といえる.

ただし,女性のみを調査対象として男性回答者が一人も含まれないデータ,あるいは女性のみを対象とした分析を行うような場合には,「女」という性別を取る個人しかいないため(つまり分散が0になるため),性別は変数ではなくなることに注意.

 少しくどくなったがこうした違いはデータ分析においてとても重要な違いである.特にパネルデータの分析において①~④の違いを理解しておかないと,xtloigtやxtregを実行した時に,なぜかエラーが出る,なぜか係数が推定されない,逆になぜか推定された,といった現象が起こりうるためである.

 

固定効果モデルの話に戻る.以下,xtlogit以外のパネルデータに対するロジスティック回帰分析を実行するコマンドを紹介する.

 

①xtgee

パネルデータに対する一般化推定方程式のコマンドであるxtgeeを用いることも可能.

コマンドは

xtgee Y X ,family(binomial) link(logit) corr(exchangeable) 

 

パネルデータに対する一般化方程式のコマンドは,要するに「線形回帰も非線形回帰も全部まとめてこのコマンドでいけます」というもの.

カンマの後のサブコマンドであるfamily , link, corrをいじってやると,線形モデルのほか,様々な一般化線形モデルを推定することができる.

family はいわゆる分布族を指定するコマンドで,ここでは従属変数が2値であるので,二項分布を示すbinomialを指定,linkは誤差分布のことで,ここではロジスティック回帰分析なのでlogitを指定,最後のcorrは共分散構造の指定で,ここではexchangeableと指定する.

場合によってはこのコマンドのほうが便利. 

 

②clogit 

clogit(条件付きロジット).コマンドは

clogit Y  X,group(ID)

 

カンマ後のサブコマンドでグループ変数を指定することが必須で,()内は

集団を示す変数名を入力する.

条件付きロジットは,要するにパネルデータに対するロジスティック回帰分析ということができ,ロジスティック回帰分析の推定である最尤推定を各グループ間で行うということ.xtlogitよりもこちらのコマンドのほうが実行している推定方法がコマンドとして具体的に再現されているため,本質を理解するにはこちらのコマンドのほうが良いかも.こちらでは、従属変数が変化した時点のみが分析対象として含まれる点に注意したい。

 

また,xtgeeとclogitはいわゆる頑健標準誤差をサブコマンドvce(robust)で出力することができるが,xtlogitだとなぜかそれができない.

 

ちなみに,ロジスティック回帰分析なのに,誤差ってなんだ?とひっかかる人もいるかもしれません.ここでは説明しませんが,離散選択モデルという発想のもとに,潜在的には2値の変数もその2値の間を揺れ動くため潜在的には連続量と想定することができるため(ただし,通常の連続量のように0より小さい,1より大きい値はとらない),誤差を問題とできるという話です.イメージとしては,未婚を0,既婚を1とすると,いまにも結婚しそうなより既婚に近い状態の未婚の人は1に近い0.8くらいかもしれないし,全然そういう気配を見せない人であれば,0に近い0.2くらいかもしれない,というようなイメージのもとで推計を行うのが,ロジスティック回帰分析(パネルデータによらない話です).

 

次に,固定効果モデル以外の代表として,ランダム効果モデルです.こちらは,固定効果モデルと異なり,独立変数と誤差との間に(ゆるい)相関を認めるモデルです.コマンドは

xtlogit Y   X   ,re

ここでいう誤差,とはつまりは時間不変の変数(と時間によって変わるけど,モデルに投入しなかった変数)との間に相関を認めるということになり,このモデルの場合,独立変数に時間不変の変数を投入することが可能.

ちなみに,ここでいう誤差は観察されない異質性と呼ばれることが多々あり,分析に投入しなかった(もしくはできなかった)変数のこと.例えば婚姻状態(未婚か既婚か)をYとした分析を行う時に,学歴のみを独立変数として投入したとする.しかし,結婚に影響しそうな年収をモデルに入れ忘れたか,もしくは持っているデータに含まれていないような場合,年収が観察されない異質性となる.つまり年収は結婚に対して効果を持ちそう,かつ,学歴とも関連がありそうな変数となる.「かつ」が重要で,別に学歴と年収が関連しない場合(統計的には相関しない場合),学歴の影響は正しく推計できる(結婚全体の説明力は弱くなるが).が,関連する場合には学歴の効果が過小あるいは過大に推計されてしまう(バイアス,偏りを持った推計値と呼ぶ). 上記の問題は線形回帰でもロジスティック回帰でも同様の問題であるが,パネルデータ分析の際の肝となる問題.

 

最後に補足というか,意外と大事なことではあるが,固定効果モデルの場合でも,時間依存の変数との交互作用をとる場合のみモデルに投入することが可能である.たとえば,現在働いているか否か,という時間で変わる変数と性別との交互作用のような場合である.交互作用とはつまりは,変数同士の積をモデルに投入するわけであるが,この積をとった新変数をデータセットなどで確認すれば時間によって変わる変数であることが一目瞭然である.当然ながら時間不変の変数の主効果は推定できないので,注意.

 

また,パネルデータの線形回帰と同様に,ハウスマン検定によって固定効果かランダム効果かどちらのモデルが適切か推定することもできる.