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]

st: RE: Which inverter? (was: RE: RE: ivreg2 weak-id statistic and quadratic terms)


From   "Schaffer, Mark E" <M.E.Schaffer@hw.ac.uk>
To   <statalist@hsphsun2.harvard.edu>
Subject   st: RE: Which inverter? (was: RE: RE: ivreg2 weak-id statistic and quadratic terms)
Date   Tue, 21 Feb 2012 11:12:42 -0000

Hi all.  Just a quick update to say that Miroslav wrote to me directly
and confirmed that the source of the problem was scaling in his case as
well.

--Mark 

NB: With apologies for the thread-changing ... Miroslav wrote to me
directly because for some reason he didn't receive my Statalist post,
and only spotted it on the Statalist archive.  I've had a similar
experience recently - something was posted to Statalist and showed up in
the Statalist archive, but I didn't receive it as an email even though I
was getting plenty of other Statalist posts at the time.  Has anybody
else had this problem?

> -----Original Message-----
> From: owner-statalist@hsphsun2.harvard.edu 
> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of 
> Schaffer, Mark E
> Sent: 21 February 2012 00:11
> To: statalist@hsphsun2.harvard.edu
> Subject: st: Which inverter? (was: RE: RE: ivreg2 weak-id 
> statistic and quadratic terms)
> 
> Hi all.  I have traced the problem to the choice of inverter. 
>  At least, it's definitely the problem in the auto dataset 
> example below, and I'll bet it's the source of Miroslav's 
> problem as well.
> 
> In most places, -ivreg2- and -ranktest- use Mata's general-purpose
> invsym() inverter.  In a few places they use Mata's QR 
> decomposition qrsolve().  It is where the latter is used that 
> things are going wrong.
> In the simple example I constructed with the auto data, 
> qrsolve() has problems but invsym() does not.
> 
> This is an interesting question.  What's the best choice of 
> inverter when faced with scaling problems?
> 
> Below is some simple Mata code and output corresponding to a 
> regression with the toy auto data set when the variables 
> create scaling problems.
> Stata's built-in -regress- is the benchmark.
> 
> In a nutshell:
> 
> invsym() reproduces the -regress- results.
> 
> lusolve() reproduces the -regress- results.
> 
> svsolve() runs into problems - without rescaling it goes badly wrong.
> 
> qrsolve() runs into problems - without rescaling it goes badly wrong.
> 
> I've had a look at the discussions in the manual, and I 
> didn't spot anything there that would explain this.
> 
> Would someone who knows more about numerical computing than 
> me care to comment?
> 
> --Mark
> 
> 
> Stata code:
> *********************************************************************
> sysuse auto, clear
> gen double weightsq=weight^2
> 
> * Rescaled to reduce scaling problems
> gen double weight1=weight/1000
> gen double weight1sq=(weight/1000)^2
> 
> * -regress- benchmark
> qui reg mpg turn weight weightsq
> mat list e(b)
> qui reg mpg turn weight1 weight1sq
> mat list e(b)
> 
> putmata y=mpg X=(turn weight weightsq 1) X1=(turn weight1 
> weight1sq 1), replace
> 
> mata:
> 
> XX=quadcross(X,X)
> Xy=quadcross(X,y)
> XX1=quadcross(X1,X1)
> Xy1=quadcross(X1,y)
> 
> "Comparing beta hat for (1) unscaled and (2) scaled data"
> 
> beta_inv=invsym(XX)*Xy
> beta_inv1=invsym(XX1)*Xy1
> beta_inv, beta_inv1
> 
> beta_lu=lusolve(XX,Xy)
> beta_lu1=lusolve(XX1,Xy1)
> beta_lu, beta_lu1
> 
> beta_sv=svsolve(XX,Xy)
> beta_sv1=svsolve(XX1,Xy1)
> beta_sv, beta_sv1
> 
> beta_qr=qrsolve(XX,Xy)
> beta_qr1=qrsolve(XX1,Xy1)
> beta_qr, beta_qr1
> 
> end
> *********************************************************************
> 
> 
> Output (using Stata 11.2)
> *********************************************************************
> . sysuse auto, clear
> (1978 Automobile Data)
> 
> . gen double weightsq=weight^2
> 
> . 
> . * Rescaled to reduce scaling problems
> . gen double weight1=weight/1000
> 
> . gen double weight1sq=(weight/1000)^2
> 
> . 
> . * -regress- benchmark
> . qui reg mpg turn weight weightsq
> 
> . mat list e(b)
> 
> e(b)[1,4]
>           turn      weight    weightsq       _cons
> y1    -.148733  -.01356202   1.345e-06   55.081765
> 
> . qui reg mpg turn weight1 weight1sq
> 
> . mat list e(b)
> 
> e(b)[1,4]
>           turn     weight1   weight1sq       _cons
> y1    -.148733  -13.562021   1.3448538   55.081765
> 
> . 
> . putmata y=mpg X=(turn weight weightsq 1) X1=(turn weight1 
> weight1sq 1), replace
> (1 vector, 2 matrices posted)
> 
> . 
> . mata:
> ------------------------------------------------- mata (type end to
> exit) ----------------------------------
> : 
> : XX=quadcross(X,X)
> 
> : Xy=quadcross(X,y)
> 
> : XX1=quadcross(X1,X1)
> 
> : Xy1=quadcross(X1,y)
> 
> : 
> : "Comparing beta hat for (1) unscaled and (2) scaled data"
>   Comparing beta hat for (1) unscaled and (2) scaled data
> 
> : 
> : beta_inv=invsym(XX)*Xy
> 
> : beta_inv1=invsym(XX1)*Xy1
> 
> : beta_inv, beta_inv1
>                   1              2
>     +-------------------------------+
>   1 |  -.1487330027   -.1487330027  |
>   2 |  -.0135620214    -13.5620214  |
>   3 |   1.34485e-06    1.344853823  |
>   4 |   55.08176484    55.08176484  |
>     +-------------------------------+
> 
> : 
> : beta_lu=lusolve(XX,Xy)
> 
> : beta_lu1=lusolve(XX1,Xy1)
> 
> : beta_lu, beta_lu1
>                   1              2
>     +-------------------------------+
>   1 |  -.1487330027   -.1487330027  |
>   2 |  -.0135620214    -13.5620214  |
>   3 |   1.34485e-06    1.344853823  |
>   4 |   55.08176484    55.08176484  |
>     +-------------------------------+
> 
> : 
> : beta_sv=svsolve(XX,Xy)
> 
> : beta_sv1=svsolve(XX1,Xy1)
> 
> : beta_sv, beta_sv1
>                   1              2
>     +-------------------------------+
>   1 |   .6585549729   -.1487330027  |
>   2 |   .0057662425    -13.5620214  |
>   3 |  -2.30511e-06    1.344853823  |
>   4 |   .0096556129    55.08176484  |
>     +-------------------------------+
> 
> : 
> : beta_qr=qrsolve(XX,Xy)
> 
> : beta_qr1=qrsolve(XX1,Xy1)
> 
> : beta_qr, beta_qr1
>                   1              2
>     +-------------------------------+
>   1 |   .6586963952   -.1487330027  |
>   2 |   .0057696338    -13.5620214  |
>   3 |  -2.30575e-06    1.344853823  |
>   4 |             0    55.08176484  |
>     +-------------------------------+
> 
> : 
> : end
> *********************************************************************
> 
> > -----Original Message-----
> > From: owner-statalist@hsphsun2.harvard.edu
> > [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of 
> Schaffer, 
> > Mark E
> > Sent: 20 February 2012 22:36
> > To: statalist@hsphsun2.harvard.edu
> > Subject: st: RE: ivreg2 weak-id statistic and quadratic terms
> > 
> > Hi Miroslav, hi all.
> > 
> > I've checked this with the toy auto dataset.  I can replicate this 
> > behaviour.
> > 
> > Miroslav - either before or after rescaling your covariates, do the 
> > estimated coefficients vary hugely in scale?
> > 
> > In my toy auto dataset example, I am pretty sure that it is 
> driven by 
> > scaling problems.  For example, after
> > 
> > sysuse auto, clear
> > gen double weight2=weight^2
> > ivreg2 price (mpg=turn) weight weight2
> > 
> > gives a large weak ID stat of 11.5.  But there are big scaling 
> > problems in the first-stage and main estimations, with 
> coeffs that are 
> > something like a factor of 10^8 different in magnitude.
> > 
> > If I estimate and just partial out the constant,
> > 
> > ivreg2 price (mpg=turn) weight weight2, partial(_cons)
> > 
> > the ill-conditioning is less pronounced and I get a weak ID stat of 
> > 0.73.
> > 
> > If I partial out all the exogenous covariates,
> > 
> > ivreg2 price (mpg=turn) weight weight2, partial(weight weight2)
> > 
> > the ill-conditioning is gone and I again get a weak ID stat of 0.73.
> > 
> > I will investigate further and will report back to the list 
> if I find 
> > anything more.  It may be that -ivreg2- could handle these 
> cases more 
> > robustly.
> > 
> > --Mark (ivreg2 coauthor)
> > 
> > > -----Original Message-----
> > > From: owner-statalist@hsphsun2.harvard.edu
> > > [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf 
> Of Miros Lav
> > > Sent: 20 February 2012 21:25
> > > To: statalist@hsphsun2.harvard.edu
> > > Subject: st: ivreg2 weak-id statistic and quadratic terms
> > > 
> > > Dear all,
> > > 
> > > I am using ivreg2 to estimate a model where a control
> > variable enters
> > > with a quadratic term. A simplified version of the command is as 
> > > follows
> > > 
> > > ivreg2 y   (a=instrument)  x x^2, r cluster(id).
> > > 
> > > Estimating this model results in a very large
> > Kleinbergen-Paap weak-id
> > > F statistic.
> > > 
> > > However, generating z=x/1000 and z^2=z*z and estimating the model
> > > 
> > > ivreg2 y   (a=instrument)  z z^2, r cluster(id)
> > > 
> > > results in a very low Kleinbergen-Paap weak-id F statistic.
> > > 
> > > (The z-statistics and significance levels in the first and second 
> > > stage regressions are the same as in the previous model.)
> > > 
> > > Does anyone have an idea why these two equivalent models 
> result in 
> > > very different Kleinbergen-Paap weak-id F statistic?
> > > 
> > > Thanks for your help!
> > > 
> > > Miroslav
> > > *
> > > *   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/
> > > 
> > 
> > 
> > --
> > Heriot-Watt University is a Scottish charity registered 
> under charity 
> > number SC000278.
> > 
> > Heriot-Watt University is the Sunday Times Scottish 
> University of the 
> > Year 2011-2012
> > 
> > 
> > 
> > *
> > *   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/
> > 
> 
> 
> --
> Heriot-Watt University is a Scottish charity registered under 
> charity number SC000278.
> 
> Heriot-Watt University is the Sunday Times Scottish 
> University of the Year 2011-2012
> 
> 
> 
> *
> *   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/
> 


-- 
Heriot-Watt University is a Scottish charity
registered under charity number SC000278.

Heriot-Watt University is the Sunday Times
Scottish University of the Year 2011-2012



*
*   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/


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