プログラミング関連の新機能
- プログラミングにおける一大ニュースは因子変数を含む varlist
の構文解析と、行/列名に因子変数を含む行列の処理に関係したものです。
- varlist の記述中に新たな指定子 fv
が含まれている場合には、syntax に対する varlist 中に因子変数を含めることができます。
syntax varlist(fv) [if] [in] [, Detail]
同様にオプションの指定子中に fv が含まれている場合には、varlist オプション中に因子変数を含めることが可能になります。syntax varlist(fv) [if] [in] [, Detail] EQ(varlist fv)
- 結果として生成される ‘varlist’
マクロを因子変数を許容する任意の Stata コマンドに対する varlist として使用することができます。
- 因子 varlist には一般と特定の2タイプがあります。一般的な因子 varlist の例は mpg i.foreign のようなものです。これに対し特定タイプは
mpg i(0 1)b0.foreign
のようなものとなります。特定因子 varlist はある与えられた問題、すなわち与えられたデータセットとサブサンプルに固有のものです。特定 varlist は因子変数の取る値とベースを規定します。
ユーザは特定因子 varlist も指定できますが、通常は一般因子 varlist を指定します。プログラムを処理する過程で一般因子 varlist は特定タイプに変換されます。これは通常自動的に行われます。
既存のコマンド _rmcoll, _rmdcoll は一般/特定因子 varlist を受付け、特定 varlist を r(varlist) 中に応答として返します。既存のコマンド ml は一般/特定因子 varlist を受付け、特定 varlist をそれが生成するベクトルや行列の行名、列名中に返します。これは Mata の新関数 moptimize() についても言えます。
同様に、因子変数を許容するすべての Stata 推定コマンドは e(b) と e(V) の行名、列名中に特定 varlist を出力します。
因子 varlist mpg i(0 1)b0.foreign は特定型です。これは mpg i0b.foreign i1.foreign と書くこともできるわけで、これも特定型となります。前者は特定型で未展開のものですが、後者は特定型で展開済みのものと言えます。新コマンド fvexpand は一般/特定(展開/未展開)因子 varlist を受取り、すべて展開された特定 varlist を応答として返します。
新コマンド fvunab は一般/特定因子 varlist を受取り、変数名の省略系を排除した形で同一形式の応答を返します。
- 行列の行名や列名に因子変数が使えるようになりました。行名や列名にはフルに展開された特定因子 varlist からの要素が含まれます。フルに展開された特定因子 varlist は因子 varlist であるため、行名や列名の内容は他の Stata コマンドに対する varlist として使用できます。一方、行名や列名の数式部分の最大長は従来の32から127に拡張されました。
- 共線性により削除される変数の取扱いが変更されました。従来、そのような変数は regress の場合を除き e(b) と e(V) からドロップされていました。regress の場合には変数はドロップされず、e(b) の対応する要素、及び e(V) の対応する行と列が 0 にセットされました。現在では因子変数を許容する Stata の推定コマンドはすべて regress と同一方式に改められました。
なぜ変数がドロップされたかを知りたい場合には、行名や列名の対応する要素によって確認できます。展開型の特定 varlist には o と b という演算子が許容されます。演算子 o はユーザ指定か共線性によって省略されたことを示しています。b はベースカテゴリであるために省略されたことを示しています。例えば o.mpg は mpg が省略されたことを表しますが、i0b.foreign は foreign==0 がベースカテゴリであるが故に省略されたことを示しています。いずれにせよ、e(b) の対応する要素と e(V) の対応する行と列は 0 となります。省略された(ドロップされた)変数の取扱いの変更に伴い、既存のユーザプログラムの実行が支障を来すことが考えられます。特に regress に対応できていない推定事後機能コマンドがこれに該当します。しかし推定に先立ちバージョンを10以前にセットすれば、推定結果は旧来通り保存されるので、これらの推定事後機能コマンドも正常に動作させることができます。
. version 10 . estimation_command ... . old_postestimation_command ... . version 11 この形で動作させる場合には、推定コマンドに対して因子変数を用いることはできません。
-
省略された変数も今や推定結果の一部となるため、推定法の実装において制約はより大きな役割を果すことになります。省略された変数は 0
に制約された係数を持つことになります。ml
はそのような制約を自動的に扱い、制約(ベースとして使用されたか、空だったか、または省略されたか)の数を
e(k\_autoCns) 中にポストします。makecns も同様に制約数を r(k_autoCns) に、使用された制約を
r(clist) 中にポストします。制約の行列は ereturn post によってポストされ、e(Cns)
中に格納されます。ereturn matrix では制約のポストは行えません。
- 因子変数を操作する上で有用なコマンドが他にもありますが、それらを参照するには help undocumented と入力してください。
- varlist の記述中に新たな指定子 fv
が含まれている場合には、syntax に対する varlist 中に因子変数を含めることができます。
- 因子変数によって最大8元までの交互作用が表現できます。
- 交互作用 a#b
について考えます。それぞれが2レベルの値を取るとすると、未展開の特定 varlist は i(1 2)b1.a#i(1
2)b1.b のようになります。これに対し展開型の特定 varlist は 1b.a#1b.b 1b.a#2.b
2.a#1b.b 2.a#2.b のようになります。
- x が連続変数である場合の交互作用 c.x#c.x について考えます。未展開の特定 varlist、展開型の特定 varlist はいずれも一般 varlist と同一の c.x#c.x となります。
- 交互作用 a#c.x について考えます。未展開の特定 varlist は i(1 2).a#c.x のように、展開型の特定 varlist は 1.a#c.x 2.a#c.x のようになります。
- これらの varlist はすべて上記 1) で述べたような因子変数に対すると同様の形で扱われます。
- 交互作用 a#b
について考えます。それぞれが2レベルの値を取るとすると、未展開の特定 varlist は i(1 2)b1.a#i(1
2)b1.b のようになります。これに対し展開型の特定 varlist は 1b.a#1b.b 1b.a#2.b
2.a#1b.b 2.a#2.b のようになります。
- 新コマンド fvrevar は因子変数、交互作用、時系列演算子付き変数に対して、それらと等価で一時的な変数を生成します。これによって旧来のコマンドが因子変数を扱えるようになります。fvrevar は tsrevar を一般化したものと考えることができます。
-
因子変数により多くの追加情報が e() や r()
に格納されるようになります:
- e(V) に情報をポストする推定コマンドは対応する行列のランクをスカラー
e(rank) 中にポストします。
- 制約を許容する推定コマンドは制約行列を行列 e(Cns) 中にポストします。
- 制約を許容する多くの推定コマンド、及びプログラミングコマンド makecns において、ベース、空、省略された制約の数の合計値を含むスカラー
e(k_autoCns) がポストされます。
- プログラミングコマンド makecns は使用された制約をマクロ r(rclist) に保存します。
- 因子変数を許容する推定コマンドは、fvset design asbalanced された e(b) に参画した各因子変数の名前をマクロ e(asbalanced) 中に、fvset design asobserved された e(b) に参画した各因子変数の名前をマクロ e(asobserved) 中にポストします。
- 推定コマンドは、新コマンド
margins が予測統計量をどう扱うべきかに関する情報をマクロ中にポストします。該当するマクロは e(marginsok), e(marginsnotok), e(marginsprop) です。
e(marginsok) は許容される予測変数のうち margins の通常のルールに違反するようなもの(例えば計算中に含まれる従属変数)の名前を規定します。
e(marginsnotok) は margins が前提に違反すると特定できないが、実際には違反し許容されるべきではない統計量を表します。
e(emarginsprop) は統計量をどう扱うべきかに関する特別なシグナルを提供します。現状で許容されるのは addcons, noeb, nochainrule の組合せです。addcons はたとえユーザが推定時に noconstant を指定しなかったとしても、推定された方程式中に定数項が存在しないことを意味します。noeb は推定法が共変量名を e(b) の名称ストライプ上に格納しなかったことを意味します。nochainrule は導関数の計算に際して連鎖律を使用してはならないことを示します。
- モデルベースのVCEである行列 e(V_modelbased) は、bootstrap と jackknife によるロバストな分散推定を許容するほとんどの推定コマンドによってポストされます。
- 既存のコマンド sktest は観測データ数に関する行列を r(N) に、検定結果の行列を r(Utest) に応答します。
- e(V) に情報をポストする推定コマンドは対応する行列のランクをスカラー
e(rank) 中にポストします。
- 既存のコマンド estimates describe using は .ster ファイル中に保存された推定結果の数をスカラー r(nestresults) 中に保存します。
- 既存のコマンド correlate は相関または共分散行列を行列 r(C) 中に保存します。
- 既存のコマンド ml は書き換えられました。それは Mata の新関数と最適化エンジン moptimize() を使って実装されています。新たな ml は自動/暗黙の制約を扱え、追加情報を e() 中にポストし、ado のみならず Mata で記述された評価プログラムもサポートします。
- 既存のコマンド estimates save にはオプション append が加わり、同一ファイル上に複数の推定結果を格納できるようになりました。
- 既存のコマンド ereturn post と ereturn repost は logit, mlogit, ologit, oprobit, probit, qreg, _qreg, regress, stcox, tobit を含むより多くのコマンドと連動できるようになりました。また ereturn post と ereturn repost では重みの指定ができるようになりましたが、それらは e(wtype), e(wexp) 中に格納されます。
- 既存のコマンド markout にはオプション sysmissok が追加され、欠損値 (.) に等しく欠損値 (.a, .b, ..., .z) には等しくない変数値を持った観測データを除去できるようになりました。これは欠損値の代入機能に関係したものです。
- 新コマンド varabbrev, unabbrev によって変数名の短縮を許可するかどうかを一時的にリセットすることができるようになりました。
- 新プログラミング関数 smallestdouble() は 0 よりも大きな最小の倍精度実数を応答します。
-
creturn の応答値が追加されました:
- c(noisily) は出力が抑止されている場合には 0
を、そうでない場合には 1 を応答します。これによって出力を表示するという目的だけのコードを実行せずに済みます。
- c(smallestdouble) は 0 よりも大きな最小の倍精度実数を応答します。
- c(tmpdir) は Stata で使用されている一時的ディレクトリ情報を応答します。
- c(eqlen) は方程式名として許容される最大長を応答します。
- c(noisily) は出力が抑止されている場合には 0
を、そうでない場合には 1 を応答します。これによって出力を表示するという目的だけのコードを実行せずに済みます。
- 既存の拡張マクロ関数 :dir にオプション respectcase が加わりました。これによってファイル名のマッチングを行うに際して大文字、小文字の区別が行われるようになります。本オプションは Windows 専用です。
- 新文字列関数 strtoname(), soundex(), soundex_nara() がサポートされました。
- 17の数値計算用関数 sinh(), cosh(), asinh(), acosh(); hypergeometric(), hypergeometricp(); nbinomial(), nbinomialp(), nbinomialtail(); invnbinomial(), invnbinomialtail(); poisson(), poissonp(), poissontail(); invpoisson(), invpoissontail(); binomialp() がサポートされました。
- 9個の乱数発生関数 rbeta(), rbinomial(), rchi2(), rgamma(), rhypergeometric(), rnbinomial(), rnormal(), rpoisson(), rt() がサポートされました。また旧来の uniform() は runiform() にリネームされました。これによってすべての乱数発生関数は r で始まることになります。
- 既存の関数 clear に clear matrix という構文が追加されました。これはすべての Stata 行列をクリアします。Mata 行列、関数のクリアには clear mata が用意されています。
- 最近、エンドユーザ用のコマンドが他のエンドユーザ用コマンドからサブルーチンとして使用されることが増えてきました。これらのコマンドの中には、何かおかしくなった場合やユーザが break を押したときに対処するために、データを保存する機能を持ったものがあります。これらのコマンドがサブルーチンとして使用された場合、呼出し元が既にデータを保存済みといった事態が生じます。コマンドをサブルーチンとして使用する場合には実行時間短縮のため、オプション nopreserve の指定がプログラマに要求されます。