Stataの「使える」adoファイル

(ver1.03 2006.4.8)

home

Stataとは

統計をするためのソフトウェアです.SPSSよりも値段が安く,機能も豊富です.アカデミックで600ドルくらいだっただろうか(Intercooled Stataの場合).SPSSで同じ機能をそろえるよりもずいぶん安上がりになります.欠点も少しあります.日本語が使えません.一番いいところは,最新バージョンでMac版があるところです.その他,コマンドライン入力を受け付けているだけあって,データの加工がやりやすい.というのが利点だと思います.

Stataは,ユーザがボランタリーに提供してくれるプログラムをインターネット経由でインストールすることで,多機能化します.ただ追加分のプログラムに関する情報は日本語ではあまり見かけませんので,英語が苦手な人向けにここで少しだけ紹介します.

追加ファイルのインストール方法

インターネットに接続した状態で,以下のように打ち込み,あとは指示に従えば,本体プログラムとヘルプファイルが自動的にインストールされます.

. findit _____

「 ____ 」には下で紹介するプログラム名を入れてください.

操作・記述系 For mamangement or description of data

renames

変数名を一括して変換するためのコマンドです.以下のようにすれば二つ同時に変数名を変更できます.

. sysuse auto,clear
(1978 Automobile Data)

. renames make price \ maker carprice

また,複数の変数に一括して同じprefix(接頭辞?)あるいはsuffix(接尾辞?)をつけることもできます.

. sysuse auto, clear
(1978 Automobile Data)

. renames make price mpg, suffix(0)

とやると,上の三つの変数の接尾に「0」をつけてくれます.変数のリコードする前準備などに使えるコマンドだと思います.

tabmiss

とやれば,欠損値のカウント,比率を返します.変数名を入れなければ,メモリ中の全ての変数の欠損値のリストを返します.この場合,質問デザイン上欠損値としているものもカウントしますので,注意しましょう.

tab3way

変数三つのクロス表を作ります.

tabchi

クロス表で,各セルの期待値を観察値の下に返します.aオプションでadjusted residual(調整残差?)も付けてくれますので,どのセルが非独立に貢献しているのかが一目で分かります.

cutv6

連続変数を自由に区切ってカテゴリー化するためのegenコマンドの関数+オプションです.実際の使い方は(説明するとややこしいので)ヘルプファイルをご覧になってください.

center, zscore

変数を中心化します.たとえば

. sysuse auto, clear
(1978 Automobile Data)

. center price, prefix(c)

とすれば,cpriceという,priceを中心化(値から平均値を引いた)変数を作ります.prefixオプションをつけない場合,自動的にc_が変数名の頭につけられます.standardizeオプションをつければ,標準化された変数(zスコア)を作ります.同じ機能でzscoreというのもあります.prefixはこの場合stub(z_)というふうに付けることができます.

isko

職業分類のユーティリティ.ILOによるISCO(International Classification of Occupations)分類(四桁コード)を他のインデックス(ISEIなど)や分類に変換してくれます.Erikson,GoldthorpeらによるEGP分類への変換などが便利.

iscoというプログラムもありますが,こちらはISCO88には対応していません.iskoを使いましょう.

使用法については,ヘルプをじっと見てください.

推定系 For Estimation

prvalue

回帰分析の後にモデルの期待値を出力するには最初からStataに備わっている「predict」コマンドを使いますが,「prvalue」コマンドでは,説明変数の個々の値に対応するモデル期待値と95%信頼区間を返します.

. u http://www.ats.ucla.edu/stat/stata/notes/hsb2, clear

. quietly reg read write

. predict pread
(option xb assumed; fitted values)

. scatter pread write

. prvalue, x(write=50)
 
regress: Predictions for read

Predicted value of y:  50.43866   95% ci: ( 49.24738, 51.62994)

    write
x=     50

つまりライティングスコア50点の場合のリーディングスコアの期待値は50.44で,95%の確率で49.25点から51.63点である.

reformat

回帰分析の後に,推定結果をより見やすい形にアレンジして返してくれます.特にダミーを使った回帰分析の場合,デフォルトでは結果に「I_variable」のかたちで返されて,どのダミーがどのカテゴリー値を示しているか分かりませんが,reformatを使うとカテゴリー値のラベルを表示してくれます.

