suketani’s diary

個人的メモ用、どこも代表していない

Stataでレゲエを聴く

タイトルがなぞだと思われるかもしれないが、Stataでレゲエを聴けるのだ。


regressionを回しまくって疲れたとき、ふとレゲエを聴きたくなるはずだ。
レゲエじゃないロックなんだという君は今すぐStataを辞めよう。


レゲエを聴きたくなったら次のコマンドを回せばいい:

reggae_music

これを回すと、ランダムにレゲエ音楽を選択して、YouTubeのリンクを吐き出してくれる。
たとえばこんな感じ:

f:id:suketani:20191214133144j:plain


YouTubeリンクがありますね。ここからレゲエを聴くことができる。


なんとこのコードにはオプションもあり、歌手の性別や音楽を聴くプラットフォームを選択できたりする。
たとえば、女性歌手のレゲエをSpotifyで聴きたい場合には:

reggae_music ,  sex(female) platform(spotify)

を回す。他にも歌手の出身国や歌手を指定することなどもできる◎

ヘルプは次のコマンドを回して参照してください:

help  reggae_music


レゲエを聴きたいみなさんは次のコードで是非パッケージをダウンロードしてくだせえ:

ssc install reggae_music

Stataでマージに不等式を用いる

タイトル何言ってるのかよくわからんと思うのだけど案外大事。
これは、少し特殊なmergeコマンド、nearmrgコマンドについて解説します。


次のようなマージ作業をする場合に便利なのです:

あるデータセット (masterとする) のt年m月のデータに対して、別のデータ (usingとする) のt年m月以前の直近のデータをくっつけたいケースを考える。
これはたとえば、企業の財務データのデータセット (master) に、企業のガバナンス機構に関連するデータ (using) をマージすることを考えよう。

企業のガバナンス機構は、次の年の企業行動やパフォーマンスに影響を与えると考えられます。
であるならば、企業の財務データに対して、それ以前の期間で直近のガバナンスデータをくっつける必要があります。


つまり、任意のt年m月の財務データに対して、ガバナンスデータは同じ年のn月、ただしnであるか、
前年度 (t-1) のデータをマージする必要があります。


しかし、通常のmergeコマンド (下記リンク;PDF注意) だと、マッチングさせる変数が一致しているものにデータをくっつけることしかできない。
https://www.stata.com/manuals13/dmerge.pdf


ではなんとか上の作業を簡単にできないだろうか?
あるんですねえ、面倒な作業をやってくれるコマンドが。

それがnearmrgコマンドです。
参考にするリンクはこれです。

まず、設定は上と同様に:
あるデータセット (Aとする) のt年m月のデータに対して、別のデータ (Bとする) のt年m月以前の直近のデータをくっつけたいケースを考えます。
ここで、時間の変数の名前をtime、企業を識別するIDをidとしているとする。なお、timeはSTATAの時間の変数*1として読み込んでることを前提にします。

このときに、time時点の企業idのデータに対して、Bに収録されているtime時点の企業idのデータをくっつけるためには:

nearmrg id using B, nearvar(time)  lower type(1:1)

を回せばよい。


これは、「ファイルAのデータに対して、Bのデータに含まれる企業IDが一致してかつ変数timeがファイルAの値以下で最近傍のデータをマージする」という指令です。


上の例は、直前の期間をマージさせる例であったためtimeの変数について「BのtimeがAの値が小さい場合にマージさせる」ことを支持するためにlowerオプションをつけています。
もしUsingデータセットの値の方が大きくなるようにマージさせたい場合には、lowerオプションをupperに取り合えればよい。つまり:

nearmrg id using B, nearvar(time)  upper type(1:1)


また、マージ・タイプのオプションtype(1:1)は、マージさせる数の対応関係を指定するオプションである。
もしn:1でマージしたい場合には次のようになります:

nearmrg id using B, nearvar(time)  lower type(n:1)


参考リンク:
nearmergeのヘルプ:http://fmwww.bc.edu/RePEc/bocode/n/nearmrg.html



*1:時間変数の読み込みについては suketani.hatenablog.comを参照してください。

Stataの固定効果のコマンド (reghdfe)

