HOME > Stata

Stata

よく使う関数 (Stata)

※Stata起動後,help 関数名で詳細を知ることができます.

一般的な関数

cd ディレクトリを変更.
dir ディレクトリの一覧表示.lsと同じ.
ls ディレクトリの一覧表示.dirと同じ.

繰り返し文

forvalues 指定した値の範囲でループを行う.
foreach 変数に関してループを行う.

統計

centile パーセンタイル値を計算.
rnormal() 正規分布から乱数発生.
runiform() 一様分布から乱数発生.

行列

matrix list 行列を表示.
svmat 行列のデータをStataのデータセットに格納する.

(Uploaded: 2011年02月22日, Last Updated: 2017年03月25日)  ページ上部へ移動

よく使う関数 (Mata)

行列

rows() 行数を数える.
cols() 列数を数える.

演算子

: 要素ごとの計算用の演算子.例えば,":*"なら要素ごとの掛け算.

擬似乱数発生器

rseed() 乱数発生のseedを設定する.
runiform(r,c) IID一様分布(0,1)から乱数発生させたr行c列の行列を作成する.
rbeta(r,c,a,b) IIDベータ分布(a,b)から乱数発生させたr行c列の行列を作成する.
rnormal(r,c,m,s) IID正規分布(m,s)から乱数発生させたr行c列の行列を作成する.
rgamma(r,c,a,b) IIDガンマ分布(a,b)から乱数発生させたr行c列の行列を作成する.

(Uploaded: 2011年02月22日, Last Updated: 2013年07月31日)  ページ上部へ移動

StataでGIS

地図に色塗り

Stataで地図上に色を塗り分けることができます.使用するadoファイルは以下の2つです.

  • spmap
  • shp2dta

以下のサイトを参考にしました.
Guide to creating maps with Stata - International Education Statistics

試しに日本の都道府県で地図を作成してみました.画像をクリックすると拡大します.

 可住地面積1km2当たり人口密度

可住地面積1km^2当たり人口密度

データ出所:統計でみる都道府県のすがた 2011

以下のように,プログラムを実行しています.

** データ変換
shp2dta using "JPN_adm1", data(japan_pref-d) coor(japan_pref-c) genid(id) genc(cntrd) replace

** 地図表示
spmap SP using "nat-d.dta", id(id)

spmapのオプション

spmapのオプションについて例を挙げています.

clmethod() 分類方法(quantile, boxplot, eqint, stdev, kmeans, custom, unique).
clnumber() 分類の数を指定.
ndlabel() 欠損値に対するラベル.デフォルトは"No data".
fcolor() 塗りつぶしの色を指定.

(Uploaded: 2010年09月19日, Last Updated: 2011年03月11日)  ページ上部へ移動

Tips集

Resultsウィンドウの日本語文字化け

Stata 13ではResultsウィンドウで日本語が文字化けして表示されます.これはデフォルトではフォント表示にBold体が指定されていることが原因です.右クリックしたのち,Preferencesを開き,Color schemeより"Custom 1"を選択したあとBold体のチェックを外すことで日本語が表示されます.文字の区別したい場合はBold体ではなく色指定で行います.

欠損値の扱い

Stataでは欠損値が "."(ドット)で表されています.しかし,これはコンピュータ上では無限大として扱われているので注意が必要です.例えば,if文で1より大きいという条件を加えると,欠損値まで含まれてしまうので注意が必要です.

オペレータ

データを時系列にセットすると,特殊なオペレータが使えるようになります.

D. 1階の階差をとる.
L. 1期前の値をとる.
F. 1期後の値をとる.
S. 季節の階差の値をとる.

その他,普通のデータセットでも使えるオペレータがあります.

b. カテゴリー変数をダミー変数として扱う.bの後に数字を指定すれば基準を任意に変更できる.
i. カテゴリー変数をダミー変数として扱う.
c. 連続変数の場合に指定する.交差項を作るときは連続変数の前にcをつける.
o. ドロップしたい変数につける.
# 交差項を作るときに使用する.
## 階乗の交差項を作るときに使用する.

2乗項や交差項の変数を作成してデータセットとして保存しなくても,上記のオペレータを使えば一時的に変数を作成できます.詳細はhelp fvvarlistで調べてください.

reg lnw educ age c.age#c.age

reg lnw educ c.age##c.age

データチェック用の関数

count
list
summarize オプションdetailで詳細表示.
describe
codebook
compare
tabulate
table
tabstat

データチェック用の関数(拡張)

sumの後はその結果が格納されます.

return list