. sysuse auto, clear
(1978 Automobile Data)

. xi:reg price i.foreign
i.foreign         _Iforeign_0-1       (naturally coded; _Iforeign_0 omitted)

      Source |       SS       df       MS              Number of obs =      74
-------------+------------------------------           F(  1,    72) =    0.17
       Model |  1507382.66     1  1507382.66           Prob > F      =  0.6802
    Residual |   633558013    72  8799416.85           R-squared     =  0.0024
-------------+------------------------------           Adj R-squared = -0.0115
       Total |   635065396    73  8699525.97           Root MSE      =  2966.4

------------------------------------------------------------------------------
       price |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
 _Iforeign_1 |   312.2587   754.4488     0.41   0.680    -1191.708    1816.225
       _cons |   6072.423    411.363    14.76   0.000     5252.386     6892.46
------------------------------------------------------------------------------

. reformat

REGRESS formatted output

Outcome variable: price (Price), n=74
-----------------------------------------------------------------------------
Covariate                    Coef.  Std. Err.     P>|t|    95% Conf. Interval
-----------------------------------------------------------------------------
Car type                                       
  Domestic*                      0                                           
  Foreign                  312.259    754.449     0.680  (-1.2e+03 to 1816.225)
Constant                  6072.423    411.363    <0.001  (5252.386 to 6892.460)
-----------------------------------------------------------------------------
* Baseline category

他のオプションについてはヘルプファイルを参照してください.

fautil

因子分析を行うときに便利なコマンドを集めたパッケージです.回転後に(デフォルトで)0.3以上の因子負荷量のみ表示してくれるfadisp,斜交回転後に因子間の相関を返すfacorrなど.サンプルログを載せておきます.

. u http://www.ats.ucla.edu/stat/stata/examples/sws5/planets, clear
(Solar system data)

. factor rings logdsun - logdense, ml nolog
(obs=9)
number of factors adjusted to 3

            (maximum likelihood factors; 3 factors retained)
  Factor     Variance       Difference    Proportion    Cumulative
------------------------------------------------------------------
     1        3.81295         1.92230      0.6596         0.6596
     2        1.89065         1.81394      0.3271         0.9867
     3        0.07671               .      0.0133         1.0000

Test:  3 vs. no   factors.  Chi2(  18) =  141.77, Prob > chi2 =  0.0000
Test:  3 vs. more factors.  Chi2(   0) =    2.26, Prob > chi2 =       .
note: Above tests may not apply, see manual.

               Factor Loadings
    Variable |      1          2          3    Uniqueness
-------------+-------------------------------------------
       rings |   0.88934    0.41910    0.18282    0.00000
     logdsun |   0.26048    0.88924    0.04017    0.13979
      lograd |   0.99284    0.11224   -0.04094    0.00000
    logmoons |   0.84310    0.46130    0.01433    0.07619
     logmass |   0.99645   -0.08279    0.01506    0.00000
    logdense |  -0.51450   -0.83187    0.19891    0.00372

. quietly rotate, promax factors(3)

. facorr

Promax Factor Correlations

        1       2       3
1  1.0000
2  0.4695  1.0000
3  0.2719  0.5875  1.0000

. fadisp rings logdsun - logdense

Rotated  Factor Loadings

                 1         2         3
   rings   0.71595         .   0.30884
 logdsun         .   0.86710         .
  lograd   0.95975         .         .
logmoons   0.64038   0.40886         .
 logmass   1.06033         .         .
logdense         .  -0.99707         .

fadispの表示下限を変更したいときは,

. fadisp varnames, blank(.4)

のようにオプション指定します.

xi3

3つ以上のダミー変数のインタラクションを許可するコマンドで,ログリニア分析をする際などに便利なコマンドです.

xi3: logit y i.cate1*i.cate2 ...

のように,いくらでも複雑にログリニアできます.普通は,lrtestや次に紹介するfitstatなどの診断コマンドと組み合わせて最適なモデルを探します.

daoneway