Stataで固定効果モデル (fixed effect model) を使用する際には3つのコードの候補がある。
どれを使ってもいいんだけど、実はそれぞれ少しづつ違うのです。

先に結論を述べておくと、reghdfeを使うべきであるということです。
何より便利!速い!
そしてもしかしたら一番重要かもしれないのが、xtregを使ってはいけないということです。

それではそれぞれのコマンドを説明&比較。

まず固定効果モデルを回せるコマンドを列挙しておくと:

xtreg Y X 
areg Y X
reghdfe Y X

の3つがあります。

教科書的には、xtregが固定効果モデルのコマンドということになっています。

tsset id period
xtreg Y X i.period, vce(cl id)

ただ、このコマンドは案外使いにくい。。問題は、①決定係数がbetweenのものしか吐き出してくれない、②固定効果を追加することで減少した自由度を調整せずに標準誤差を計算してしまう (ver 10以降)、③tssetで設定したもの以外の固定効果をモデルに組み込むので計算が遅い、④マルチウェイ・クラスタリング (multi-way clustering) ができない、等々。


一番大きな問題は②で、標準誤差を過小に計算してしまいかねません。また、吐き出す決定係数が凄く小さく見えてしまいます。
なので、分析においてはxtregは使わないことが賢明です。

この①と②の問題を解決してくれるのがaregコマンドだ:

areg Y X  i.period, absorb(id) vce(cl id) 

これはabsorb()内に入れた変数をカテゴリカル変数としてモデルに加えてくれるので、決定係数にはwithinとbetweenの合計が表示されます。
あと、なにより自由度の問題を補正してくれる!!Version 10以降のStataを使ってる人はこっちを使いましょう。
この点はAcemogluも指摘しており、xtregよりもaregを使用することがより望ましいと考えられます。

https://economics.mit.edu/faculty/acemoglu/data/aj2007


しかし、これにもまた問題が。。それは、マルチウェイ・クラスタリングができないという問題です。
昨今の研究の傾向から、シングルクラスタリングだけではレビュアーが納得してくれないかもしれない。。


また、固定効果をたくさん入れたいときにはaregには限界があります。たとえば、企業の固定効果と産業×年度の固定効果の両方を入れたいと考えたとき、
固定効果をコントロールするためのインディケータの数がかなり存在することが予想されます。

コマンドを回す速度を考慮すると、absorbオプションにはより数の多い固定効果を入れることが望ましいですが、
数が多い固定効果が複数存在する場合、結局いずれかはモデルに直接組み込まざるを得ません。これはaregabsorbオプションに加えることが可能なのが、1つの変数のみだからです。
上のコマンドの例では、年度の固定効果をモデルに「i.period」として加えています。


そこで以上全ての問題を解決してくれるのがreghdfeコマンドです。
これはaregを拡張したようなコマンドであり、様々な分析に応用できる極めて便利なコマンドです。


具体的には次のようにコマンドを回します:

reghdfe Y X , absorb(id period) vce(cl id period) 


これがどれほど便利なのかというと、固定効果を交差項にした場合にもabsorbオプションの中で対応可能であるという点です:

