1

(1) 特定の基準で回帰を何度もループします。(2)各回帰から特定の係数を保存する。次に例を示します。

clear
sysuse auto.dta
local x = 2000
while `x' < 5000 {
      xi: regress price mpg length gear_ratio i.foreign if weight < `x'
      est sto model_`x'
      local x = `x' + 100
}
est dir

私が気にするのは、mpgここで言う 1 つの予測変数だけです。各結果からの係数をmpg1 つの独立したファイル (任意のファイルでかまいません) に抽出して、しきい値が増加.dtaする傾向があるかどうかを確認したいと考えています。weight私が今やっていることはestout、次のような結果をエクスポートするために使用することです:

esttab * using test.rtf, replace se stats(r2_a N,  labels(R-squared)) starl(* 0.10 ** 0.05 *** 0.01) nogap onecell title(regression tables)

estoutすべてをエクスポートするので、結果を編集する必要があります。これは、予測変数が少ない回帰ではうまく機能しますが、実際のデータセットには 30 を超える変数があり、回帰は少なくとも 100 回ループします (Distance範囲が 0 から 30,000 の変数があります:weight 例では の役割があります)。したがって、間違いなく結果を編集することは非常に困難です。

私の問題を解決する他の効率的な方法はありますか? 私のケースはグループ変数をループしているのではなく、特定の基準を超えています。ここではstatsby機能がうまく機能していないようです。

4

2 に答える 2

2

@Todd が既に提案しているように、関心のある特定の結果を選択して、postfileそれらを新しい変数として新しいデータセットに保存するために使用できます。ループはコードforvalよりも直接的であることに注意してください。一方、最近のバージョンの Stata では、使用は因子変数表記に取って代わられています。(古いバージョンを使用している場合に備えて、私はそれを変更していません。)オンザフライなどの保存された結果の評価と、評価される負の符号を停止するための括弧の使用に注意してください。一部のコード例では、結果を一時的にローカル マクロまたはスカラーに格納しますが、これはまったく不要です。whilexi:_b[_cons]()

sysuse auto.dta, clear 
tempname myresults 
postfile `myresults' threshold intercept gradient se using myresults.dta 
quietly forval x = 2000(200)4800 {
    xi: regress price mpg length gear_ratio i.foreign if weight < `x'
    post `myresults' (`x') (`=_b[_cons]') (`=_b[mpg]') (`=_se[mpg]') 
}
postclose `myresults' 
use myresults 
list 

     +---------------------------------------------+
     | thresh~d   intercept    gradient         se |
     |---------------------------------------------|
  1. |     2000    -3699.55   -296.8218   215.0348 |
  2. |     2200   -4175.722   -53.19774   54.51251 |
  3. |     2400   -3918.388   -58.83933   42.19707 |
  4. |     2600   -6143.622   -58.20153   38.28178 |
  5. |     2800   -11159.67   -49.21381   44.82019 |
     |---------------------------------------------|
  6. |     3000   -6636.524   -51.28141   52.96473 |
  7. |     3200   -7410.392   -58.14692   60.55182 |
  8. |     3400   -2193.125   -57.89508   52.78178 |
  9. |     3600   -1824.281   -103.4387   56.49762 |
 10. |     3800   -1192.767   -110.9302    51.6335 |
     |---------------------------------------------|
 11. |     4000     5649.41   -173.9975   74.51212 |
 12. |     4200    5784.363   -147.4454   71.89362 |
 13. |     4400     6494.47   -93.81158   80.81586 |
 14. |     4600     6494.47   -93.81158   80.81586 |
 15. |     4800    5373.041   -95.25342   82.60246 |
     +---------------------------------------------+

statsby(関数ではなくコマンド) は、この問題に対してまったく設計されていないため、うまく機能するかどうかは問題ではありません。

于 2015-11-24T08:36:20.297 に答える
1

help postfile結果を集計する方法の例をご覧になることをお勧めします。statsbyそれが最善のアプローチではないかもしれないことに同意します。mpgweightonの間の相互作用を評価することは、相互作用priceの古典的な問題と思われるものに対処するのに役立つ可能性があります。

于 2015-11-24T02:46:26.713 に答える