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]

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:17:41 -0500 |

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/

**Follow-Ups**:**Re: st: Guidance on matrix inversion for OLS in mata***From:*Thomas Jacobs <thomasjacobs@gmail.com>

**Re: st: Guidance on matrix inversion for OLS in mata***From:*Antoine Terracol <Antoine.Terracol@univ-paris1.fr>

**References**:**st: Guidance on matrix inversion for OLS in mata***From:*Thomas Jacobs <thomasjacobs@gmail.com>

**Re: st: Guidance on matrix inversion for OLS in mata***From:*Austin Nichols <austinnichols@gmail.com>

- Prev by Date:
**AW: st: RE: local macro** - Next by Date:
**Re: st: Guidance on matrix inversion for OLS in mata** - Previous by thread:
**Re: st: Guidance on matrix inversion for OLS in mata** - Next by thread:
**Re: st: Guidance on matrix inversion for OLS in mata** - Index(es):