Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[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 <njcoxstata@gmail.com>
To   "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu>
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
njcoxstata@gmail.com


On 31 May 2013 09:09, Maarten Buis <maartenlbuis@gmail.com> wrote:
> On Fri, May 31, 2013 at 9:22 AM, Marta García-Granero
> <mgarciagranero@gmail.com> 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/


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