*! version 1.0.1 TJS 9jun2000 program define nctinv, rclass version 6.0 args p delta df if "`p'" == "" { di in gr "Syntax for " in wh "nctinv" _c di in gr ", the inverse cumulative non-central t distribution, is:" _n di in wh " nctinv " in gr "p delta df" _n di in gr " where " in wh "p " in gr " is the probability" di in wh " delta " in gr "is the noncentrality parameter" di in wh " df " in gr " is the degrees of freedom" _n di in wh " nctinv " in gr "computes " in wh "t'" in gr " such that" _c di in gr " P(t<=" in wh "t'" in gr "| " in wh "delta" in gr ", " _c di in wh "df" in gr ") = " in wh "p" di in gr " and returns the value in result " _c di in wh "r(t) " in gr "and global " in wh "S_1" in gr "." global S_1 = . return scalar t = . exit 9 } if `p' < 0 | `p' > 1 { di in re "p must be between 0 and 1" global S_1 = . return scalar t = . exit 498 } if `df' != int(`df') | `df' < 1 { di in re "degrees of freedom must be a positive integer" global S_1 = . return scalar t = . exit 498 } capture which ridder if _rc == 111 { di in re "nctinv requires installation of program ridder." di in wh " (see STB-24, insert ssi5.4 for ridder)." global S_1 = . return scalar t = . exit 111 } capture which nctprob if _rc == 111 { di in re "nctinv requires installation of program nctprob." di in wh " (contact T. J. Steichen at steicht@rjrt.com for nctprob)." global S_1 = . return scalar t = . exit 111 } local min = `delta' - 100 / (`df'^.44) local max = `delta' + 100 / (`df'^.44) if `p' < 0.5 { local max = `delta' } else { local min = `delta' } cap ridder nctprob X `delta' `df' returns macro S_1 = `p' /* */ from `min' to `max' if _rc == 430 { local min = $S_1 - 1 local max = $S_1 + 1 qui ridder nctprob X `delta' `df' returns macro S_1 = `p' /* */ from `min' to `max' } if _rc == 409 { di in re "internal error in guessing range: solution not bounded." di in wh " (please report this error to T. J. Steichen at " di in wh " steicht@rjrt.com, along with command attempted)." global S_1 = . return scalar t = . exit 409 } if _rc == 198 { di in re "nctinv requires version 3.0.5 or later of integ." di in wh " (use " in ye "which integ " _c di in wh "to check version number)." global S_1 = . return scalar t = . exit 198 } return scalar t = $S_1 di _n in gr " t' =" in ye %10.6f $S_1 di _n in gr " P(t <= " in ye $S_1 in gr " | delta = " _c di in gr `delta' ", df = " `df' _c di in gr ") = " `p' end