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]

From |
Antoine Terracol <Antoine.Terracol@univ-paris1.fr> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Guidance on matrix inversion for OLS in mata |

Date |
Tue, 27 Apr 2010 18:29:09 +0200 |

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/

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

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

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

- Prev by Date:
**Re: st: Guidance on matrix inversion for OLS in mata** - Next by Date:
**Re: AW: st: RE: local macro** - 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):