Nothing
# # # # # g2sls
ivplm.g2sls <-function(Y,X,H = NULL, endog = NULL,
twow, lag = FALSE, listw = NULL, listw2 = NULL,
lag.instruments = NULL, t, N, NT, Durbin = FALSE, xdur){
indic <- rep(1:N,t)
listwnn <- listw[1:N,1:N]
if(twow) listw2nn <- listw2[1:N,1:N]
##transform y
transy<-panel.transformations(Y,indic, type= "both")
ybetween<-transy[[2]]
ywithin<-transy[[1]]
ybetweennt<- rep(ybetween, t)
#check if the model is durbin and include the spatial lags
if(isTRUE(Durbin) | inherits(Durbin, "formula")){
if(inherits(Durbin, "formula")){
colnmx <- colnames(X)
colnameswx <- paste("lag_", colnames(xdur), sep="")
wx <- listw %*% xdur
X <- cbind(X, wx)
transx <- panel.transformations(X,indic, type= "both")
Xbetween <- transx[[2]]
Xwithin <- transx[[1]]
colnames(Xwithin) <- c(colnmx, colnameswx)
colnames(Xbetween) <- c(colnmx, colnameswx)
Xbetweennt<-matrix(,NT, ncol(Xbetween))
for (i in 1:ncol(Xbetween)) Xbetweennt[,i]<-rep(Xbetween[,i], t)
del <- which(diag(var(Xwithin))==0)
colnames(Xbetweennt)<- c(colnmx, colnameswx)
}
else{
colnmx <- colnames(X)
if(colnames(X)[1] == "(Intercept)"){
wx <- listw %*% X[,-1]
colnameswx <- paste("lag_", colnames(X)[-1], sep="")
}
else {
wx <- listw %*% X
colnameswx <- paste("lag_", colnames(X), sep="")
}
X <- cbind(X, wx)
transx <- panel.transformations(X,indic, type= "both")
Xbetween <- transx[[2]]
Xwithin <- transx[[1]]
colnames(Xwithin) <- c(colnmx, colnameswx)
colnames(Xbetween) <- c(colnmx, colnameswx)
Xbetweennt<-matrix(,NT, ncol(Xbetween))
for (i in 1:ncol(Xbetween)) Xbetweennt[,i]<-rep(Xbetween[,i], t)
del <- which(diag(var(Xwithin))==0)
colnames(Xbetweennt) <- c(colnmx, colnameswx)
}
}
else{
transx<-panel.transformations(X,indic, type= "both")
Xbetween<-transx[[2]]
Xwithin<-transx[[1]]
colnames(Xwithin)<-colnames(X)
colnames(Xbetween)<-colnames(X)
Xbetweennt<-matrix(,NT, ncol(Xbetween))
for (i in 1:ncol(Xbetween)) Xbetweennt[,i]<-rep(Xbetween[,i], t)
del <- which(diag(var(Xwithin))==0)
colnames(Xbetweennt) <- colnames(X)
}
if(!lag){
##transform the instruments H
transH<-panel.transformations(H, indic, type= "both")
Hbetween<-transH[[2]]
Hwithin<-transH[[1]]
Hbetweennt<-matrix(,NT, ncol(Hbetween))
for (i in 1:ncol(Hbetween)) Hbetweennt[,i]<-rep(Hbetween[,i], T)
##transform the endogenous variables endog
transendog <- panel.transformations(endog, indic, type= "both")
endogbetween <- transendog[[2]]
endogwithin <- transendog[[1]]
endogbetweennt<-matrix(,NT, ncol(endogbetween))
for (i in 1:ncol(endogbetween)) endogbetweennt[,i] <- rep(endogbetween[,i], t)
colnames(endogbetweennt)<-colnames(endog)
colnames(endogwithin)<-colnames(endog)
#W2SLS
resw<-spgm.tsls(as.matrix(ywithin), endogwithin, Xwithin, Hwithin )
sigma2v1<-resw$sse / ((N * (t -1)) - ncol(as.matrix(Xwithin[,-del])) - ncol(endogwithin))
#B2SLS
resb<-spgm.tsls(sqrt(t)*as.matrix(ybetween), sqrt(t)*as.matrix(endogbetween), sqrt(t)*Xbetween, sqrt(t)*as.matrix(Hbetween) )
sigma21<-resb$sse / resb$df
ystar<-ywithin/sqrt(sigma2v1) + ybetweennt/sqrt(sigma21)
xstar<-Xwithin/sqrt(sigma2v1) + Xbetweennt/sqrt(sigma21)
endogstar<-endogwithin/sqrt(sigma2v1) + endogbetweennt/sqrt(sigma21)
Hstar<-Hwithin/sqrt(sigma2v1) + Hbetweennt/sqrt(sigma21)
res<-spgm.tsls(ystar, endogstar, xstar, Hstar )
res$sigma1<-sigma21
res$sigmav<-sigma2v1
res$type <- "g2sls model without spatial lag"
}
else{
wy <- listw %*% Y
wy <- as.matrix(wy)
colnames(wy)<-"lambda"
wywithin <- listw %*% ywithin
wywithin <- as.matrix(wywithin)
colnames(wywithin)<-"lambda"
wybetween <- listwnn %*% as.matrix(ybetween)
colnames(wybetween) <- "lambda"
#WXwithin <- as.matrix(listw %*% Xwithin)
#WWXwithin <- as.matrix(listw %*% WXwithin)
#WXbetween <- as.matrix(listwnn %*% Xbetween)
#WWXbetween <- as.matrix(listwnn %*% WXbetween)
if(is.null(endog)){
if(twow){
WXwithin <- listw %*% Xwithin
WWXwithin <- listw %*% WXwithin
W2Xwithin <- listw2 %*% Xwithin
W2WXwithin <- listw2 %*% WXwithin
W2WWXwithin <- listw2 %*% WWXwithin
WXbetween <- listwnn %*% Xbetween
WWXbetween <- listwnn %*% WXbetween
W2Xbetween <- listw2nn %*% Xbetween
W2WXbetween <- listw2nn %*% WXbetween
W2WWXbetween <- listw2nn %*% WWXbetween
Hwithin <-cbind(as.matrix(WXwithin), as.matrix(WWXwithin), as.matrix(W2Xwithin), as.matrix(W2WXwithin), as.matrix(W2WWXwithin))
Hbetween <-cbind(as.matrix(WXbetween), as.matrix(WWXbetween), as.matrix(W2Xbetween), as.matrix(W2WXbetween), as.matrix(W2WWXbetween))
}
else{
WXwithin <- listw %*% Xwithin
WWXwithin <- listw %*% WXwithin
Hwithin <-cbind(as.matrix(WXwithin), as.matrix(WWXwithin))
WXbetween <- listwnn %*% Xbetween
WWXbetween <- listwnn %*% WXbetween
Hbetween <-cbind(as.matrix(WXbetween), as.matrix(WWXbetween))
}
resw<-spgm.tsls(ywithin, wywithin, Xwithin, Hwithin)
sigma2v1<- resw$sse / ((N * (t -1)) - ncol(as.matrix(Xwithin[,-del])) - 1)
resb<-spgm.tsls(sqrt(t)*as.matrix(ybetween), sqrt(t)*as.matrix(wybetween), sqrt(t)*Xbetween, sqrt(t)*as.matrix(Hbetween) )
sigma21<-resb$sse / resb$df
ystar<-ywithin/sqrt(sigma2v1) + ybetweennt/sqrt(sigma21)
xstar<-Xwithin/sqrt(sigma2v1) + Xbetweennt/sqrt(sigma21)
endogstar<-wywithin/sqrt(sigma2v1) + rep(as.matrix(wybetween), t)/sqrt(as.numeric(sigma21))
endogstar<-as.matrix(endogstar)
colnames(endogstar)<-"lambda"
Hbetweennt<-matrix(,NT, ncol(Hbetween))
for (i in 1:ncol(Hbetween)) Hbetweennt[,i]<-rep(Hbetween[,i], t)
Hstar <- Hwithin/sqrt(sigma2v1) + Hbetweennt/sqrt(sigma21)
res <- spgm.tsls(ystar, endogstar, xstar, Hstar)
res$sigma1 <- sigma21
res$sigmav <- sigma2v1
res$type <- "Spatial g2sls model"
}
else{
transH<-panel.transformations(H, indic, type= "both")
Hbetween<-transH[[2]]
Hwithin<-transH[[1]]
Hbetweennt<-matrix(, NT, ncol(Hbetween))
for (i in 1:ncol(Hbetween)) Hbetweennt[,i]<-rep(Hbetween[,i], t)
#Hwithin<-cbind(Hwithin, WXwithin, WWXwithin)
if(twow){
WXwithin <- listw %*% Xwithin
WWXwithin <- listw %*% WXwithin
W2Xwithin <- listw2 %*% Xwithin
W2WXwithin <- listw2 %*% WXwithin
W2WWXwithin <- listw2 %*% WWXwithin
WXbetween <- listwnn %*% Xbetween
WWXbetween <- listwnn %*% WXbetween
W2Xbetween <- listw2nn %*% Xbetween
W2WXbetween <- listw2nn %*% WXbetween
W2WWXbetween <- listw2nn %*% WWXbetween
Hwithin <-cbind(Hwithin, as.matrix(WXwithin), as.matrix(WWXwithin), as.matrix(W2Xwithin), as.matrix(W2WXwithin), as.matrix(W2WWXwithin))
Hbetween <-cbind(Hbetween, as.matrix(WXbetween), as.matrix(WWXbetween), as.matrix(W2Xbetween), as.matrix(W2WXbetween), as.matrix(W2WWXbetween))
}
else{
WXwithin <- listw %*% Xwithin
WWXwithin <- listw %*% WXwithin
Hwithin <-cbind(Hwithin, as.matrix(WXwithin), as.matrix(WWXwithin))
WXbetween <- listwnn %*% Xbetween
WWXbetween <- listwnn %*% WXbetween
Hbetween <-cbind(Hbetween, as.matrix(WXbetween), as.matrix(WWXbetween))
}
transendog<-panel.transformations(endog, indic, type= "both")
endogbetween<-transendog[[2]]
endogwithin<-transendog[[1]]
endogwithin<-cbind(endogwithin, wywithin)
resw<-spgm.tsls(as.matrix(ywithin), as.matrix(endogwithin), Xwithin, Hwithin )
sigma2v1<-resw$sse / ((N * (t -1)) - ncol(as.matrix(Xwithin[,-del])) - ncol(endogwithin))
endogbetween<-cbind(endogbetween, as.matrix(wybetween))
endogbetweennt<-matrix(,NT, ncol(endogbetween))
for (i in 1:ncol(endogbetween)) endogbetweennt[,i]<-rep(endogbetween[,i], t)
resb<-spgm.tsls(sqrt(t)*as.matrix(ybetween), sqrt(t)*as.matrix(endogbetween), sqrt(t)*Xbetween, sqrt(t)*as.matrix(Hbetween))
sigma21<-resb$sse / resb$df
ystar<-ywithin/sqrt(sigma2v1) + ybetweennt/sqrt(sigma21)
xstar<-Xwithin/sqrt(sigma2v1) + Xbetweennt/sqrt(sigma21)
endogstar<-endogwithin/sqrt(sigma2v1) + endogbetweennt/sqrt(sigma21)
Hbetweennt<-matrix(,NT, ncol(Hbetween))
for (i in 1:ncol(Hbetween)) Hbetweennt[,i]<-rep(Hbetween[,i], t)
Hstar<- Hwithin/sqrt(sigma2v1) + Hbetweennt/sqrt(sigma21)
res <- spgm.tsls(ystar, endogstar, xstar, Hstar)
res$sigma1<- sigma21
res$sigmav<- sigma2v1
res$type <- "Spatial g2sls model with additional endogenous variables"
}
}
res
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.