2013-03-21 3 views
7

Chciałbym użyć esttab (ssc install estout) do generowania statystyki podsumowującej według grupy z kolumnami dla średniej różnicy i znaczenia. Łatwo jest wygenerować je jako dwie osobne tabele z estpost, summarize i ttest i połączyć ręcznie, ale chciałbym zautomatyzować cały proces.Skorzystaj z pakietu esttab, aby wygenerować statystyki podsumowujące według grupy z kolumnami dla średniej różnicy i znaczenia

Poniższy kod generuje dwa składniki żądanej tabeli.

sysuse auto, clear 

* summary statistics by group 
eststo clear 
by foreign: eststo: quietly estpost summarize /// 
    price mpg weight headroom trunk 
esttab, cells("mean sd") label nodepvar 

* difference in means 
eststo: estpost ttest price mpg weight headroom trunk, /// 
    by(foreign) unequal 
esttab ., wide label 

I mogę wydrukować dwie tabele i wyciąć-wklejanie w jednym stole.

* can generate similar tables and append horizontally 
esttab, cells("mean sd") label 
esttab, wide label 


* manual, cut-and-paste solution 
------------------------------------------------------------------------------------------------------- 
           (1)      (2)       (3)     

          mean   sd   mean   sd   
------------------------------------------------------------------------------------------------------- 
Price     6072.423  3097.104  6384.682  2621.915   -312.3   (-0.44) 
Mileage (mpg)   19.82692  4.743297  24.77273  6.611187   -4.946**  (-3.18) 
Weight (lbs.)   3317.115  695.3637  2315.909  433.0035   1001.2***  (7.50) 
Headroom (in.)   3.153846  .9157578  2.613636  .4862837   0.540**  (3.30) 
Trunk space (.. ft.)  14.75  4.306288  11.40909  3.216906   3.341***  (3.67) 
------------------------------------------------------------------------------------------------------- 
Observations     52      22       74     
------------------------------------------------------------------------------------------------------- 
t statistics in parentheses 
* p<0.05, ** p<0.01, *** p<0.001 

Wydaje się, że powinienem być w stanie uzyskać żądaną tabelę z jednym esttab wezwanie i bez cięcia i-wklejania, ale nie mogę zrozumieć. Czy istnieje sposób na wygenerowanie pożądanej tabeli bez ręcznego wycinania i wklejania?

Wolę wydrukować tabelę LaTeX, ale wszystko, co eliminuje wycinanie i wklejanie, jest dużym krokiem, nawet przechodząc przez rozdzielony plik tekstowy.

Odpowiedz

6

Jeśli nadal chcesz używać esttab można bawić się przy użyciu komórek i wzór. Stół w oryginalnym poście mogą być replikowane z następującego kodu:

sysuse auto, clear 

eststo domestic: quietly estpost summarize /// 
    price mpg weight headroom trunk if foreign == 0 
eststo foreign: quietly estpost summarize /// 
    price mpg weight headroom trunk if foreign == 1 
eststo diff: quietly estpost ttest /// 
    price mpg weight headroom trunk, by(foreign) unequal 

esttab domestic foreign diff, /// 
cells("mean(pattern(1 1 0) fmt(2)) sd(pattern(1 1 0)) b(star pattern(0 0 1) fmt(2)) t(pattern(0 0 1) par fmt(2))") /// 
label 

który daje

----------------------------------------------------------------------------------------------------- 
           (1)      (2)      (3)     

          mean   sd   mean   sd   b    t 
----------------------------------------------------------------------------------------------------- 
Price      6072.42  3097.10  6384.68  2621.92  -312.26   (-0.44) 
Mileage (mpg)    19.83   4.74  24.77   6.61  -4.95**  (-3.18) 
Weight (lbs.)    3317.12  695.36  2315.91  433.00  1001.21***  (7.50) 
Headroom (in.)    3.15   0.92   2.61   0.49   0.54**  (3.30) 
Trunk space (.. ft.)  14.75   4.31  11.41   3.22   3.34***  (3.67) 
----------------------------------------------------------------------------------------------------- 
Observations     52      22      74     
----------------------------------------------------------------------------------------------------- 
+0

Dzięki! Nie przyjrzałem się dokładnie opcjom "komórek". Przyda się to wszędzie, gdzie używam 'esttab'. Które jest wszędzie. Ben Jann powinien dostać Nobla za "esttab". –

3

Nie sądzę, istnieje sposób, aby to zrobić z esttab (estout pakietu od ssc), ale mam rozwiązanie listtab (także ssc) i postfile. Tabela tutaj jest trochę inna niż ta, którą proponuję powyżej, ale podejście jest na tyle ogólne, że można je modyfikować, aby pasowało do twoich potrzeb.

Rozwiązanie to wykorzystuje również pakiet LaTeX-a booktabs.

/* data and variables */ 
sysuse auto, clear 
local vars price mpg weight headroom trunk 

/* means */ 
tempname postMeans 
tempfile means 
postfile `postMeans' /// 
    str100 varname domesticMeans foreignMeans pMeans using "`means'", replace 
foreach v of local vars { 
    local name: variable label `v' 
    ttest `v', by(foreign) 
    post `postMeans' ("`name'") (r(mu_1)) (r(mu_2)) (r(p)) 
} 
postclose `postMeans' 

/* medians */ 
tempname postMedians 
tempfile medians 
postfile `postMedians' /// 
    domesticMedians foreignMedians pMedians using `medians', replace 
foreach v of local vars { 
    summarize `v' if !foreign, detail 
    local med1 = r(p50) 
    summarize `v' if foreign, detail 
    local med2 = r(p50) 
    ranksum `v', by(foreign) 
    local pval = 2 * (1 - normal(abs(r(z)))) 
    post `postMedians' (`med1') (`med2') (`pval') 
} 
postclose `postMedians' 

/* combine */ 
use `means' 
merge 1:1 _n using `medians', nogenerate 
format *Means *Medians %9.3gc 
list 

/* make latex table */ 
/* requires LaTeX package `booktabs` */ 
listtab * using "Table.tex", /// 
    rstyle(tabular) replace /// 
    head("\begin{tabular}{lcccccc}" /// 
    "\toprule" /// 
    "& \multicolumn{3}{c}{Means} & \multicolumn{3}{c}{Medians} \\" /// 
    "\cmidrule(lr){2-4} \cmidrule(lr){5-7}" /// 
    "& Domestic & Foreign & \emph{p} & Domestic & Foreign & \emph{p}\\" /// 
    "\midrule") /// 
    foot("\bottomrule" "\end{tabular}") 

To daje następujące wyniki.

enter image description here

1

Odpowiedź wybrany jest ładne, ale nieco redudant. Możesz osiągnąć ten sam wynik tylko z test estpost.

sysuse auto, clear 
estpost ttest price mpg weight headroom trunk, by(foreign) 
esttab, cells("mu_1 mu_2 b(star)" 

Wyjście wygląda następująco:

   mu_1   mu_2   b 

c_score  43.33858 42.034  1.30458*** 
nc_a4_17 4.007524 3.924623 .0829008* 
+0

Nice! Jedną z zalet wybranej odpowiedzi jest to, że możesz uwzględnić chwile niezgłoszone przez "estpost ttest". –

Powiązane problemy