Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: Pairwise comparisons repeated ANOVA (redux)


From   Joseph Coveney <jcoveney@bigplanet.com>
To   Statalist <statalist@hsphsun2.harvard.edu>
Subject   Re: st: Pairwise comparisons repeated ANOVA (redux)
Date   Thu, 10 Apr 2003 00:57:50 +0900

Sven-Erik Johansson had asked about pairwise comparisons in conjunction with a one-
way repeated-measures analysis of variance.  George Hoffman and I responded, and 
later Al Feiveson provided a program for the Scheffé test using the pooled error term.

After posting my response, I noted that I had initialized a cumulator matrix 
unnecessarily.  In addition, I had neglected to clean up afterward--creating an interim 
matrix and not dropping it before exiting the do-file.  In making the do-file more 
efficient, I discovered two features of Stata's programming language (perhaps 
rediscovered if others have observed them before).  I'm posting them because I wonder 
whether it would be good practice to use them.

The first is the ability to substitute a parenthetical presentation of a matrix in lieu of a 
matrix name as in the following:  the online help file for matrix operations indicates that, 
to append a row vector to the bottom of an existing matrix A, first create matrix B and 
then -matrix A = A \ B-.  But I found that I could use -matrix A = A \ (element1, 
element2, . . . ).  This has the benefit of avoiding having to create two matrixes 
explicitly, possibly economizing very slightly.

The second is that, in lieu of an -if . . . else- construction, I could define a macro in a -
cond()- statement that contains for its value a Stata command as a string.  And then I 
could "execute" the macro.  (I suspect that this ability has been observed before.)  I 
don't know off-hand of any advantage to this tactic unless -cond()- saves execution time 
vis-à-vis an -if . . . else- equivalent.

Both of these features are illustrated below in the modified do-file, which runs and gives 
the same results as that in the earlier posting.  My question is as to the wisdom of using 
either of these tactics in Stata programming.  They both strike me as do a lot of 
analogous tricks in C, namely, clever-looking, but liable to create pitfalls.

Joseph Coveney

--------------------------------------------------------------------------------

set more off
infile byte rctime1 byte rctime2 byte rctime3 byte rctime4 using ///
  http://www.uni-koeln.de/themen/Statistik/data/winer/win_228.txt, clear
// ANOVA skipped this time
local testno = 1
forvalues i = 1/3 {
    local j = `i' + 1
    forvalues k = `j'/4 {
        quietly ttest rctime`i' = rctime`k'
        local command = cond(`testno' == 1, ///
          "matrix A = (`i', `k', r(p))", ///
          "matrix A = A \ (`i', `k', r(p))")
        `command'
        local rownamesA = "`rownamesA'" + "testpair`testno++' "
    }
}
matrix rownames A = `rownamesA'
matrix colnames A = onedrug otherdrug unadjustp
_mtest adjust A, mtest(holm) pindex(3) append
matrix list r(result)
exit

--------------------------------------------------------------------------------




*
*   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/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index