Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Need help making an ado for Tamhane test
From
Nick Cox <[email protected]>
To
"[email protected]" <[email protected]>
Subject
Re: st: Need help making an ado for Tamhane test
Date
Fri, 31 May 2013 09:40:03 +0100
Maarten has made a very good start here.
Generalising his program to allow -if- or -in- seems straightforward
syntax varname [if] [in], by(varname)
The program, however, allows the -by()- variable to be string but will
not work correctly if it is. This is fixable.
Nick
[email protected]
On 31 May 2013 09:09, Maarten Buis <[email protected]> wrote:
> On Fri, May 31, 2013 at 9:22 AM, Marta García-Granero
> <[email protected]> wrote:
>> Anyway, I have attempted
>> (perpetrated?) to write some code for Tamhane's T2 multiple comparison of
>> means with heterogeneous variances.
>> To avoid having to edit it every time I want to use it, to replace "Hb" by
>> the dependent variable name and "Status" by the grouping variable, I would
>> like to turn it into a program, like this:
>>
>> tamhane Hb, by(Status)
>>
>> Unfortunately, I have hit the ceiling of my knowledge in Stata programming
>> as it is right now.
>
> Here is how I would start:
>
> *------------------ begin example ------------------
> clear all
>
> program define tamhane, rclass
> syntax varname, by(varname)
>
> // take care of possible missing values
> marksample touse
> markout `touse' `by', strok
> qui count if `touse'
> if r(N) == 0 error 2000
>
> // collect the levels of by
> qui levelsof `by' if `touse',local(levels)
>
> // count the number of levels
> // see: -help extended_fcn-
> local k : word count `levels'
>
> // count the number of comparisons
> local comp=`k'*(`k'-1)/2
>
> // create a matrix to store (and return) the results
> tempname res
> matrix `res' = J(`comp',1,.)
>
> // collect the test results in that matrix
> local row = 1
> forvalues i = 1/ `k' {
> local lev_i : word `i' of `levels'
> forvalues j = `=`i'+1'/`k' {
> local lev_j : word `j' of `levels'
> quietly ttest `varlist' ///
> if `touse' & ((`by'==`lev_i')|(`by'==`lev_j')), ///
> by(`by') unequal
>
> matrix `res'[`row',1] = 1-(1-r(p))^`comp'
> local row = `row' + 1
> local rowname "`rowname' `lev_i'_vs_`lev_j'"
> }
> }
>
> // give the rows and collumn names
> matrix rownames `res' = `rowname'
> matrix colnames `res' = "p_value"
>
> // display the matrix
> matlist `res', underscore format(%7.4f)
>
> // return the matrix
> return matrix result = `res'
> end
>
> // try it out
> sysuse auto
> tamhane price, by(rep78)
> *------------------- end example -------------------
> (For more on examples I sent to the Statalist see:
> http://www.maartenbuis.nl/example_faq )
>
> Hope this helps,
> Maarten
>
> ---------------------------------
> Maarten L. Buis
> WZB
> Reichpietschufer 50
> 10785 Berlin
> Germany
>
> http://www.maartenbuis.nl
> ---------------------------------
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/faqs/resources/statalist-faq/
> * http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/