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: proportion confidence intervals <0 and >1 in MI SVY
From
Steve Samuels <[email protected]>
To
[email protected]
Subject
Re: st: proportion confidence intervals <0 and >1 in MI SVY
Date
Tue, 11 May 2010 16:25:33 -0400
Great, Austin! Thanks!
Steve
On Tue, May 11, 2010 at 2:42 PM, Austin Nichols <[email protected]> wrote:
> Steve--
>
> I think -nlcom- is harder to integrate with the poster's mi/svy setup, but try:
>
> clear all
> program ilogit
> version 11
> tempname v b d
> mat `v'=e(V_mi)
> mat `b'=e(b_mi)
> mat `d'=e(df_mi)
> forv i=1/`=colsof(`b')' {
> loc l: word `i' of `c'
> loc df=`d'[1,`i']
> loc pr=`b'[1,`i']
> loc xb=ln(`pr'/(1-`pr'))
> loc se=sqrt(`v'[`i',`i'])/`pr'/(1-`pr')
> loc bound=invttail(`df',.025)*`se'
> loc ll = exp(`xb'-`bound')
> loc ul = exp(`xb'+`bound')
> loc ll = `ll'/(1+`ll')
> loc ul = `ul'/(1+`ul')
> di as res `l',`pr' " (" `ll' "," `ul' ")"
> }
> end
> webuse mheart1s20
> g acat=age-mod(age,20)
> g w=100+_mi_id
> mi svyset [pw=w]
> mi estimate:svy:proportion acat
> ilogit acat
> mi extract 0, clear
> svy:tab acat, ci
>
> * or set up as estimation cmd to use e.g. -estout- (on SSC)
> clear all
> program misvypr, eclass
> version 11
> if replay() {
> syntax [anything]
> eret di
> }
> else {
> syntax varname [, f(string) Percent ]
> if "`f'"=="" loc f `f' "%7.4f"
> if "`percent'"!="" loc m 100*
> qui mi estimate:svy:proportion `varlist'
> tempname v b d o o1 o2 o3
> mat `v'=e(V_mi)
> mat `b'=e(b_mi)
> mat `d'=e(df_mi)
> loc c: colnames `b'
> forv i=1/`=colsof(`b')' {
> loc l: word `i' of `c'
> loc df=`d'[1,`i']
> loc pr=`b'[1,`i']
> loc xb=ln(`pr'/(1-`pr'))
> loc se=sqrt(`v'[`i',`i'])/`pr'/(1-`pr')
> loc bound=invttail(`df',.025)*`se'
> loc ll = exp(`xb'-`bound')
> loc ul = exp(`xb'+`bound')
> loc ll = `ll'/(1+`ll')
> loc ul = `ul'/(1+`ul')
> di as res `l',`f' `m'`pr' " (" `f' `m'`ll' "," `f' `m'`ul' ")"
> mat `o1'=nullmat(`o1'),`m'`pr'
> mat `o2'=nullmat(`o2'),`m'`ll'
> mat `o3'=nullmat(`o3'),`m'`ul'
> loc c1 `c1' pr:`l'
> loc c2 `c2' lb:`l'
> loc c3 `c3' ub:`l'
> }
> mat colnames `o1'=`c1'
> mat colnames `o2'=`c2'
> mat colnames `o3'=`c3'
> mat `o'=`o1',`o2',`o3'
> eret post `o'
> eret local depvar "`varlist'"
> eret local cmd "misvypr"
> eret local properties "b"
> }
> end
> webuse mheart1s20
> g acat=age-mod(age,20)
> g w=100+_mi_id
> mi svyset [pw=w]
> misvypr acat
> est sto pr
> esttab pr, unstack
> mi extract 0, clear
> svy:tab acat, ci
>
>
> On Tue, May 11, 2010 at 11:39 AM, Steve Samuels <[email protected]> wrote:
>> Here's the corrected version. I also added the display of all the
>> proportions from -svy: prop-. Sorry for the error.
>>
>> Steve
>>
>> ************CODE BEGINS***********
>> capture program drop _all
>> program backlogit
>> nlcom log($parm/(1-$parm))
>> scalar lparm = el(r(b),1,1)
>> scalar se = sqrt(el(r(V),1,1))
>> scalar bound = invttail(e(df_r),.025)*se
>> scalar ll = exp(lparm -bound)
>> scalar ul = exp(lparm +bound)
>> scalar ll = ll/(1+ll)
>> scalar ul = ul/(1+ul)
>> di %9.4f $parm %9.4f ll %9.4f ul
>> end
>>
>> sysuse auto,clear
>> svyset _n
>> svy: prop rep78
>> levelsof rep78, local(levels)
>> foreach x of local levels{
>> global parm _b[`x']
>> backlogit
>> }
>> ********CODE ENDS*********************
>>
>>
>> On Tue, May 11, 2010 at 11:18 AM, Steve Samuels <[email protected]> wrote:
>>> There's an error someplace in this program, so please disregard for
>>> the time being.
>>>
>>> Steve
>>>
>>>> On Tue, May 11, 2010 at 8:44 AM, Paul Shattuck <[email protected]> wrote:
>>>>> Hi,
>>>>>
>>>>> I am analyzing imputed survey data using the MI SVY estimation commands. I am estimating proportions and requesting confidence intervals (syntax below). However, many of the confidence intervals are falling outside of 0,1 bounds. The tab confidence intervals available in plain SVY (without MI) are generated using a logistic transform that prevents this problem. However, the tab procedure is not available in MI estimation.
>>>>>
>>>>> Can anyone suggest a work-around that will let me obtain proportion confidence intervals in MI SVY estimation that remain within the 0,1 bounds?
>>>>>
>>>>> mi estimate: svy, subpop(if var1==1): proportion var2
>>>>>
>>>>> Thank you,
>>>>>
>>>>> Paul
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
--
Steven Samuels
[email protected]
18 Cantine's Island
Saugerties NY 12477
USA
Voice: 845-246-0774
Fax: 206-202-4783
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/