Skip to content
Prev 26913 / 29559 Next

spgm

Thanks for the help, I appreciate it :). It works quite well.

One last question, I tried some diagnostics on the spgm models, but it never worked out as it always returned an error. Basically what I would like to do is a test (e.g. LM or information criterion) that would help me to select the proper weight matrix for the model.


E.g.:

library(splm)
data(Produc, package="plm")
data(usaww)
fm <- log(gsp)~log(pcap)+log(pc)+log(emp)+unemp
matrix1 <- kronecker(diag(length(unique(Produc$year))), usaww)
listw1 <- mat2listw(matrix1, style="W")
tr <- trW(as(listw1, "CsparseMatrix"), m=100)
GM <- spgm(fm, data=Produc, listw = usaww, moments="within", spatial.error = FALSE, lag = TRUE)
GMi <- spgm(update(fm, . ~ . - unemp), data=Produc, listw = usaww, moments="within", spatial.error = FALSE, lag = TRUE, endog = ~ unemp,
            instruments = ~ hwy + water + util)
slmtest(GM)
Error in UseMethod("slmtest") :
  no applicable method for 'slmtest' applied to an object of class "stsls"


Is it possible to maybe compute the Pseudo-R2?

Best,

Martin

-----Original Message-----
From: Roger Bivand [mailto:Roger.Bivand at nhh.no]
Sent: Thursday, October 11, 2018 10:00 AM
To: Hul?nyi Martin <martin.hulenyi at vlada.gov.sk>
Cc: r-sig-geo at r-project.org; Giovanni Millo <giovanni.millo at generali.com>
Subject: Re: [R-sig-Geo] spgm
On Wed, 3 Oct 2018, Roger Bivand wrote:

            
My cut at an example:

library(splm)
data(Produc, package="plm")
data(usaww)
matrix1 <- kronecker(diag(length(unique(Produc$year))), usaww)
listw1 <- mat2listw(matrix1, style="W")
tr <- trW(as(listw1, "CsparseMatrix"), m=100) GM <- spgm(fm, data=Produc, listw = usaww, moments="within", spatial.error = FALSE, lag = TRUE) impacts(GM, listw=listw1) impacts(GM, tr=tr) GMi <- spgm(update(fm, . ~ . - unemp), data=Produc, listw = usaww, moments="within", spatial.error = FALSE, lag = TRUE, endog = ~ unemp, instruments = ~ hwy + water + util)
summary(GMi)
GMii <- spgm(update(fm, . ~ . - unemp - log(emp)), data=Produc, listw = usaww, moments="within", spatial.error = FALSE, lag = TRUE, endog = ~ unemp + log(emp), instruments = ~ hwy + water + util)
summary(GMii)

The summary objects show the coefficients, etc. for endogeneous variables first, before the spatial coefficient. spdep::impacts.stsls() expects the spatial coefficient listed before the variables (dropping the intercept).
If you use:

put_endog_last <- function(stsls) {
   if (is.null(stsls$endog)) stop("no endogenous variables in fitted
model")
   n_endog <- length(all.vars(stsls$endog))
   coefs <- stsls$coefficients
   n_coefs <- length(coefs)
   flip <- c((n_endog+1):n_coefs, 1:n_endog)
   stsls$coefficients <- coefs[flip]
   stsls$var <- stsls$var[flip, flip]
   stsls
}

to flip the orderings in the splm::spgm() output object, impacts can be calculated using the spdep::impacts.stsls() method. I've added the splm maintainer to CC - I'm unsure whether other functions in splm (or other argument settings when lag = TRUE) would be affected by patching
splm::spgm() itself.

Hope this helps,

Roger
--
Roger Bivand
Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: Roger.Bivand at nhh.no
http://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
[eco.jpg]       Pred vytla?en?m tohto mailu zv??te pros?m vplyv na ?ivotn? prostredie. ?akujeme.
Please consider the environment before printing this e-mail. Thanks