--- Diego Bellavia <[email protected]> wrote:
> I have many (~ 500) variables to test in a paired design (I would
> like to perform both a paired t-test and a signed rank sum test).
First comment is that you need to apply an adjustment of the p-values
to correct for the fact that you are performing that many tests. You
can let Stata do that for you using the undocumented command -_mtest-
To find out more about -_mtest-, type -help _mtest-. (In Stata-speak
undocumenten means not in the paper manual, but there is a help file,
not-documenten means there is neither an entry in the paper manual nor
a help file)
> To avoid typing all the variables I would like to define a double
> loop to perform the test for all the variables.
> Since all the variables, after the reshaping in wide format of the
> dataset are in the format a1 b1 c1... and a2 b2 c2, basing on STATA
> documentation I tried to implement arrays, and I ended up with
> something like
The example below does what you want, in addition it also gives you
adjusted p-values (in this case Sidak adjust p-values, but you can
choose your own favourite flavor), and I have used -matlist- to give
you a nice display of the result. In the colnames you see that I call
columns something like ttest:something, or ranksum:something, ttest and
ranksum are the equation names and the something the column names, it
gives nice output from -matlist-. Another trick I use is refering to
the local i as `++i', this means: first add 1 and than use the new
content of the local i. Otherwise I haven't used any trick that aren't
explained in -help forvalues-, -help levelsof-, -help macrolists-,
-help matrix-, -help matrix substitution-, -help matlist-, -help
_mtest-, -help ttest-, and -help ranksum-.
*------------------ begin example --------------------
set more off
use "http://www.stata-press.com/data/r10/nlswork.dta", clear
keep idcode year ln_wage
levelsof year
local levs = "`r(levels)'"
reshape wide ln_wage, i(idcode) j(year)
local i = 0
mat rest = J(105,2,.)
mat resr = J(105,4,.)
foreach lev1 of local levs{
local left "`left' `lev1'"
local second : list levs - left
foreach lev2 of local second {
ttest ln_wage`lev1' = ln_wage`lev2'
local diff = r(mu_2)-r(mu_1)
matrix rest[`++i',1] = `diff', r(p)
signtest ln_wage`lev1' = ln_wage`lev2'
matrix resr[`i',1] = r(N_neg), r(N_pos), ///
r(N_tie), r(p_neg)
local rowname "`rowname' `lev1'_v_`lev2'"
}
}
_mtest adjust rest, mtest(sidak) pindex(2)
matrix res = rest, r(result)
_mtest adjust resr, mtest(sidak) pindex(4)
matrix res = res, resr, r(result)
#delimit ;
matrix colnames res = ttest:diff ttest:unadj_p ttest:adj_p
ranksum:N_neg ranksum:N_pos ranksum:N_tie
ranksum:unadj_p ranksum:adj_p ;
#delimit cr
matrix rownames res = `rowname'
matlist res, underscore format(%8.0g)
*------------------ end example ---------------------
(For more on how to use examples I sent to the Statalist, see
http://home.fsw.vu.nl/m.buis/stata/exampleFAQ.html )
> Last question: to perform a paired t-test or signed rank sum test in
> STATA, I am forced to reshape the dataset in wide format?
Yes
Hope this helps,
Maarten
-----------------------------------------
Maarten L. Buis
Department of Social Research Methodology
Vrije Universiteit Amsterdam
Boelelaan 1081
1081 HV Amsterdam
The Netherlands
visiting address:
Buitenveldertselaan 3 (Metropolitan), room Z434
+31 20 5986715
http://home.fsw.vu.nl/m.buis/
-----------------------------------------
___________________________________________________________
Want ideas for reducing your carbon footprint? Visit Yahoo! For Good http://uk.promotions.yahoo.com/forgood/environment.html
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/