Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R plm包中的pgmm给出了汇总错误_R_Plm - Fatal编程技术网

R plm包中的pgmm给出了汇总错误

R plm包中的pgmm给出了汇总错误,r,plm,R,Plm,我正在尝试使用plm软件包中的pgmm功能,用于R。回归运行,我可以调用结果,但是,请求摘要会出现以下错误: Error in t(y) %*% x : non-conformable arguments 我使用WDI软件包从世界银行导入了数据: library(plm) # load package library(WDI) # Load package COUNTRIES <- c("AGO","BEN","BWA",&qu

我正在尝试使用
plm
软件包中的
pgmm
功能,用于
R
。回归运行,我可以调用结果,但是,请求摘要会出现以下错误:

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
但下面的摘要给出了上面提到的错误消息

summary(EQ)

我认为出现错误是因为
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
}

我认为出现错误是因为
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
}

我得到以下错误:
error in UseMethod(“vcov”):没有适用于“vcov”的方法应用于类“formula”的对象,我在上面添加了一个简单的用例。你得到了相同的错误吗?我得到了以下错误:
error-in-UseMethod(“vcov”):没有适用于“公式”类对象的“vcov”方法。
Hm,我在上面添加了一个简单的用例。您是否收到相同的错误?示例不再运行示例不再运行
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)