2011-08-04 69 views
0

彙總我有類似下面一組數據進行Fisher精確檢驗:使用的Stata

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

它們是ABCD構成一個2x2的表彙總的數據,我需要做的Fisher精確檢驗每行,併爲該行的Fisher精確檢驗的p值添加一個新列。

我可以使用fisher.exact和循環做,在R,但我找不到Fisher精確檢驗在Stata的命令。

回答

3

您在R項之所想,那就是在Stata(往往無果而終只是因爲它是不可能的Stata的傢伙弄清楚如何在R請勿by ... : regress;每個包都有自己的模式和自己的優勢)。

有沒有對象將列添加到。可能你會說一點點,以你需要做的,最後,用你的p值是什麼,這樣才能找到一個合適的解決方案,您的Stata合作者將與同情。

如果你真的想添加一個新列(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代表兩個二進制變量,數字是數據中的頻率。你必須記憶,因爲Stata一次只考慮一個數據集。

然後,你可以tabulate結果和含P值generate新的變量,雖然這將是內存的主要廢棄物創建包含一個恆定值的變量:

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存儲的程序結果信息。 THAT'S類似對象Stata的事情與工作。 R.將返回在fisher.test()$p.value部件的檢測結果,並創建的Stata返回的值,r(component)爲簡單的命令和e(component)用於估計的命令。

如果你想有一個循環的解決方案(如果你有很多套),你可以這樣做:

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

這就是腳本的能力,其中的Stata,恕我直言,是除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建議here的直接命令也會返回值,您可以同樣檢索。

HTH,斯塔斯

2

深入瞭解cci命令與exact選項:

cci 10 15 30 10, exact 

這就是所謂的「立竿見影」的命令的一部分。它們允許您直接從參數進行計算,而不是從存儲器中存儲的數據進行計算。看看help immediate

0

在海報的原題每個觀測顯然是一個傳統的2×2表包括四個計數。斯塔斯的代碼適用於個人觀察數據。 Nick指出-cci-可以分析數據。這裏是對每個表應用-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 

請注意,在賦予本地宏名稱與變量同名方面沒有問題。