2012-05-12 5 views
0

Stataでは、回帰の後に、格納された結果の要素を名前で呼ぶことが可能であることがわかっています。たとえば、変数precipの係数を操作する場合は、_b[precip]と入力します。私の質問は、tabstatコマンドの後にどうすれば同じことができますか?例えば、私はprecipのサンプル平均でprecipに係数を掛けたいと言う:Stataでは、マトリックス要素をその名前でどのように操作するのですか?

reg --variables in regression-- 
    tabstat --variables in regression-- 
    mat X=r(StatTotal) 
    mat Y=_b[precip]*X[1,precip] 

ああ、場合にのみ、それは簡単なことでした。しかし、残念なことに、最後の行のX [1、precip]は無効な構文です。奇妙なことに、Stataはdisplay X[1, precip]を認識します。そして、Stataはprecipの代わりにprecipが表示されている列番号をXベクトルに使用すると、私がやろうとしていることを知っていました。一度この操作をしていたら、問題はありません。しかし、私はこの操作を数回(いくつかの異なるモデル仕様のために)行う必要があり、あるモデルから次のモデルへのベクトルの位置を変えるいくつかの変数のために、列番号を使うことはできません。

+0

'sysuse auto'から始まる完全な変数名と、' regress price mpg foreign weight'のようなものを投稿してください。誰もが共通の波長になるようにしてください。 'tabstat'は非常に表面的なコマンドですが、それは個人的な好みの問題かもしれません。 – StasK

答えて

2

は、私は私はあなたが何をしたいのか、正確にはまだわから理解していないのですが、ここであなたが何をしているか再現する私の試みです:

sysuse auto, clear 
    regress price mpg foreign weight 
    tabstat mpg foreign weight, save 
    matrix X = r(StatTotal) 
    matrix Y = _b[mpg]*X[1, colnumb(X, "mpg") ] 

あなたはサイクルにこれを配置する必要がある場合は、それはなんとかだが、あまりにも、 :

program define reg2mat , prefix(name) 

     if "`e(cmd)'" != "regress" { 
     // this will intentionally produce an error 
     regress 
     } 

     tempname bb 

     matrix `bb' = e(b) 
     local explvar : colnames `bb' 
     foreach x in `explvar' { 
     if "`x'" != "_cons" { 
      matrix `prefix'_`x' = _b[`x'] * X[1, colnumb(X, "`x'")] 
     } 
     else { 
      matrix `prefix'_`x' = _b[`x'] 
     } 
     } 
    end // of reg2mat 

matrix bb = e(b) 
    local explvar : colnames bb 
    foreach x in `explvar' { 
     if "`x'" != "_cons" { 
     matrix Y_`x' = _b[`x'] * X[1, colnumb(X, "`x'")] 
     } 
     else { 
     matrix Y_`x' = _b[`x'] 
     } 
    } 

あなたは、おそらくあなたは、各回帰モデルの推定呼び出し、例えば後に呼び出しますprogramにこれを入れたいと思います

多くのレベルでは、Stataメモリの(グローバル)マトリックスで操作されるため、それは理想的ではありません。ほとんどの場合、プログラムはローカルのオブジェクトだけで操作する必要があるため、悪い考えです。

私は何がやりたいこと(predictの低レベルのバージョンである)一つの方法または別では、どちらかomnipowerful marginsコマンドによって、または適切なpredictによって、またはmatrix scoreによって、対処されると思われます。変数にエフェクトを付けることは、回帰分析が直交している場合にのみ意味を持ちます。これは、慎重に設計され、実行された実験でのみ発生します。

関連する問題