2012-04-05 1 views
5

Est-ce que quelqu'un sait s'il existe un paquet qui exécuterait les régressions de Fama-MacBeth dans R et calculerait les erreurs-types? Je suis au courant du paquet sandwich et de sa capacité à estimer les erreurs-types de Newey-West, ainsi qu'à fournir des fonctions pour le regroupement. Cependant, je n'ai rien vu à propos de Fama-MacBeth.Erreurs standard de Fama MacBeth dans R

+3

'("sos"); findFn ("macbeth") 'ne trouve rien, mais' findFn ("fama") 'obtient quelques hits dans les paquets liés à la finance. –

Répondre

11

Le package plm permet d'estimer les régressions et les SE de Fama-MacBeth.

require(foreign) 
require(plm) 
require(lmtest) 
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta") 
fpmg <- pmg(y~x, test, index=c("year","firmid")) ##Fama-MacBeth 

> ##Fama-MacBeth 
> coeftest(fpmg) 

t test of coefficients: 

      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 0.031278 0.023356 1.3392 0.1806  
x   1.035586 0.033342 31.0599 <2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

A noter cependant que cette méthode ne fonctionne que si vos données peuvent être sous la contrainte à un pdata.frame. (. Il échouera si vous avez "duplicate couples (time-id)")

Pour plus de détails voir:

bibliothèque
+0

dans l'exemple coeftest (fpmg) ne gère pas les erreurs standard à double cluster. S'il vous plaît montrer comment le faire pour fpmg. http://stackoverflow.com/questions/37441230/r-no-way-to-get-double-clustered-standard-errors-for-an-object-of-class-cpmg –

+0

Une personne a écrit que nous devons échanger N et T et tout le monde le fait. Je vois d'autres qui l'ont interrogé, mais ils ont été réduits au silence;) –

+0

Les deux ordres fonctionnent sur 'df.petersen'. 'pmg' est supposé faire la moyenne des séries temporelles. Parfois, la moyenne des croisements a un sens théorique. Dans la régression FM: la variable RHS est un indice: identique pour tous les identifiants. Essayez: 'df.petersen2 <-data.table (df.petersen); df.petersen2 [, ': =' (x = df.petersen2 [firmid == 1, x]), par = "firmid"] '. Ensuite, essayez 'summary (pmg (y ~ x, données = df.petersen2, index = c (" année "," firmid ")))'. Vous obtiendrez des NA, car vous exécutez des croisements sans variation RHS. 'pmg' n'est pas bien documenté, donc je ne suis pas sûr s'il fait une régression FM correcte, mais' index = c ("firmid", "année")) 'produit une estimation. –

Questions connexes