2012-04-13 3 views
0

Я использую функцию pgmm от plm пакета для R. Регрессии работают, и я могу вызвать результаты, однако, прошу резюме дает следующее сообщение об ошибке:pgmm от plm package сводка ошибка

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

Я импортировал данные от Всемирного банка с использованием пакета WDI:

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 

Вызов результатов следующим образом.

EQ 

Но в сводке (ниже) приводится сообщение об ошибке, упомянутое выше.

summary(EQ) 
+0

пример не запускается (больше) – Helix123

ответ

3

Я думаю, что ошибка происходит потому, что summary.pgmm пытается сделать тест Arelland-Bond второго порядка серийной корреляции ваших данных, но ваши данные имеют только две точки (2008 и 2009), так что не удается.

Чтобы устранить эту проблему, вы можете исправить эту функцию, чтобы она проверяла, есть ли у вас только две точки в наборе данных и выполняется тест, только если у вас более двух точек. Я обеспечиваю исправленную функцию ниже:

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 
} 

Вы могли бы хотеть написать автору plm пакета и показать ему этот пост. Автор сможет написать менее «хакерский» патч.

Использование собственных (слегка измененные) данные примера, вот как бы вы использовали функцию:

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

я получаю следующее сообщение об ошибке: 'Ошибка в метод UseMethod («vcov»): не применимый метод для «vcov», примененный к объекту класса «формула» ' –

+0

Хм, я добавил простой пример использования выше. Вы получаете ту же ошибку? – nograpes