判別分析determinant analysisを行うためのファイルです.

pathreg

Stataでパス解析を行うためのコマンドです.例えば「var1→var2→var3」というモデルで推定したければ,

. pathreg (var2 var1) (var3 var2)

のように打ち込んでください.ただし,なぜか「if」オプションが使えないので,条件に合わないcaseを最初に削除しておく必要があるようです.試しにEQSを使って同じモデルを作ってみたところ,同じパラメータ推定を返しました.

mlboolean

ブール代数分析を行うためのプログラム.

診断系 For Diagnosing

csgof

χ二乗分布を利用した適合度検定のためのコマンド.ある母数を仮定し,そのモデルからの乖離の度合いをχ二乗検定する.

. sysuse auto
(1978 Automobile Data)

. ta foreign

   Car type |      Freq.     Percent        Cum.
------------+-----------------------------------
   Domestic |         52       70.27       70.27
    Foreign |         22       29.73      100.00
------------+-----------------------------------
      Total |         74      100.00

. csgof foreign, exp(50 50)

  +----------------------------------------+
  |  foreign   expperc   expfreq   obsfreq |
  |----------------------------------------|
  | Domestic        50        37        52 |
  |  Foreign        50        37        22 |
  +----------------------------------------+

chisq(1) is 12.16, p = .0005

つまり「国産車と外車の割合は半々である」というモデル(仮説)の適合度は5%水準で,有意ではない.

. csgof foreign, exp(70 30)

  +----------------------------------------+
  |  foreign   expperc   expfreq   obsfreq |
  |----------------------------------------|
  | Domestic        70      51.8        52 |
  |  Foreign        30      22.2        22 |
  +----------------------------------------+

chisq(1) is 0, p = .9595

これに対して「国産車と外車の割合は7:3である」という仮説の適合度は,当然高くなります.

このような場合だとふつうにttest foreign=0.5 (or 0.3)でもいいのでしょうが,値が三つ以上ある場合だとcsgofは便利かもしれません.ただ,たぶん一つの変数の分布しか検定できないので,多変数の場合は(たいてい)線形モデルを作った後でlrtest等をすることになると思います.

collin

LS重回帰モデルの多重共線性multicollinearityの程度を計算します.デフォルトではパラメータ推定後にvifコマンドで見ることができますが,collinの方は固有値や相関係数も返してくれます.モデル全体の決定係数が大きいのに個々の偏回帰係数が有意にならないと思ったら,とりあえずtoleranceが最も小さい変数をモデルから除いてみましょう.

fitstat

モデルの診断コマンドです.デフォルトでlrtestが使えますが,fitstatの方がいろんな情報を返してくれるみたいです.回帰分析の後にオプション抜きで打ち込むと,主効果(と交互作用項)の回帰係数が全部ゼロのモデルと比べたときの値を返します(尤度比検定).このときp値は小さい方が良いです.p値が小さいと,「モデルの説明変数の少なくとも一つは有意である」ということになります.

他方,あるモデル(モデル0とする)の推定のあとに

fitstat, saving(m0)

と打ち込み,さらに別のモデル(モデル1とする)の推定を行い,その後で

fitstat, using(m1)

とすると,モデル0とモデル1のdeviance(尤離度?)の比較検定をします.

例えば,モデル0にシンプルなモデルを持ってきて,モデル1で説明変数を追加してからfitstatをし,尤度比検定のp値が大きければ二つのモデルの説明力にたいした差がないことになり,「余計なことしないでシンプルなモデル(m0)を採用した方がいい」ということになります.ログリニアの場合,飽和モデルsaturated modelとの差を考えなくてはなりませんから,説明変数が多い場合,複雑なモデルからはじめて尤度比検定のp値が大きいモデルを選ぶ,というふうにすると思います.この場合のp値は「飽和モデルと当該モデルの適合度が離れている危険度」ということになります.離れていては拙いので,この場合はp値は大きい方がよい,ということです.

ちなみにオプション抜きで回帰モデルの推定後にlrtestをすると,飽和モデルとの比較(適合度検定)を行います.

ipf

これもログリニア・モデルで使います.

