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 at the end of May, 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   Maarten Buis <maartenlbuis@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Need help making an ado for Tamhane test
Date   Fri, 31 May 2013 10:09:04 +0200

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/


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