View source: R/SpatialProbit-MCMC.R
marginal.effects | R Documentation |
Estimate marginal effects (average direct, indirect and total impacts) for the SAR probit and SAR Tobit model.
## S3 method for class 'sarprobit'
marginal.effects(object, o = 100, ...)
## S3 method for class 'sartobit'
marginal.effects(object, o = 100, ...)
## S3 method for class 'sarprobit'
impacts(obj, file=NULL,
digits = max(3, getOption("digits")-3), ...)
## S3 method for class 'sartobit'
impacts(obj, file=NULL,
digits = max(3, getOption("digits")-3), ...)
object |
Estimated model of class |
obj |
Estimated model of class |
o |
maximum value for the power |
digits |
number of digits for printing |
file |
Output to file or console |
... |
additional parameters |
impacts()
will extract and print the marginal effects from a fitted model,
while marginal.effects(x)
will estimate the marginal effects anew for a fitted
model.
In spatial models, a change in some explanatory variable x_{ir}
for observation i
will not only affect the observations y_i
directly (direct impact),
but also affect neighboring observations y_j
(indirect impact).
These impacts potentially also include feedback loops from observation
i
to observation j
and back to i
.
(see LeSage (2009), section 2.7 for interpreting parameter estimates in spatial models).
For the r
-th non-constant explanatory variable,
let S_r(W)
be the n \times n
matrix
that captures the impacts from observation i
to j
.
The direct impact of a change in x_{ir}
on its own observation y_i
can be written as
\frac{\partial y_i}{\partial x_{ir}} = S_r(W)_{ii}
and the indirect impact from observation j
to observation i
as
\frac{\partial y_i}{\partial x_{jr}} = S_r(W)_{ij}
.
LeSage(2009) proposed summary measures for direct, indirect and total effects,
e.g. averaged direct impacts across all n
observations.
See LeSage(2009), section 5.6.2., p.149/150 for marginal effects estimation in general spatial models
and section 10.1.6, p.293 for marginal effects in SAR probit models.
We implement these three summary measures:
average direct impacts:
M_r(D) = \bar{S_r(W)_{ii}} = n^{-1} tr(S_r(W))
average total impacts:
M_r(T) = n^{-1} 1'_n S_r(W) 1_n
average indirect impacts:
M_r(I) = M_r(T) - M_r(D)
The average direct impact is the average of the diagonal elements, the average total impacts is the mean of the row (column) sums.
For the average direct impacts M_r(D)
,
there are efficient approaches available, see LeSage (2009), chapter 4, pp.114/115.
The computation of the average total effects M_r(T)
and hence
also the average indirect effects M_r(I)
are more subtle,
as S_r(W)
is a dense n \times n
matrix.
In the LeSage Spatial Econometrics Toolbox for MATLAB (March 2010),
the implementation in sarp_g
computes the matrix inverse of S= (I_n - \rho W)
which all the negative consequences for large n.
We implemented n^{-1} 1'_n S_r(W) 1_n
via a QR decomposition of
S = (I_n - \rho W)
(already available from a previous step) and solving a linear equation,
which is less costly and will work better for large n
.
SAR probit model
Specifically, for the SAR probit model the n \times n
matrix of marginal effects is
S_r(W) = \frac{\partial E[y | x_r]}{\partial x_{r}'} = \phi\left((I_n - \rho W)^{-1} \bar{x}_r \beta_r \right) \odot (I_n - \rho W)^{-1} I_n \beta_r
SAR Tobit model
Specifically, for the SAR Tobit model the n \times n
matrix of marginal effects is
S_r(W) = \frac{\partial E[y | x_r]}{\partial x_{r}'} = \Phi\left((I_n - \rho W)^{-1} \bar{x}_r \beta_r / \sigma \right) \odot (I_n - \rho W)^{-1} I_n \beta_r
This function returns a list with 6 elements: 'direct' for direct effects, 'indirect' for indirect effects, 'total' for total effects, and 'summary_direct', 'summary_indirect', 'summary_total' for the summary of direct, indirect and total effects.
1. Although the direct impacts can be efficiently estimated, the computation
of the indirect effects require the inversion of a n \times n
matrix
and will break down for large n
.
2. tr(W^i)
is determined with simulation,
so different calls to this method will produce different estimates.
Stefan Wilhelm <wilhelm@financial.com>
LeSage, J. and Pace, R. K. (2009), Introduction to Spatial Econometrics, CRC Press
marginal.effects.sartobit
require(spatialprobit)
# number of observations
n <- 100
# true parameters
beta <- c(0, 1, -1)
rho <- 0.75
# design matrix with two standard normal variates as "covariates"
X <- cbind(intercept=1, x=rnorm(n), y=rnorm(n))
# sparse identity matrix
I_n <- sparseMatrix(i=1:n, j=1:n, x=1)
# number of nearest neighbors in spatial weight matrix W
m <- 6
# spatial weight matrix with m=6 nearest neighbors
# W must not have non-zeros in the main diagonal!
W <- kNearestNeighbors(x = rnorm(n), y = rnorm(n), k = m)
# innovations
eps <- rnorm(n=n, mean=0, sd=1)
# generate data from model
S <- I_n - rho * W
z <- solve(qr(S), X %*% beta + eps)
y <- as.vector(z >= 0) # 0 or 1, FALSE or TRUE
# estimate SAR probit model
set.seed(12345)
sarprobit.fit1 <- sar_probit_mcmc(y, X, W, ndraw=500, burn.in=100,
thinning=1, prior=NULL, computeMarginalEffects=TRUE)
summary(sarprobit.fit1)
# print impacts
impacts(sarprobit.fit1)
################################################################################
#
# Example from LeSage/Pace (2009), section 10.3.1, p. 302-304
#
################################################################################
# Value of "a" is not stated in book!
# Assuming a=-1 which gives approx. 50% censoring
library(spatialprobit)
a <- -1 # control degree of censored observation
n <- 1000
rho <- 0.7
beta <- c(0, 2)
sige <- 0.5
I_n <- sparseMatrix(i=1:n, j=1:n, x=1)
x <- runif(n, a, 1)
X <- cbind(1, x)
eps <- rnorm(n, sd=sqrt(sige))
param <- c(beta, sige, rho)
# random locational coordinates and 6 nearest neighbors
lat <- rnorm(n)
long <- rnorm(n)
W <- kNearestNeighbors(lat, long, k=6)
y <- as.double(solve(I_n - rho * W) %*% (X %*% beta + eps))
table(y > 0)
# set negative values to zero to reflect sample truncation
ind <- which(y <=0)
y[ind] <- 0
# Fit SAR Tobit (with approx. 50% censored observations)
fit_sartobit <- sartobit(y ~ x, W, ndraw=1000, burn.in=200,
computeMarginalEffects=TRUE, showProgress=TRUE)
# print impacts
impacts(fit_sartobit)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.