sum var1, detail
scalar mean_var1 = r(mean)
scalar median_var1 = r(p50)
display mean_var1
display median_var1

データファイル結合の関数

append
merge

文字列を数字に一括変換

数字のデータにも関わらず,文字列として扱われてしまっているときに変換をします.

destring, replace

Stataの結果の表をエクセルに出力する

表をエクセルに出力したいときがあります.ここではtaboutという関数を用います.csv形式で出力してエクセルで読み込みます.

インストールします.

ssc install tabout

例です.

tabout varname using "filename.csv", c(row) f(4) style(csv)

Stataの結果の表をエクセルに出力する

相関係数行列をExcelに出力する.

Stataの結果の一覧

return list

ereturn list

リンク
Exporting Stata Results to MS Office

(Uploaded: 2010年09月19日, Last Updated: 2016年01月20日)  ページ上部へ移動

乱数発生によるデータセット作成

擬似乱数の発生によりデータセットを作ることが可能です.コマンドの練習などに最適です.

** Generate Data
set seed 100
set obs 100
matrix beta = (2 \ 1)
gen double x1 = 3*rnormal()
gen double x2 = 10*runiform()
gen double u = rnormal()
gen double y = 1 + beta[1,1]*x1 + beta[2,1]*x2 + u

** Regress y on x1 and x2
reg y x1 x2

** Scatter Plot y and x1
scatter y x1

  • set seedは乱数発生のseedを設定.seedを設定することで同じ乱数を毎回発生させることができます.
  • set obsは観測数の指定.
  • matrixで回帰分析のパラメータを指定.matrix list betaで行列の表示.
  • gen doubleで倍精度の変数を作成.
  • Stataではいくつかの乱数発生の関数が用意されています.rnormal()が標準正規分布,runiform()が一様分布の擬似乱数発生の関数.helpでその他の乱数発生器も確認できます.
  • 後は発生させたデータで回帰分析,図の描画などいろいろできます.初めて使うコマンドの操作を確認するには便利だと思います.

(Uploaded: 2010年09月19日, Last Updated: 2011年03月11日)  ページ上部へ移動

二重引用符を検索・置換

Stataの文字列内に二重引用符が含まれていると,コマンド側の文字列指定の二重引用符とかぶってしまい検索・置換ができません.例えば,以下のような文字列データを考えます.

var1
A11 "ABC"
A11 "DEF"
A12 "ABCDE"
A12 "DEFGH"

この二重引用符をそのまま文字列として扱うとエラーがでてしまいます.以下のコマンドでは二重引用符を置換によって削除しようとしています.

