0

のパッケージのpgmm関数を使用しようとしています。回帰が実行され、結果を呼び出すことができますが、要約を要求すると次のエラーが発生します。plmR

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

WDIパッケージを使用して世界銀行からデータをインポートしました。

library(plm) # load package
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("iso2c","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)
4

1 に答える 1

4

データに対してシリアル相関の2次Arelland-Bondテストを実行しようとしたためにエラーが発生したと思いますsummary.pgmmが、データには2つのポイント(2008と2009)しかないため、失敗します。

この問題を修正するには、関数にパッチを適用して、データセットにポイントが2つしかないかどうかをチェックし、ポイントが3つ以上ある場合にのみテストを実行するようにします。以下にパッチを適用した関数を提供します。

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)
于 2012-04-13T15:14:19.603 に答える