0

Stataでは、回帰後、保存された結果の要素を名前で呼び出すことができることがわかりました。たとえば、変数の係数を操作する場合はprecip、と入力するだけです_b[precip]tabstat私の質問は、コマンドの後に同じことをどのように行うのですか?たとえば、係数に次precipのサンプル平均を掛けたいとしprecipます。

    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]ます。そして、ベクターに表示precipされる列番号を使用する代わりに、Stataは私が何をしようとしているのかを知っています。この操作を一度だけ行っていれば問題ありません。ただし、この操作を数回(いくつかの異なるモデル仕様に対して)実行する必要があり、ベクトル内の位置を1つのモデルから次のモデルに変更するいくつかの変数に対して実行する必要があるため、列番号だけを使用することはできません。precipX

4

1 に答える 1

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") ]

これをサイクルに入れる必要がある場合は、それも実行可能です。

    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これを、各回帰モデル推定呼び出しの後に呼び出すものに入れたいと思うでしょう。例:

    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

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

あなたがやりたいことは、何らかの形で、全能のmarginsコマンド、適切なpredict、またはmatrix score(の低レベルバージョンpredict)のいずれかによって対処されていると思います。効果を変数に帰属させることは、リグレッサーが直交している場合にのみ意味があります。これは、注意深く設計および実施された実験でのみ発生します。

于 2012-05-14T01:55:08.030 に答える