0

以下のような一連のデータがあります。

A B C D
1 2 3 4
2 3 4 5

これらは、ABCD が 2x2 テーブルを構成する集計データであり、各行でフィッシャーの正確検定を実行し、その行のフィッシャーの正確検定の p 値の新しい列を追加する必要があります。

and loop を使用fisher.exactして R で実行できますが、Stata で Fisher の正確なテストのコマンドを見つけることができません。

4

3 に答える 3

3

あなたは R の用語で考えていますが、それは多くの場合、Stata では役に立ちません (Stata の専門家by ... : regressが R でのやり方を理解するのは不可能であるように、すべてのパッケージには独自のパラダイムと独自の強みがあります)。

列を追加するオブジェクトがありません。Stata の共同研究者が共感する適切な解決策を見つけるために、最終的には p 値を使用して何をする必要があるかについて、もう少し詳しく言うことができるかもしれません。

本当に新しい列 (generate新しい変数、Stata で言えば)を追加したい場合はtabulate、その戻り値を確認することをお勧めします。

    clear
    input x y f1 f2
    0 0 5 10
    0 1 7 12
    1 0 3 8
    1 1 9 5
    end

あなたA B C Dは 2 つのバイナリ変数を表していると思います。数字はデータの頻度です。clearStata は一度に 1 つのデータ セットについて考えるため、記憶する必要があります。

次にtabulate、結果とgeneratep 値を含む新しい変数を作成できますが、これは定数値を含む変数を作成するためにメモリを大幅に浪費することになります。

    tabulate x y [fw=f1], exact
    return list
    generate p1 = r(p_exact)
    tabulate x y [fw=f2], exact
    generate p2 = r(p_exact)

ここで[fw=variable]は、頻度の重みを指定する方法を示します。return list手順の結果、Stata がどのような情報を保存するかを調べるために入力しました。それがStataが扱うオブジェクトのようなものです。R はコンポーネントでテスト結果を返し、fisher.test()$p.valueStata はr(component)単純なコマンドとe(component)推定コマンドの戻り値を作成します。

ループ ソリューションが必要な場合 (セットが多数ある場合)、次のようにすることができます。

   forvalues k=1/2 {
    tabulate x y [fw=f`k'], exact
    generate p`k' = r(p_exact)
   }

これは、Stata、IMHO が R よりもはるかに強力なスクリプト機能です (ただし、これは非常に汚いプログラミングのトリックであると主張できます)。ローカル マクロkは 1 から 2 までの値を取り、このマクロは中かっこで囲まれたコードのどこでも ``k'` として置き換えられます。

あるいは、結果をスカラーとして Stata 短期記憶に保持することもできます。

    tabulate x y [fw=f1], exact
    scalar p1 = r(p_exact)
    tabulate x y [fw=f2], exact
    scalar p2 = r(p_exact)

ただし、スカラーはデータ セットに関連付けられていないため、データと共に保存することはできません。

ここでcci提案されているような即時コマンドも、同様に取得できる値を返します。

HTH、スタース

于 2011-08-04T16:15:48.603 に答える
2

オプション付きのcciコマンドを見てください:exact

cci 10 15 30 10, exact

これは、いわゆる「即時」コマンドの一部です。これらを使用すると、メモリに格納されたデータからではなく、引数から直接計算を行うことができます。見てhelp immediate

于 2011-08-04T10:33:06.733 に答える
0

投稿者の最初の質問の各観測は、1 つの従来の 2 x 2 テーブルの 4 つのカウントで構成されていたようです。Stas のコードは、個々の観測データに適用されます。Nick は、-cci- が abcd データを分析できることを指摘しました。次のコードは、各テーブルに -cci を適用し、Stas のコードと同様に p 値をデータ セットに追加します。このforvalues i = 1/`=_N'ステートメントは、最初の観測から最後の観測までループを実行するように Stata に指示します。a[`i']i 番目のオブザベーションの変数「a」の値を参照します。

    clear
    input a b c d
    10 2 8 4
    5 8 2 1
    end

    gen exactp1 = .
    gen exactp2 =.
    label var exactp1 "1-sided exact p"
    label var exactp2 "2-sided exact p"
    forvalues i = 1/`=_N'{
      local a = a[`i']
      local b = b[`i']
      local c = c[`i']
      local d = d[`i']
      qui cci `a' `b' `c' `d', exact
      replace exactp1 = r(p1_exact) in `i'
      replace exactp2 = r(p_exact) in `i'
      }
    list

ローカル マクロに変数と同じ名前を付けても問題ないことに注意してください。

于 2013-10-04T18:35:35.877 に答える