replace var1 = subinstr(var1, """, "", .)

二重引用符で挟まれた二重引用符として解釈してほしいのですが,Stata側は最初の2つの二重引用符として解釈していると思われます.そこで以下のコマンドに書き換えます.

replace var1 = subinstr(var1, char(34), "", .)

もしくは以下のように表わします.

replace var1 = subinstr(var1, "`=char(34)'", "", .)

このときのポイントはアスキーコードを用いてchar(34)として表わしているところです.

(Uploaded: 2013年08月26日, Last Updated: 2013年08月26日)  ページ上部へ移動

正規表現で検索

tab var if regexm(var, "")

(Uploaded: 2011年06月09日, Last Updated: 2012年05月13日)  ページ上部へ移動

非線形最小二乗法

Ox - 非線形最小二乗法 (Levenberg-Marquardt Methods)で紹介したものと同じデータで非線形最小二乗法の推定を行います.Octave - 非線形最小二乗法でも扱っています.

Stataを用いる一つのメリットとしては,自身で作成したプログラムと市販のパッケージソフトの結果を互いに確認をすることで結果の信頼性が高くなること,だと思います.そして,何よりもそのような作業を通すことで自分自身の理解度が深まると思います.

Stataではnl関数で非線形最小二乗法の推定が行えます.

今回の関数形の場合,以下のようにタイプすると推定結果が得られます.

nl( vy = {vp1} + (1/{vp2})*log( {vp3}*(vx1^{vp2}) + (1-{vp3})*(vx2^{vp2}) ) ), initial( vp1 1 vp2 0.1 vp3 0.1 ) eps(1e-12)

プログラムの実行結果は以下のリンクのテキストファイルから閲覧できます.

得られた結果は,Oxで得られた結果とほぼ同じになっています.有料である分,Stataの内部はブラックボックスになっていますが,信頼性の高い結果を出してくれる優れたパッケージだと思います.

結果の復元用の補足です.データファイルと同じディレクトリにdoファイルを保存します.あとはdata.dtaを開いて,do nlsとタイプすれば結果が得られます.

【作成したStataのプログラム】: nls.do
【使用したデータ】: data.dta
【プログラムの実行結果】: output_nls.txt

(Uploaded: 2011年02月22日, Last Updated: 2011年10月24日)  ページ上部へ移動

パネルデータ

データの変換を行います.

reshape long 変数名, i(個体に関する変数) j(時間に関する変数)

例えば,変数名がwage2000, wage2001等であれば,wageと変数名のところにタイプします.あとは「時間に関する変数」の名前で自動的に変数を作って個体毎に時間に関して連続に揃えてくれます.

パネルデータとしてStataに認識させる場合は以下のコマンドをタイプします.

xtset id year, yearly

オペレータの拡張ができるようになり,操作が便利になります.一方で,オペレータによる操作を行うと,サンプルサイズが大きい場合,非線形の場合等において,計算速度が非常に遅くなります.

(Uploaded: 2011年03月08日, Last Updated: 2011年04月01日)  ページ上部へ移動

記述統計表の作成

記述統計表を作成する時,statsmatが便利.

ssc install statsmat ssc install outtable

statsmat varnames,

(Uploaded: 2012年04月23日, Last Updated: 2012年04月23日)  ページ上部へ移動

ダミー変数の作成

ダミー変数の作成は以下のコマンドで簡単にできます.

tab グループ名, gen(ダミー変数名)

たくさんのカテゴリがある場合には便利です.

(Uploaded: 2011年03月08日, Last Updated: 2011年03月08日)  ページ上部へ移動

共分散行列の表示

推定後に共分散行列Var(β)を知りたいときは以下のコマンドで表示してくれます.

matrix list e(V)

(Uploaded: 2011年03月08日, Last Updated: 2011年03月08日)  ページ上部へ移動

グラフの表示

グラフの表示

hist var1, name(hist1)
hist var1, name(hist2)
graph combine hist1 hist2

graph dir

graph drop _all

window manage close graph

(Uploaded: 2011年03月08日, Last Updated: 2011年03月08日)  ページ上部へ移動

Mata入門

Mataとは,Stataに付属されている行列言語です.StataとMataを相互に使って柔軟なプログラムを書くことができるようになっています.ここでは簡単にコマンドのレビューをしておきます.詳細はStata付属のMataのマニュアルを参照してください.

Mataの起動・終了

Mataを起動するには,以下のように,Stata上でmataと入力します.

mata

Mataを終了する時は,以下のように,endと入力すればStataに戻ります.

end

基本的な操作

変数にスカラー・行列を格納する.

mx = (1, 2 \ 3, 4 )
my = (5, 6 \ 7, 8 )

行列の足し算.

mx + my

行列の掛け算.

mx * my

逆行列の計算.

luinv(mx)

行列の要素へのアクセス.角括弧を使います.

mx[1,1] + my[2,1]
mx[1,.] + my[2,.]

Hadamard積の計算.

mx :* my

Kronecker積の計算

mx # my

ループ演算

for文による繰り返し計算.

for(i=0; i<5; ++i){
  printf("i=%g\n", i)
}

行列mxより第一列の要素にアクセス.

mx = (1, 2 \ 3, 4 )
cn = rows(mx)
for(i=0; i<cn; ++i){
  mx[1+i,1]
}

条件文

if文を使った条件分岐.

for(i=1; i<5; ++i){
   if(mod(i,2)==1){
     printf(i=%g: Odd Number\n", i)
   } else {
     printf("i=%g: Even Number\n", i)
   }
}

関数

簡単な関数の構造.スカラーa,bの和を返す関数.

real scalar add(a,b){
  return(a+b)
}

(Uploaded: 2011年02月22日, Last Updated: 2013年07月31日)  ページ上部へ移動

Mata中級

作成中

(Uploaded: 2013年07月31日, Last Updated: 2013年07月31日)  ページ上部へ移動

  • 松浦寿幸 (2015) 『Stataによるデータ分析入門』,東京図書,東京.<LINK>
  • Baum, Christopher F. (2006) An Introduction to Modern Econometrics using Stata, College Station, Tex: Stata Press.

最近は日本語の解説本も増えてきました.松浦 (2015)は非常に丁寧な説明で分かりやすいと思います.Baum (2006)も入門としては網羅的にトピックを扱っていてわかりやすかったと思います.

(Uploaded: 2011年02月22日, Last Updated: 2017年03月24日)  ページ上部へ移動