这个spse包我debug了一下,感觉是有点问题。用spsepgm函数的时候,该函数调用splm包中的spgm函数后,再调用用spgm函数返回值results$rhs,而spgm返回值中并不包含rhs字段。所以返回值为NULL,这个时候程序根据该返回值建立新的矩阵时,就会出问题。我现在不清楚为什么会这样。考虑是不是因为splm版本问题,去官网下载了最老的版本(2012年的splm_1.0-00.tar.gz ),结果仍然没有发现rhs字段。也试着运行了一下程序,结果仍然和最新版本一样。反思起来,感觉可能的原因有以下几个:1.spse现有版本是是2011年4月份出的,而现有最老版本的splm是2012年出的,所以可能2012年版本就已经将spgm函数返回值中的rhs字段删掉了。2.rhs字段本身在R语言里有特定含义,返回值里即使不包含rhs字段,也可以调用。如果是这样那么可能就是我的函数参数设置有误,导致rhs字段总是为空。无论是那种情况,现在我都无法解决。先提出问题如下,希望R语言高手多多指教:1.rhs在R语言是否有特定含义,是否不用在result$中包含也可以通过result$rhs返回特定的值。2.如果R语言中rhs没有特定含义,那么一般的作为函数返回值的一个字段,他可能指代的是什么?我是否可以通过修改spsepgm函数中相应的参数,来获得原有程序中rhs所指代的值?。
相关代码::
第一段代码:spsepgm中出问题的那一段代码。这段代码est.res获得了spgm的返回值, 然后bigk <- bigk + est.res[[i]]$rhs语句调用了spgm返回值的rhs字段。但是实际上spgm返回值中是不包含rhs字段的,所以bigk值为empty。这导致后边的语句bigx <- matrix(0, NT * eq, bigk)出错,程序停止 运行
——————————————————————————————————
for (i in 1:eq) {
est.res[[i]] <- spgm(formula = formula[[i]], data = data,
index = index, listw = w.list[[i]], model = model,
lag = lag[[i]], spatial.error = spatial.error[[i]],
moments = moments, endog = endog, instruments = instruments,
verbose = verbose, method = method, control = list())
bigk <- bigk + est.res[[i]]$rhs
expv <- c(expv, length(est.res[[i]]$coefficients))
namesx[[i]] <- names(est.res[[i]]$coefficients)
rhos <- c(rhos, est.res[[i]]$rho[1])
}
Umat <- matrix(, NT, eq)
bigy <- matrix(0, NT * eq, 1)
bigx <- matrix(0, NT * eq, bigk)
————————————————————————————————————————————————————————————————
第二段代码:这段代码执行前请library(“spse”)。前面几句是读取R中的例子数据和设置方程。主要是最后一句,是我的spsegm参数设置。我不清楚现有设置是否有问题,请教高手。
data(Produc, package = "Ecdat")
data(usaww)
eq1 <- log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp
eq2 <- log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp
eq3 <- log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp
formula<-list(tp1 = eq1, tp2 = eq2, tp3=eq3)
w<-mat2listw(usaww)
se<-spsepgm(formula = formula,data = Produc,index = NULL,listw = w,model = "within",lag = c(TRUE,TRUE,TRUE),spatial.error = c(FALSE,FALSE,FALSE),moments = "initial",endog = ~log(emp)+unemp,instruments = ~unemp)
——————————————————————————————————————————————————————
程序运行的错误提示:
Error in matrix(0, NT * eq, bigk) :
invalid 'ncol' value (too large or NA)
|