Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Thomas Jacobs <thomasjacobs@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: Guidance on matrix inversion for OLS in mata |
Date | Tue, 27 Apr 2010 11:34:04 -0500 |
Antoine, Thanks for the reply. I caught my first error but appreciate the suggestion as it addresses the missing values issue automatically. Tom On Tue, Apr 27, 2010 at 11:29 AM, Antoine Terracol <Antoine.Terracol@univ-paris1.fr> wrote: > Hi Thomas, > > have a look at cross() in the mata help files. > > invsym(cross(X,X)) produces (X'X)^-1 > > > Antoine > > On 27/04/2010 18:17, Thomas Jacobs wrote: >> >> Austin, >> >> Thanks for the reply. I guess I have no choice but to do as you >> suggest or else rewrite the program entirely in Stata. I don't have >> the days it always takes me to decipher how to do the stata mata data >> transfer for this project at present. Every time I sit down to do >> something like this I always feel it a roll of the dice. Do I go the >> mata route and discover what should have been done in stata or go the >> stata route and discover the opposite! >> >> Here is a short excerpt of the problem. I am simply trying to compute >> x'x inverse for a 100 trading day time series of index returns and use >> it to solve for betahat for a similar time series of firm returns >> where the latter often has one or more missing values. >> >> Here are the initial steps I take in mata and will use an example with >> no missing values: >> >> X=J(100,2,1) >> X[.,2]=LnBAATreasSprd[800::899] >> : X >> 1 2 >> +-------------------------------+ >> 1 | 1 -.005838091 | >> 2 | 1 -.0063325767 | >> 3 | 1 .0100309728 | >> 4 | 1 .0040479107 | >> 5 | 1 .000136131 | >> 6 | 1 .00040839 | >> 7 | 1 -.0148075884 | >> 8 | 1 -.0107393684 | >> 9 | 1 -.002842935 | >> 10 | 1 .0066983248 | >> 11 | 1 -.0093153818 | >> 12 | 1 -.0502348617 | >> 13 | 1 -.0178726967 | >> 14 | 1 .0145704737 | >> 15 | 1 -.0073333359 | >> 16 | 1 -.0029384219 | >> 17 | 1 -.0095219389 | >> 18 | 1 -.0128216762 | >> 19 | 1 -.0150571838 | >> 20 | 1 .005833914 | >> 21 | 1 .0069765295 | >> 22 | 1 .0038266596 | >> 23 | 1 -.0067447214 | >> 24 | 1 -.0082368711 | >> 25 | 1 .0079292208 | >> 26 | 1 -.0185827948 | >> 27 | 1 -.0081839114 | >> 28 | 1 .0103758555 | >> 29 | 1 -.007115229 | >> 30 | 1 -.0043146866 | >> 31 | 1 .0007379653 | >> 32 | 1 -.0010016384 | >> 33 | 1 .0068858997 | >> 34 | 1 -.0044625248 | >> 35 | 1 .0031520503 | >> 36 | 1 -.0554844476 | >> 37 | 1 .0113020828 | >> 38 | 1 .0031746107 | >> 39 | 1 .0117888227 | >> 40 | 1 -.0010267079 | >> 41 | 1 .0095236665 | >> 42 | 1 .0261100251 | >> 43 | 1 -.0126527818 | >> 44 | 1 -.0114778923 | >> 45 | 1 .0066052717 | >> 46 | 1 -.0084775724 | >> 47 | 1 -.0032715374 | >> 48 | 1 -.0015591006 | >> 49 | 1 .0142634539 | >> 50 | 1 .0003712231 | >> 51 | 1 -.0077179475 | >> 52 | 1 .0082479911 | >> 53 | 1 .0071813553 | >> 54 | 1 .0058756177 | >> 55 | 1 -.0082988022 | >> 56 | 1 -.0003692649 | >> 57 | 1 -.0046538925 | >> 58 | 1 -.0049419519 | >> 59 | 1 .0040403828 | >> 60 | 1 -.0099174296 | >> 61 | 1 .0231989622 | >> 62 | 1 -.0097859399 | >> 63 | 1 -.0028060512 | >> 64 | 1 -.0028140107 | >> 65 | 1 .0092088645 | >> 66 | 1 .0032609063 | >> 67 | 1 .0080019441 | >> 68 | 1 .0002604046 | >> 69 | 1 .0027563504 | >> 70 | 1 -.0134371053 | >> 71 | 1 .0051452187 | >> 72 | 1 .0188821666 | >> 73 | 1 .0129679879 | >> 74 | 1 .0097926175 | >> 75 | 1 .0015559109 | >> 76 | 1 -.0006521898 | >> 77 | 1 .0055551799 | >> 78 | 1 .0016954662 | >> 79 | 1 0 | >> 80 | 1 -.0011965502 | >> 81 | 1 -.0123975417 | >> 82 | 1 .0008581794 | >> 83 | 1 .0113398973 | >> 84 | 1 -.0044504236 | >> 85 | 1 -.0101748193 | >> 86 | 1 .0006073291 | >> 87 | 1 .0028294155 | >> 88 | 1 -.0016158026 | >> 89 | 1 -.009393123 | >> 90 | 1 -.0073215333 | >> 91 | 1 .0056367237 | >> 92 | 1 -.0044041635 | >> 93 | 1 .0046085101 | >> 94 | 1 .0162160564 | >> 95 | 1 .0047139199 | >> 96 | 1 -.0005505134 | >> 97 | 1 .0033981025 | >> 98 | 1 .034180887 | >> 99 | 1 -.0102245966 | >> 100 | 1 -.0060580331 | >> +-------------------------------+ >> >> and the inverse step with a partial excerpt (all values are zero save >> for three cells): >> : invsym(X*X') >> [symmetric] >> 1 2 3 4 >> 5 >> >> +---------------------------------------------------------------------------- >> 1 | 0 >> 2 | 0 0 >> 3 | 0 0 0 >> 4 | 0 0 0 0 >> 5 | 0 0 0 0 >> 0 >> 6 | 0 0 0 0 >> 0 >> 7 | 0 0 0 0 >> 0 >> 8 | 0 0 0 0 >> 0 >> 9 | 0 0 0 0 >> 0 >> 10 | 0 0 0 0 >> 0 >> 11 | 0 0 0 0 >> 0 >> 12 | 0 0 0 0 >> 0 >> 13 | 0 0 0 0 >> 0 >> 14 | 0 0 0 0 >> 0 >> 15 | 0 0 0 0 >> 0 >> 16 | 0 0 0 0 >> 0 >> 17 | 0 0 0 0 >> 0 >> 18 | 0 0 0 0 >> 0 >> 19 | 0 0 0 0 >> 0 >> 20 | 0 0 0 0 >> 0 >> 21 | 0 0 0 0 >> 0 >> 22 | 0 0 0 0 >> 0 >> 23 | 0 0 0 0 >> 0 >> 24 | 0 0 0 0 >> 0 >> 25 | 0 0 0 0 >> 0 >> 26 | 0 0 0 0 >> 0 >> 27 | 0 0 0 0 >> 0 >> 28 | 0 0 0 0 >> 0 >> 29 | 0 0 0 0 >> 0 >> 30 | 0 0 0 0 >> 0 >> 31 | 0 0 0 0 >> 0 >> 32 | 0 0 0 0 >> 0 >> 33 | 0 0 0 0 >> 0 >> 34 | 0 0 0 0 >> 0 >> 35 | 0 0 0 0 >> 0 >> 36 | 0 0 0 0 >> 0 >> 37 | 0 0 0 0 >> 0 >> 38 | 0 0 0 0 >> 0 >> 39 | 0 0 0 0 >> 0 >> 40 | 0 0 0 0 >> 0 >> >> qrinv gives something similar with a few more non-zero values while >> cholinv and luinv produce nulls. pinv does work in this case. >> Suffice it to say I have no problem regressing a similar single firm >> return series on this index for the time period in question using >> regress. >> >> If I am missing something, please let me know. Otherwise, I guess I >> need to go to stata or do a better job of reproducing regress! Thanks >> again. >> >> Tom >> On Tue, Apr 27, 2010 at 10:23 AM, Austin Nichols >> <austinnichols@gmail.com> wrote: >>> >>> Thomas Jacobs<thomasjacobs@gmail.com>: >>> Zero is not a problem, but you should expunge the missings first; >>> however you seem to be trying to rewrite -regress- as you go, which is >>> far from a good idea. Why *not* export your vectors to Stata and run >>> -regress- and let Stata handle the sample selection and matrix >>> inversion for you? >>> >>> Maybe if you give us a simple example with real numbers, the problem >>> will be clearer and you can get better guidance... >>> >>> On Tue, Apr 27, 2010 at 12:45 AM, Thomas Jacobs<thomasjacobs@gmail.com> >>> wrote: >>>> >>>> Hi, >>>> >>>> I am trying to perform a lengthy series of simulations to examine some >>>> event study methodologies. I have moved to mata for the bulk of the >>>> work but find that for those cases where I wish to use a market model >>>> approach requiring an OLS regression to establish abnormal returns I >>>> am unable to generate an inverse for x'x in seeking to solve for beta >>>> hat. I am typically working with vectors that have 1. missing values, >>>> 2. zero values, and 3. very small values close to zero (within a >>>> couple of decimal places such as -.01 or .005). I have tried mata's >>>> cholinv, invsym, pinv, luinv, and qrinv (I realize that some of these >>>> are probably inappropriate for my problem but I am no expert) and >>>> generally get an inverse matrix of missing values or bizarre results >>>> like a single populated row. >>>> >>>> I would prefer not to go back and forth between stata and mata to use >>>> the stata regress function unless that is the only way to accomplish >>>> this effort. >>>> >>>> Can anyone offer general guidance on how to proceed here? Thanks. >>>> >>>> Tom >>> >>> * >>> * 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/ >> >> >> >> -- >> Thomas Jacobs >> >> * >> * 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/ >> > > -- > Ce message a ete verifie par MailScanner > pour des virus ou des polluriels et rien de > suspect n'a ete trouve. > > * > * 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/ > -- Thomas Jacobs * * 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/