2012-04-13 10 views
0

Ich versuche, die pgmm Funktion aus dem plm Paket für R zu verwenden. Die Regressions läuft und ich kann die Ergebnisse aufrufen, jedoch für die Zusammenfassung zu fragen gibt den folgenden Fehler:pgmm von plm Paket Zusammenfassung Fehler

Error in t(y) %*% x : non-conformable arguments 

ich die Daten der Weltbank das WDI-Paket mit importiert haben:

library(WDI) # Load package 
COUNTRIES <- c("AGO","BEN","BWA","BFA","BDI") # Specify countries 
INDICATORS <- c("NY.GDP.PCAP.KN", "SP.DYN.TFRT.IN", "SP.DYN.CBRT.IN", "SP.POP.TOTL") # Specify indicators 
LONG <- WDI(country=COUNTRIES, indicator=INDICATORS, start=2005, end=2009, extra=FALSE) # Load data 
PANEL <- pdata.frame(LONG, c("iso2","year")) # Transform to PANEL dataframe 
PANEL$year <- as.numeric(as.character(PANEL$year)) # Encode year 
EQ <- pgmm(log(fertility) ~ log(gdp) + lag(log(fertility), 2) | lag(log(fertility), 2), data=PANEL, effect="twoways", model="twosteps", gmm.inst=~log(fertility)) # Run regression 

Der Aufruf der Ergebnisse funktioniert wie folgt.

EQ 

Aber die Zusammenfassung (unten) gibt die oben genannte Fehlermeldung.

summary(EQ) 
+0

Beispiel läuft nicht (mehr) – Helix123

Antwort

3

Ich denke, der Fehler tritt auf, weil summary.pgmm versucht, eine zweite Bestellung Arelland-Bond-Test der seriellen Korrelation auf Ihre Daten zu tun, aber Ihre Daten haben nur zwei Punkte (2008 und 2009), so dass es nicht.

Um dieses Problem zu beheben, können Sie die Funktion so anpassen, dass sie überprüft, ob Sie nur zwei Punkte im Datensatz haben, und den Test nur ausführen, wenn Sie mehr als zwei Punkte haben. Ich stelle eine gepatchte Funktion unten:

summary.pgmm.patched <- function (object, robust = FALSE, time.dummies = FALSE, ...) 
{ 
    model <- plm:::describe(object, "model") 
    effect <- plm:::describe(object, "effect") 
    transformation <- plm:::describe(object, "transformation") 
    if (robust) { 
     vv <- vcovHC(object) 
    } 
    else { 
     vv <- vcov(object) 
    } 
    if (model == "onestep") 
     K <- length(object$coefficients) 
    else K <- length(object$coefficients[[2]]) 
    Kt <- length(object$args$namest) 
    if (!time.dummies && effect == "twoways") 
     rowsel <- -c((K - Kt + 1):K) 
    else rowsel <- 1:K 
    std.err <- sqrt(diag(vv)) 
    b <- coef(object) 
    z <- b/std.err 
    p <- 2 * pnorm(abs(z), lower.tail = FALSE) 
    CoefTable <- cbind(b, std.err, z, p) 
    colnames(CoefTable) <- c("Estimate", "Std. Error", "z-value", 
     "Pr(>|z|)") 
    object$CoefTable <- CoefTable[rowsel, , drop = FALSE] 
    object$sargan <- sargan(object) 
    object$m1 <- plm:::mtest(object, 1, vv) 

    # The problem line: 
    # object$m2 <- mtest(object, 2, vv) 

    if (length(object$residuals[[1]]) > 2) object$m2 <- plm:::mtest(object, 2, vv) 
    object$wald.coef <- plm:::wald(object, "param", vv) 
    if (plm:::describe(object, "effect") == "twoways") 
     object$wald.td <- plm:::wald(object, "time", vv) 
    class(object) <- "summary.pgmm" 
    object 
} 

Vielleicht möchten Sie an den Autor des plm Paket schreiben und ihm diesen Beitrag zeigen. Der Autor wird in der Lage sein, einen weniger "hacky" Patch zu schreiben.

Ihre eigene (leicht modifiziert) Beispieldaten verwenden, ist hier, wie Sie die Funktion verwenden würden:

library(WDI) # Load package 
library(plm) 

COUNTRIES <- c("AGO","BEN","BWA","BFA","BDI") # Specify countries 
INDICATORS <- c("NY.GDP.PCAP.KN", "SP.DYN.TFRT.IN", "SP.DYN.CBRT.IN", "SP.POP.TOTL") #  Specify indicators 
LONG <- WDI(country=COUNTRIES, indicator=INDICATORS, start=2005, end=2009, extra=FALSE) #  Load data 
PANEL <- pdata.frame(LONG, c("iso2c","year")) # Transform to PANEL dataframe 
PANEL$year <- as.numeric(as.character(PANEL$year)) # Encode year 
names(PANEL) [c(4,5)] = c('gdp','fertility') 
EQ <- pgmm(log(fertility) ~ log(gdp) + lag(log(fertility), 2) | lag(log(fertility), 2),  data=PANEL, effect="twoways", model="twosteps", gmm.inst=~log(fertility)) # Run regression 

summary.pgmm.patched(EQ) 
+0

ich die folgende Fehlermeldung erhalten: 'Fehler in UseMethod ("vcov"): keine anwendbare Methode für "vcov" angewendet auf ein Objekt der Klasse "formula" ' –

+0

Hm, ich habe oben einen einfachen Anwendungsfall hinzugefügt. Erhalten Sie den gleichen Fehler? – nograpes