1

rollingローリングリグレッションを回避して手動でコーディングする必要がありますか?または、エントリが重複している巨大なパネルを作成して使用する方がよいstatsbyでしょうか?つまり、各ウィンドウに独自のbyエントリを指定します。RIでは、データを日付フレームのリストに事前に分割できます。これにより、後続の操作が高速化されると思います。

1か月前に最初にRからStataに切り替えたとき、Statalistでこれを尋ねたところ、長い時間がかかるはずだというコンセンサスが得られました。MataでOLSをコーディングおよびコンパイルしましたが、速度の向上は見られませんでした(実際にはわずかに悪化しています)。

これはローリング回帰が一般的な手法であり、Stataはかなり洗練されているようです。ほとんどの研究者はこれらの回帰を1日以上実行していますか?それとも、これらの計算にSASを使用していますか?たとえば、1975年から2010年までのCompustatデータベースで次のように実行します(約30,000回の回帰)。これには約12時間かかります。

rolling arbrisk = (e(rss) / e(N)), window(48) stepsize(12) ///
         saving(arbrisk, replace) nodots: regress r1 ewretd
4

3 に答える 3

3

スタタリストの人たちは、これには長い時間がかかるはずだと言っているのは正しいと思います。重要な数の観測値に対して30000回の回帰を実行しています。

Stataがどこで時間を費やしているかを知りたい場合は、profilerコマンドを使用できます。

profiler clear
profiler on
rolling arbrisk = (e(rss) / e(N)), window(48) stepsize(12) ///
     saving(arbrisk, replace) nodots: regress r1 ewretd
profiler off
profiler report

巨大なパネルを作ることが役立つのだろうか。メモリの問題が発生する可能性があります。パネルの大きさと必要なメモリ量を事前に確認する必要があります。

http://www.stata.com/support/faqs/data/howbig.html

自己コード化されたOLSルーチンを使用してもパフォーマンスが向上しないことは驚きではありません。このregressコマンドはいわゆる組み込みコマンドであり、すでにかなり効率的です。うまくやるのは難しいでしょう。

SASに関する限り、SASでいくつかのリグレッションを実行し、所要時間を確認します。Stataでも同じようにします。私の経験では、StataはSASregressよりも少し高速です。proc reg

于 2011-10-12T07:22:12.523 に答える
2

rollingで使用するよりも、合計で「手動で」回帰する方が実際にはるかに高速regressです。以下のコードは、の場合よりも約400倍高速に実行rollingされregressます。もちろん、rollingより拡張性がありますが、ベータ、アルファ、R ^ 2、およびシグマ^ 2のみが必要な場合は、これでうまくいきます。

program rolling_beta
    version 11.2
    syntax varlist(numeric), window(real)

    * get dependent and indpendent vars from varlist
    tempvar x y x2 y2 xy xs ys xys x2s y2s covxy varx vary
    tokenize "`varlist'"
    generate `y' = `1' 
    generate `x' = `2' 
    local w = `window' 

    * generate products
    generate `xy' = `x'*`y'
    generate `x2' = `x'*`x'
    generate `y2' = `y'*`y'

    * generate cumulative sums
    generate `xs' = sum(`x')
    generate `ys' = sum(`y')
    generate `xys' = sum(`xy')
    generate `x2s' = sum(`x2')
    generate `y2s' = sum(`y2')

    * generate variances and covariances
    generate `covxy' = (s`w'.`xys' - s`w'.`xs'*s`w'.`ys'/`w')/`w'
    generate `varx' = (s`w'.`x2s' - s`w'.`xs'*s`w'.`xs'/`w')/`w'
    generate `vary' = (s`w'.`y2s' - s`w'.`ys'*s`w'.`ys'/`w')/`w'

    * generate alpha, beta, r2, s2
    generate beta = `covxy'/`varx'
    generate alpha = (s`w'.`ys' - beta*s`w'.`xs')/`w'
    generate r2 = `covxy'*`covxy'/`varx'/`vary'
    generate s2 = `vary'*`w'*(1 - r2)/(`w' - 2)

end
于 2011-10-15T22:12:44.540 に答える
0

asreg コミュニティが提供するコマンドは、それを非常に迅速に実行し、面白くもありません。通常のループコードを36数時間実行した後、同じことがasreg数分以内に実行されました5

明らかに、回帰ごとのほとんどの時間は、回帰を実行する観測値のサブセットを選択するために浪費されます。つまりo(N)Nデータセット内の観測値の総数です。asregマタでその混乱を実装しているようです。

これにより、標準のCAPMローリング回帰が実装されます。

bysort permno: asreg mret_rf mkt_rf, wind(month 60)

permno企業識別子、月次mret_rf企業収益からリスクフリーレートを差し引いたものmkt_rf、月次市場収益からリスクフリーレートを差し引いたものmonth、月を識別する日付変数の名前、および月60単位のローリングウィンドウのサイズです。

asregStataにインストールするには:

ssc install asreg
于 2019-08-13T14:10:39.437 に答える