spreg.SURerrorML¶
- class spreg.SURerrorML(bigy, bigX, w, regimes=None, nonspat_diag=True, spat_diag=False, vm=False, epsilon=1e-07, name_bigy=None, name_bigX=None, name_ds=None, name_w=None, name_regimes=None)[source]¶
User class for SUR Error estimation by Maximum Likelihood
- Parameters:
- bigy
dictionary
with vectors of dependent variable, one for each equation
- bigX
dictionary
with matrices of explanatory variables, one for each equation
- w
spatial
weights
object
- regimes
list
default = None. List of n values with the mapping of each observation to a regime. Assumed to be aligned with ‘x’.
- epsilon
float
convergence criterion for ML iterations. default 0.0000001
- nonspat_diagbool
flag for non-spatial diagnostics, default = True
- spat_diagbool
flag for spatial diagnostics, default = False
- vmbool
flag for asymptotic variance for lambda and Sigma, default = False
- name_bigy
dictionary
with name of dependent variable for each equation. default = None, but should be specified is done when sur_stackxy is used
- name_bigX
dictionary
with names of explanatory variables for each equation. default = None, but should be specified is done when sur_stackxy is used
- name_ds
str
name for the data set
- name_w
str
name for the weights file
- name_regimes
str
name of regime variable for use in the output
- bigy
Examples
First import libpysal to load the spatial analysis tools.
>>> import libpysal >>> from libpysal.examples import load_example >>> from libpysal.weights import Queen >>> import spreg >>> np.set_printoptions(suppress=True) #prevent scientific format
Open data on NCOVR US County Homicides (3085 areas) using libpysal.io.open(). This is the DBF associated with the NAT shapefile. Note that libpysal.io.open() also reads data in CSV format.
>>> nat = load_example('Natregimes') >>> db = libpysal.io.open(nat.get_path('natregimes.dbf'), 'r')
The specification of the model to be estimated can be provided as lists. Each equation should be listed separately. Equation 1 has HR80 as dependent variable, and PS80 and UE80 as exogenous regressors. For equation 2, HR90 is the dependent variable, and PS90 and UE90 the exogenous regressors.
>>> y_var = ['HR80','HR90'] >>> x_var = [['PS80','UE80'],['PS90','UE90']] >>> yend_var = [['RD80'],['RD90']] >>> q_var = [['FP79'],['FP89']]
The SUR method requires data to be provided as dictionaries. PySAL provides the tool sur_dictxy to create these dictionaries from the list of variables. The line below will create four dictionaries containing respectively the dependent variables (bigy), the regressors (bigX), the dependent variables’ names (bigyvars) and regressors’ names (bigXvars). All these will be created from th database (db) and lists of variables (y_var and x_var) created above.
>>> bigy,bigX,bigyvars,bigXvars = spreg.sur_dictxy(db,y_var,x_var)
To run a spatial error model, we need to specify the spatial weights matrix. To do that, we can open an already existing gal file or create a new one. In this example, we will create a new one from NAT.shp and transform it to row-standardized.
>>> w = Queen.from_shapefile(nat.get_path("natregimes.shp")) >>> w.transform='r'
We can now run the regression and then have a summary of the output by typing: print(reg.summary)
Alternatively, we can just check the betas and standard errors, asymptotic t and p-value of the parameters:
>>> reg = spreg.SURerrorML(bigy,bigX,w=w,name_bigy=bigyvars,name_bigX=bigXvars,name_ds="NAT",name_w="nat_queen") >>> reg.bSUR {0: array([[4.02228606], [0.88489637], [0.42402845]]), 1: array([[3.04923031], [1.10972632], [0.47075678]])}
>>> reg.sur_inf {0: array([[ 0.36692175, 10.96224484, 0. ], [ 0.14129077, 6.26294545, 0. ], [ 0.04267954, 9.93516909, 0. ]]), 1: array([[ 0.33139967, 9.20106629, 0. ], [ 0.13352591, 8.31094381, 0. ], [ 0.04004097, 11.75687747, 0. ]])}
- Attributes:
- n
int
number of observations in each cross-section
- n2
int
n/2
- n_eq
int
number of equations
- bigy
dictionary
with vectors of dependent variable, one for each equation
- bigX
dictionary
with matrices of explanatory variables, one for each equation
- bigK
array
n_eq x 1 array with number of explanatory variables by equation
- bigylag
dictionary
spatially lagged dependent variable
- bigXlag
dictionary
spatially lagged explanatory variable
- lamols
array
spatial autoregressive coefficients from equation by equation ML-Error estimation
- clikerr
float
concentrated log-likelihood from equation by equation ML-Error estimation (no constant)
- bSUR0
array
SUR estimation for betas without spatial autocorrelation
- llik
float
log-likelihood for classic SUR estimation (includes constant)
- lamsur
float
spatial autoregressive coefficient in ML SUR Error
- bSUR
array
beta coefficients in ML SUR Error
- varb
array
variance of beta coefficients in ML SUR Error
- sig
array
error variance-covariance matrix in ML SUR Error
- bigE
array
n by n_eq matrix of vectors of residuals for each equation
- cliksurerr
float
concentrated log-likelihood from ML SUR Error (no constant)
- sur_inf
array
inference for regression coefficients, stand. error, t, p
- errllik
float
log-likelihood for error model without SUR (with constant)
- surerrllik
float
log-likelihood for SUR error model (with constant)
- lrtest
tuple
likelihood ratio test for off-diagonal Sigma elements
- likrlambda
tuple
likelihood ratio test on spatial autoregressive coefficients
- vm
array
asymptotic variance matrix for lambda and Sigma (only for vm=True)
- lamsetp
array
inference for lambda, stand. error, t, p (only for vm=True)
- lamtest
tuple
with test for constancy of lambda across equations (test value, degrees of freedom, p-value)
- joinlam
tuple
with test for joint significance of lambda across equations (test value, degrees of freedom, p-value)
- surchow
list
with tuples for Chow test on regression coefficients. each tuple contains test value, degrees of freedom, p-value
- name_bigy
dictionary
with name of dependent variable for each equation
- name_bigX
dictionary
with names of explanatory variables for each equation
- name_ds
str
name for the data set
- name_w
str
name for the weights file
- name_regimes
str
name of regime variable for use in the output
- n
- __init__(bigy, bigX, w, regimes=None, nonspat_diag=True, spat_diag=False, vm=False, epsilon=1e-07, name_bigy=None, name_bigX=None, name_ds=None, name_w=None, name_regimes=None)[source]¶
Methods
__init__
(bigy, bigX, w[, regimes, ...])