0

多重回帰結果のシミュレーション用の小さなプログラムを作成しました。これを行ごとに (構文コマンドの代わりに実際の値を使用して) 実行することはできますが、面倒なことにすると、正しく動作しません。

基本的な考え方は、データセットを生成し、回帰を実行してから、オプションdrawnormを使用して何度も実行することです。simulate単一のコマンド ラインを使用してい[powersim3, ry1(.30) ry2(.30) r12 (.30) n (282)] to run the syntax below (encased in the *****)ます。

******
 program define powersim3, rclass
 syntax, ry1(real)ry2(real)r12(real)n(
real) [my(real 0)m1(real
0)m2(real 0)m3(real 0)sy(real 1) ///
    s1(real 1)s2(real 1)s3(real 1)alpha(real .05)help]
matrix m = (`my', `m1', `m2')
matrix sd = (`sy', `s1', `s2')
matrix r = (1, `ry1', `ry2'\ `ry1' , 1 , `r12'\ `ry2' , `r12', 1)
drawnorm y x1 x2, n(`n') corr(r) means(m) sds(sd)
regress y x1 x2
end

simulate _b _se, reps(10000): powersim3
*****

simulateコマンドが上記のコマンドを認識していないことが問題のpowersim3ようです (これは、simulate を省略した場合に機能します)。ここには簡単な解決策があると思いますが、簡単な答えが何であるかを知るには、私は Stata に精通していません。どんな提案でも非常に役に立ちます。

4

1 に答える 1

1

コードにいくつかのエラーがあります:

  1. プログラムには、、、、 およびpowersim3オプションが必要ry1()です。あなたへの電話では、これらのオプションを省略しました。ry2()r12()n()simulate
  2. プログラムは、変数 y x1 x2 を削除することから始めなければなりません。そうしないと、2 回目以降にgenerate既に存在する変数を試行するときにエラーが返されます。
  3. このsyntaxステートメントには、スペースが省略されているというさまざまな問題が含まれています。

すべてを修正すると、実際の例は次のようになります。

clear all
program define powersim3, rclass
    syntax, ry1(real) ry2(real) r12(real) n(real) ///
    [ my(real 0) m1(real 0) m2(real 0) m3(real 0) sy(real 1) ///
    s1(real 1) s2(real 1) s3(real 1) alpha(real .05)]

    drop _all

    tempname m sd r
    matrix `m' = (`my', `m1', `m2')
    matrix `sd' = (`sy', `s1', `s2')
    matrix `r' = (1, `ry1', `ry2'\ `ry1' , 1 , `r12'\ `ry2' , `r12', 1)
    drawnorm y x1 x2, n(`n') corr(`r') means(`m') sds(`sd')
    regress y x1 x2
end

simulate _b _se, reps(10000): ///
    powersim3, ry1(.30) ry2(.30) r12(.30) n(282)

編集

このプロセス全体を 1 つのコマンドにパッケージ化するには、powersim3.ado と powersim3_simulator.ado の 2 つの .ado ファイルを保存する必要があります。前者はユーザーが呼び出すコマンドで、後者はsimulate内で呼び出すコマンドですpowersim3。現在メモリにあるすべてのデータを消去し、シミュレーションの結果に置き換えるためpowersim3、ユーザーがオプションを指定することを主張しclearます。このセーフガードは、Stata の世界の慣習です。reps()ユーザーがレプリケーション数を指定できるオプションを追加しました。残りのオプションは*、 のsyntaxコマンドでキャプチャされますpowersim3。これは、ユーザーが指定するその他のオプションがローカル マクロに保存されることを意味します`options'。これらのオプションはすべてコマンドに渡されますpowersim3_simulator

*--- ファイル powersim3.ado を開始

program define powersim3
    syntax , clear [ reps(integer 100) * ]
    simulate _b _se, reps(`reps') : powersim3_simulator, `options'
end

*--- 最終ファイル powersim3.ado

*--- ファイル powersim3_simulator.ado を開始

program define powersim3_simulator
    syntax, ry1(real) ry2(real) r12(real) n(real)                ///
        [ my(real 0) m1(real 0) m2(real 0) m3(real 0) sy(real 1) ///
        s1(real 1) s2(real 1) s3(real 1) alpha(real .05)]

    drop _all

    tempname m sd r
    matrix `m' = (`my', `m1', `m2')
    matrix `sd' = (`sy', `s1', `s2')
    matrix `r' = (1, `ry1', `ry2'\ `ry1' , 1 , `r12'\ `ry2' , `r12', 1)
    drawnorm y x1 x2, n(`n') corr(`r') means(`m') sds(`sd')
    regress y x1 x2
end

*--- 最終ファイル powersim3_simulator.ado


powersim3_simulatorは単なるヘルパー プログラムであり、多くの場合、同じ .ado ファイルにヘルパー プログラムを追加できます。

*--- foo.ado ファイルの開始

program define foo
    ...
    bar
    ...
end

program define bar
    ...
end

*--- foo.ado ファイルの終了

これは、プログラムに必要なファイルの数を減らすので便利ですが、この場合は機能しません。その理由は、プログラムbar(またはあなたの場合) がプログラム(またはあなたの場合)powersim3_simulatorに対してローカルになるためです。つまり、プログラムを見つけることができません。したがって、この問題を解決するには、2 つの .ado ファイルを保存する必要があります。foopowersim3simulate

于 2013-06-18T08:24:45.083 に答える