reghdfe Y X , absorb(id period industry#period) vce(cl id period) 

こうすることで産業×年度の固定効果を加えることができます。


また、このreghdfeコマンドは極めて一般的なコマンドで、操作変数法を行うこともできます。
操作変数をZ、関心変数をXとすると、次のようなコマンドを回すことで操作変数を用いた分析を行うことができます:

reghdfe Y W (X=Z) , absorb(id period) vce(cl id period) 


長々と書きましたが、つまるところreghdfeが最強ということです。

Stataの時間問題

Stataで企業データ使ってると直面する問題。時間の問題である。

ゆうて年次のデータだけ使っていれば問題ないんだけども、さすがにそろそろ四半期なり半期なりのデータを使えないと論文にならなさそうな予感がする。
あと何より重要なのは株価データですかねえ。時間の扱い方大事なんす。

統計ソフトがありがたいのは時間を勝手に読み込んでくれること。本当に助かります。。
この時間の変数の操作ができるようになるとすこぶる作業が速くなる!

まずここでは得られる時間データが月次のものだとする。たとえば「2018/03」みたいな感じ。
企業のデータ (NEEDSとかCapital IQとかCompustat) を使ってるとたいていの場合は月次だと思われるのでまずここから。

手順は、まずこの月次の時間データを時間のデータとして読み込ませて、それを様々な時間の単位に変換する。
何言ってるのか謎だと思うのでまずコードを。入手できた月次の時間変数を「time」という名前だとすると:

gen 	        time_m = monthly(time,"YM")
gen		time_d = dofm(time_m)

1行目は単なるテキストデータであるtimeの変数を月次のデータとして読み込ませる作業。
2行目はそれを日次のデータに変換する作業。

こうすうと、月次のナンバリングがtime_mとして、日次のナンバリングがtime_dという名前で保存される。
これなんで日次に直すのかというと、月次のナンバリングを四半期や半期のナンバリングに変換したい場合は日次のナンバリングに直しておくと便利なのだ。

たとえば、time_dをベースにして半期や四半期のデータに変換したい場合は:

gen		time_h = hofd(time_d)
gen          time_q = qofd(time_d)

とすると、time_hに半期のナンバリングが、time_qに四半期のナンバリングが返される。

これを応用すると日次データやもっと細かい時間のデータにも応用できるんやで。

Stataで変数名をラベルにする

マージするときに同じ名前だと勝手に上書きされたりと不便だったり。
そこで、ファイルごとに変数名を替えてマージするのがよい。

でも、変数名を替えてしまうと各変数が何だったかわからなくなってしまう。
そこで、ラベルに変数名を移行させて、それぞれの変数の中身が何だったかを把握できるようにしておいた方がいい。

 foreach v of varlist _all {
	label var `v' "`v'"
	}

foreach以下でそれぞれの変数について、ラベルを変数名に変える作業をループさせる。
ラベルの名前を変えるところでは、ローカルで各変数をvで置き換えるので、「vのラベルを"v"にする」と指定している。
これで各変数のラベルに変数名が入るようになる。

日本版恐怖指数(VIX)について

日本版の恐怖指数の候補を2つ見つけたんだがどっちが優れているというか、使うに足るものなのか考えねばなと思っていまする。

ひとつが日経平均ボラティリティー・インデックス (NVI):
indexes.nikkei.co.jp

もうひとつが大阪大学のVXJ:
www-mmds.sigmath.es.osaka-u.ac.jp

それぞれの説明書をまとめて内容を考えていく会を何回か続けようと思います。
オプションの勉強もしなくてはなのだろうか、、

NVI説明:https://indexes.nikkei.co.jp/nkave/archives/file/nikkei_stock_average_volatility_index_guidebook_jp.pdf
VXJ説明:https://www.jpx.co.jp/derivatives/futures-options-report/archives/tvdivq0000002b6s-att/rerk1006.pdf

前澤効果:1億円バラマキ企画はZOZOの株価に影響を与えたのか(検証編)

前回の調査編に引き続き、前澤社長1億円バラマキ企画の影響について。

ツイートされてから日が浅かったこともあり、データが揃っていなかったためざっくりとした分析しかできなかったが、
今回はより長い期間の株価データと取引データを取得して、より詳細に分析していきたい。

はじめに結論は以下の2点:

  1. 月旅行ツイートと1億円ツイートの後、ZOZO株式に正のリターンが観察される
  2. 両ツイートは、ZOZO株式の流動性を改善している



予備知識として、ZOZOの時価総額について。全く関心がなかったので勝手に絶好調企業だと思っていたが、ここ半年はかなり苦境に直面しているようだ:

f:id:suketani:20190121070139j:plain
ZOZOの時価総額

これは、ZOZOの株式時価総額をプロットしたものである。Y軸は億円で表示している。
2018年7月末から直近の2019年1月18日にかけて、時価総額が1.41兆円から0.69兆円に半分以下になっている (48.5%)。
前澤氏の株式保有比率は41.16%なので、単純計算で3,005億円の個人資産を失ったことになる。なんと、、規模が違いすぎるお話。

分析

さて、件のツイートである。前澤氏はいったい何を目的にあのツイートをしたと考えられるのか、また本人が意図していなかったとしても、どのような経路から株価に影響を与えているのだろうか。
ここでは、月旅行のツイートと1億円ツイートの両方を分析対象として、その影響を分析する。

仮説

直観的な議論で申し訳ないけど、前澤ツイートの決定要因を説明できる仮説は3つかなと。参考にしたのはLys, Naughton, and Wang (2015)である。

H1: 単に寄付

まずは特に株価への影響を考えていない場合。単に個人的な寄付だ、という仮説。市場がこのように解釈していれば、ツイートに対して特にないも反応していないはず。

H2: 投資・コマーシャルのつもり

これは、将来のキャッシュ・フローや売り上げを上げる効果のこと。あのツイートでZOZOを利用する人が増えて、将来の利益が増えるという経路。もしこれに成功していれば、株価は上向くはず。

H3: 投資家へのプロモーション

つづいて、ZOZOの投資家に対するプロモーションである。ツイートが話題に上がり投資家から注目されることで、株式の流動性を高める効果を期待しているのかもしれない。
もしこの効果が表れているならば、株式の流動性が改善しているはずである。

H4: 情報を伝えたい

最後に、何らかの情報を伝える目的であるという仮説である。ツイッター上での注目度が高まると、評判を高めることでレピュテーション・インシュランス (Peloza 2006) として機能したり、
訴訟リスクが低いことのシグナルになったりする可能性がある。これが正しいとすると、H2と同じ結果になると考えられる。

どの仮説が今回の減少を説明できるかを検証するために、それぞれのツイートの株価と株式の流動性への影響を分析する。

データ

以下の分析は基本的な統計量のみを用いた分析に過ぎないので、本気でやるならきちんと比較対象を設定して検証しましょうね。
あくまで初歩的な分析からわかることを論っていくだけなので、あくまでご参考までに。

株式の異常リターンはCAPMで、株式の流動性はAmihud (2002) の非流動性指標を用いる。
 ret_i = \alpha + \beta (ret_{mkt} - ret_{free}) + \varepsilon
 illiq = \frac{10^{4}}{\# days} * \frac{|ret_i|}{volume}

流動性指標については小数点を調整するために、10の6乗ではなく4乗を用いている。

f:id:suketani:20190121014228j:plain
ZOZOの異常リターンと流動性

このグラフは、2018年7月30日からの累計異常リターンとAmihudの非流動性指標の10日間の移動平均をプロットしている。青がCARであり、赤が非流動性指標である。
左軸がCARを、右軸が非流動性指標の数値を示している。

まず異常リターンを見ると、ツイート自体にはそこまで大きな影響がないように見える。細かく見るために、ツイート後の取引日をtとした場合の異常リターンをプロットすると以下のようになる:

f:id:suketani:20190121074832j:plain
イベントスタディ


t日には異常リターンが1%を超えている。これは十分に経済的に重要な影響である。それぞれのツイートは、ZOZOの株式に正の影響を与えていた。H1と整合しない結果である。

対して、非流動性指標はツイートに反応して低下しているように見える。なお、プロットしている期間に決算発表を除く主たるプレスリリースはなかった。
これは、H3と整合する結果である。

暫定的な結論・感想

月旅行と1億円キャンペーンのツイートは、株価に正の影響を与えていた。また、株式の流動性を改善していた。
これは、投資家に対するプロモーションと最も整合する結果ではあるが、PRやシグナリングといった結果を棄却できてはいない。
少なくとも、単にチャリティとして企業価値と関係がない、というわけではないことがわかった。

とかく今回のデータをみてびっくりしたのは、ZOZOの状態が悪すぎること。株価は低いし、流動性は悪化しているし。前澤氏は思った以上に苦境に直面しているようだ。

同様の事例を多く集めて、統計的手法を用いることが望ましいがなかなかむつかしい。。。

参考文献

Amihud, Y. (2002). Illiquidity and stock returns: cross-section and time-series effects. Journal of financial markets, 5(1), 31-56.
Lys, T., Naughton, J. P., & Wang, C. (2015). Signaling through corporate accountability reporting. Journal of Accounting and Economics, 60(1), 56-72.
Peloza, J. (2006). Using corporate social responsibility as insurance for financial performance. California Management Review, 48(2), 52-72.