ipf, fit(cate1*cate2+cate2*cate3+cate3*cate1)

のように「+」でつなげて使います.この場合,たとえばカテゴリー変数がx1,x2,x3の三つである場合,x1+x2+x3は「三つの変数が独立」なモデルです.x1とx2のインタラクション項を加えたい場合は,

ipf, fit(x1*x2+x3)

のようにします.ちなみにipfはモデルのフィットの具合を見るためのコマンドなので,何もしないでも適合度検定の数値を返してくれますが,save(ファイル名)というオプションを追加することで,期待値(モデルセルカウント)を加えたデータファイルを別に作ってくれます.ベストのモデルが作れたと思ったら,最後にsaveオプションをやってみて,観察値との一致度を目で確かめてみましょう.

gipf

これは別に適合度を計算するものではないのですが,ログリニア・モデルをStataのグラフィック機能で視覚的に描画してくれるものです.詳しくはヘルプをご覧になってください.

nnest

J検定のためのプログラム.非常に簡単な文法だが、ただしifオプションなどは使えない.(下の例は適当.)

. sysuse auto

. nnest price mpg (weight)

M1 : Y = a + Xb with X = [mpg]
M2 : Y = a + Zg with Z = [weight]

J test for non-nested models

H0 : M1  t(71)       2.72324
H1 : M2  p-val       0.00813

H0 : M2  t(71)       0.57468
H1 : M1  p-val       0.56732

Cox-Pesaran test for non-nested models

H0 : M1  N(0,1)     -3.51752
H1 : M2  p-val       0.00022

H0 : M2  N(0,1)     -0.61988
H1 : M1  p-val       0.26767

その他(ASCIIテクスト,LaTeX形式への変換など)

outreg

回帰分析の後に,結果をASCIIテクストファイル形式の別ファイルに出力する機能.

. reg y x

. outreg x using model1, se nolabel bdec(3) rdec(3) sigsymb(*,**,+) 10pct coefastr ctitle(I);

. reg y x z using model1, se nolabel bdec(3) rdec(3) sigsymb(*,**,+) 10pct coefastr ctitle(I) append;

のように書けば,二つの回帰モデルの結果を並列して____.outというファイルに書き出してくれます(ファイルの在処が不安な場合,やる前にpwdでカレント・ディレクトリを確認しましょう).最後のappendオプションは,すでにあるファイル(ここでは「model1.out」)に追加して書き出しますよ,ということ.replaceオプションをつけると,追加せずに上書きされます.

mktab

「outreg」と同じく,いろんな回帰分析の後に結果をまとめてテクスト形式に出力します.オプションが多すぎて使い方が難しそうなので,興味があればインストールした後にヘルプファイルを参照してください.mkcorrという仲間もいるみたいです.説明は省きます.

sutex

summary」のLaTeX出力.単純ですので普通にやってみてください.

latab

ほぼtabulateコマンドと同じように機能しますが,クロス表をLaTex形式に変換してから返します.(resultウィンドウ内にテクストデータの形で返しますので,そのままエディタにコピペです.)latabstatは,同じことのtabstat版です.例えば次のように打ち込めば,論文でも使いやすいでしょう.

. latabstat price, by(foreign) stat(n mean sd) f(%9.1fc)

outtex

なにげにこれが一番おいしい機能かなあと思います.回帰分析(OLS回帰でもロジットでもポワッソンでもよし)を行った後にこれを打ち込むと,結果をLaTeXのテーブルにしてくれます.levelおよびdetailオプションで,論文に載せるときのようなテーブルが出来上がります.

. sysuse auto
(1978 Automobile Data)

. quietly regress price mpg

. outtex, level detail

のように打ち込み,出力されたものをLaTeXでレンダリングすると,以下のような見栄えになります.(t値がほしいところですが,どうにかしたら出力してくれるのだろうか?)

以上.

私は数式を見ただけでウッと来てしまうよくいる社会学者のひとりで,統計に関してはほとんど素人のようなものですが,周囲にStataユーザが増えるといいこと(使い方を教えてもらえたり)があると思い,このような一覧を作ることにしました.間違い等あれば,お知らせください.