def test_SUR_iter(self): #2 equations, same K in each, iterated estimation, spatial test y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SUR(bigy0,bigX0,w=self.w,nonspat_diag=True,spat_diag=True,iter=True,verbose=False,\ name_bigy=bigyvars0,name_bigX=bigXvars0) dict_compare(reg.bOLS,{0: np.array([[ 5.39719146],[ 0.6973813 ],\ [ 0.22566378]]), 1: np.array([[ 1.80829725],[ 1.03504143],[ 0.6582483 ]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 5.18423225],[ 0.67757925],\ [ 0.25706498]]), 1: np.array([[ 3.79731807],[ 1.02411196],[ 0.35895674]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 2.59392406e-01, 1.99860602e+01, 7.28237551e-89],\ [ 1.21911330e-01, 5.55796781e+00, 2.72933704e-08],\ [ 3.38051365e-02, 7.60431727e+00, 2.86411830e-14]]),\ 1: np.array([[ 2.53108919e-01, 1.50027035e+01, 7.04886598e-51],\ [ 1.13329850e-01, 9.03655976e+00, 1.61679985e-19],\ [ 3.40440433e-02, 1.05438928e+01, 5.42075621e-26]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.5079133], [ 0.5079133, 1. ]]),RTOL) np.testing.assert_allclose(reg.surchow,[(23.457203761752844, 1, 1.2772356421778157e-06),\ (8.6998292497532859, 1, 0.0031823985960753743),\ (6.8426866249389589, 1, 0.0089004881389025351)],RTOL) np.testing.assert_allclose(reg.llik,-19860.067987395596) np.testing.assert_allclose(reg.lmtest,(680.16759754291365, 1, 6.144389240997126e-150)) np.testing.assert_allclose(reg.lrtest, (854.18095147295708, 1, 8.966465468792485e-188)) np.testing.assert_allclose(reg.lmEtest,(1270.9424750801545, 2, 1.0431532803839709e-276))
def test_SUR_3eq(self): #3 equations, different K, iterated estimation, spatial test y_var1 = ['HR60','HR70','HR80'] x_var1 = [['RD60','PS60'],['RD70','PS70','UE70'],['RD80','PS80']] bigy1,bigX1,bigyvars1,bigXvars1 = sur_dictxy(self.db,y_var1,x_var1) reg = SUR(bigy1,bigX1,w=self.w,spat_diag=True,iter=True,verbose=False,\ name_bigy=bigyvars1,name_bigX=bigXvars1) dict_compare(reg.bOLS,{0: np.array([[ 4.50407527],[ 2.50426531],\ [ 0.50130802]]), 1: np.array([[ 7.41171812],[ 4.0021532 ],[ 1.32168167],\ [-0.22786048]]), 2: np.array([[ 6.92761614],[ 3.90531039],[ 1.47413939]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 4.50407527],[ 2.39199682],\ [ 0.52723694]]), 1: np.array([[ 7.44509818], [ 3.74968571],[ 1.28811685],[-0.23526451]]), 2: np.array([[ 6.92761614],\ [ 3.65423052],[ 1.38247611]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 9.16019177e-002, 4.91700980e+001, 0.00000000e+000],\ [ 9.18832357e-002, 2.60330060e+001, 2.09562528e-149],\ [ 9.31668754e-002, 5.65906002e+000, 1.52204326e-008]]),\ 1: np.array([[ 2.31085029e-001, 3.22180031e+001, 9.87752395e-228],\ [ 1.14421850e-001, 3.27707138e+001, 1.53941252e-235],\ [ 1.14799399e-001, 1.12205888e+001, 3.23111806e-029],\ [ 4.47806286e-002, -5.25371170e+000, 1.49064159e-007]]),\ 2: np.array([[ 1.00643767e-001, 6.88330371e+001, 0.00000000e+000],\ [ 1.00599909e-001, 3.63243917e+001, 6.66811571e-289],\ [ 1.02053898e-001, 1.35465291e+001, 8.30659234e-042]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.34470181, 0.25096458],\ [ 0.34470181, 1. , 0.33527277],[ 0.25096458, 0.33527277, 1. ]]),RTOL) np.testing.assert_allclose(reg.llik,-28695.767676078722) np.testing.assert_allclose(reg.lmtest,(882.43543942655947, 3, 5.7128374010751484e-191)) np.testing.assert_allclose(reg.lrtest, (818.30409875688747, 3, 4.6392724270549021e-177)) np.testing.assert_allclose(reg.lmEtest,(696.64318511682916, 3, 1.1218163246066135e-150))
def test_error(self): #2 equations y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SURerrorML(bigy0,bigX0,self.w,\ name_bigy=bigyvars0,name_bigX=bigXvars0,spat_diag=True,\ name_w="natqueen",name_ds="natregimes",nonspat_diag=False) dict_compare(reg.bSUR0,{0: np.array([[ 5.18423225],[ 0.67757925], [ 0.25706498]]), 1: np.array([[ 3.79731807],[ 1.02411196],[ 0.35895674]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 4.0222855 ],[ 0.88489646],[ 0.42402853]]),\ 1: np.array([[ 3.04923009],[ 1.10972634],[ 0.47075682]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 3.669218e-01, 1.096224e+01, 5.804195e-28],\ [ 1.412908e-01, 6.262946e+00, 3.777726e-10],\ [ 4.267954e-02, 9.935169e+00, 2.926783e-23]]),\ 1: np.array([[ 3.31399691e-01, 9.20106497e+00, 3.54419478e-20],\ [ 1.33525912e-01, 8.31094371e+00, 9.49439563e-17],\ [ 4.00409716e-02, 1.17568780e+01, 6.50970965e-32]])},RTOL) np.testing.assert_allclose(reg.lamols,np.array([[ 0.60205035],[ 0.56056348]]),RTOL) np.testing.assert_allclose(reg.lamsur,np.array([[ 0.54361986],[ 0.50445451]]),RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.31763719],\ [ 0.31763719, 1. ]]),RTOL) np.testing.assert_allclose(reg.surchow,[(5.1073696860799931, 1, 0.023824413482255974),\ (1.9524745281321374, 1, 0.16232044613203933),\ (0.79663667463065702, 1, 0.37210085476281407)],RTOL) np.testing.assert_allclose(reg.llik,-19860.067987395596) np.testing.assert_allclose(reg.errllik,-19497.031128906794) np.testing.assert_allclose(reg.surerrllik,-19353.052023136348) np.testing.assert_allclose(reg.likrlambda, (1014.0319285186415, 2, 6.3938800607190098e-221))
def test_error(self): #2 equations y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SURerrorML(bigy0,bigX0,self.w,\ name_bigy=bigyvars0,name_bigX=bigXvars0,spat_diag=True,\ name_w="natqueen",name_ds="natregimes",nonspat_diag=False) dict_compare(reg.bSUR0,{0: np.array([[ 5.18423225],[ 0.67757925], [ 0.25706498]]), 1: np.array([[ 3.79731807],[ 1.02411196],[ 0.35895674]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 4.0222855 ],[ 0.88489646],[ 0.42402853]]),\ 1: np.array([[ 3.04923009],[ 1.10972634],[ 0.47075682]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 3.669218e-01, 1.096224e+01, 5.804195e-28],\ [ 1.412908e-01, 6.262946e+00, 3.777726e-10],\ [ 4.267954e-02, 9.935169e+00, 2.926783e-23]]),\ 1: np.array([[ 3.31399691e-01, 9.20106497e+00, 3.54419478e-20],\ [ 1.33525912e-01, 8.31094371e+00, 9.49439563e-17],\ [ 4.00409716e-02, 1.17568780e+01, 6.50970965e-32]])},rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.lamols,np.array([[ 0.60205035],[ 0.56056348]]),RTOL) np.testing.assert_allclose(reg.lamsur,np.array([[ 0.54361986],[ 0.50445451]]),RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.31763719],\ [ 0.31763719, 1. ]]),RTOL) np.testing.assert_allclose(reg.surchow,[(5.1073696860799931, 1, 0.023824413482255974),\ (1.9524745281321374, 1, 0.16232044613203933),\ (0.79663667463065702, 1, 0.37210085476281407)],rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.llik,-19860.067987395596) np.testing.assert_allclose(reg.errllik,-19497.031128906794) np.testing.assert_allclose(reg.surerrllik,-19353.052023136348) np.testing.assert_allclose(reg.likrlambda, (1014.0319285186415, 2, 6.3938800607190098e-221))
def test_error_vm(self): #Asymptotic variance matrix y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SURerrorML(bigy0,bigX0,self.w,spat_diag=True,vm=True,\ name_bigy=bigyvars0,name_bigX=bigXvars0,\ name_w="natqueen",name_ds="natregimes") dict_compare(reg.bSUR,{0: np.array([[ 4.0222855 ],[ 0.88489646],[ 0.42402853]]),\ 1: np.array([[ 3.04923009],[ 1.10972634],[ 0.47075682]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 3.669218e-01, 1.096224e+01, 5.804195e-28],\ [ 1.412908e-01, 6.262946e+00, 3.777726e-10],\ [ 4.267954e-02, 9.935169e+00, 2.926783e-23]]),\ 1: np.array([[ 3.31399691e-01, 9.20106497e+00, 3.54419478e-20],\ [ 1.33525912e-01, 8.31094371e+00, 9.49439563e-17],\ [ 4.00409716e-02, 1.17568780e+01, 6.50970965e-32]])},RTOL) np.testing.assert_allclose(reg.vm, np.array([[ 4.14625293e-04, 2.38494923e-05, -3.48748935e-03,\ -5.55994101e-04, -1.63239040e-04],[ 2.38494923e-05, 4.53642714e-04, -2.00602452e-04,\ -5.46893937e-04, -3.10498019e-03],[ -3.48748935e-03, -2.00602452e-04, 7.09989591e-01,\ 2.11105214e-01, 6.39785285e-02],[ -5.55994101e-04, -5.46893937e-04, 2.11105214e-01,\ 3.42890248e-01, 1.91931389e-01],[ -1.63239040e-04, -3.10498019e-03, 6.39785285e-02,\ 1.91931389e-01, 5.86933821e-01]]),RTOL) np.testing.assert_allclose(reg.lamsetp,(np.array([[ 0.02036235],\ [ 0.02129889]]), np.array([[ 26.69730489],[ 23.68454458]]), np.array([[ 5.059048e-157],\ [ 5.202838e-124]])),RTOL) np.testing.assert_allclose(reg.joinlam,(1207.81269, 2, 5.330924e-263)) np.testing.assert_allclose(reg.surchow,[(5.1073696860799931, 1, 0.023824413482255974), (1.9524745281321374, 1, 0.16232044613203933), (0.79663667463065702, 1, 0.37210085476281407)],RTOL) np.testing.assert_allclose(reg.likrlambda,(1014.0319285186415, 2, 6.3938800607190098e-221)) np.testing.assert_allclose(reg.lrtest, (287.95821154104488, 1, 1.3849971230596533e-64)) np.testing.assert_allclose(reg.lamtest, (1.8693306894921564, 1, 0.17155175615429052))
def test_3SLS(self): # two equations, one endog, one instrument, same k y_var1 = ['HR80','HR90'] x_var1 = [['PS80','UE80'],['PS90','UE90']] yend_var1 = [['RD80'],['RD90']] q_var1 = [['FP79'],['FP89']] bigy1,bigX1,bigyvars1,bigXvars1 = sur_dictxy(self.db,y_var1,x_var1) bigyend1,bigyendvars1 = sur_dictZ(self.db,yend_var1) bigq1,bigqvars1 = sur_dictZ(self.db,q_var1) reg = ThreeSLS(bigy1,bigX1,bigyend1,bigq1) dict_compare(reg.b3SLS,{0: np.array([[ 6.92426353e+00],[ 1.42921826e+00],[ 4.94348442e-04],\ [ 3.58292750e+00]]), 1: np.array([[ 7.62385875],[ 1.65031181],[-0.21682974],[ 3.91250428]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 2.32208525e-001, 2.98191616e+001, 2.20522747e-195],\ [ 1.03734166e-001, 1.37777004e+001, 3.47155373e-043],\ [ 3.08619277e-002, 1.60180675e-002, 9.87219978e-001],\ [ 1.11319989e-001, 3.21858412e+001, 2.78527634e-227]]),\ 1: np.array([[ 2.87394149e-001, 2.65275364e+001, 4.66554915e-155],\ [ 9.59703138e-002, 1.71960655e+001, 2.84185085e-066],\ [ 4.08954707e-002, -5.30204786e+000, 1.14510807e-007],\ [ 1.35867887e-001, 2.87963872e+001, 2.38043782e-182]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.26404959], [ 0.26404959, 1. ]]),RTOL) np.testing.assert_allclose(reg.surchow,[(4.398001850528483, 1, 0.035981064325265613),\ (3.3042403886525147, 1, 0.069101286634542139),\ (21.712902666281863, 1, 3.1665430446850281e-06),\ (4.4286185200127388, 1, 0.035341101907069621)],RTOL)
def test_3SLS(self): #2 equations, same K in each y_var0 = ['HR80', 'HR90'] x_var0 = [['PS80', 'UE80'], ['PS90', 'UE90']] bigy0, bigX0, bigyvars0, bigXvars0 = sur_dictxy( self.db, y_var0, x_var0) reg = SURlagIV(bigy0,bigX0,w=self.w,name_bigy=bigyvars0,name_bigX=bigXvars0,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b3SLS,{0: np.array([[ 4.79766641],[ 0.66900706],[ 0.45430715],\ [-0.13665465]]), 1: np.array([[ 2.27972563],[ 0.99252289],[ 0.52280565],[ 0.06909469]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 4.55824001e+00, 1.05252606e+00, 2.92558259e-01],\ [ 3.54744447e-01, 1.88588453e+00, 5.93105171e-02],\ [ 7.79071951e-02, 5.83138887e+00, 5.49679157e-09],\ [ 6.74318852e-01, -2.02655838e-01, 8.39404043e-01]]),\ 1: np.array([[ 3.90351092e-01, 5.84019280e+00, 5.21404469e-09],\ [ 1.21674079e-01, 8.15722547e+00, 3.42808098e-16],\ [ 4.47686969e-02, 1.16779288e+01, 1.65273681e-31],\ [ 7.99640809e-02, 8.64071585e-01, 3.87548567e-01]])},RTOL) np.testing.assert_allclose(reg.corr, np.array([[1., 0.525751], [0.525751, 1.]]), RTOL) np.testing.assert_allclose(reg.surchow,[(0.3178787640240518, 1, 0.57288522734425285),\ (1.0261877219299562, 1, 0.31105574708021311),\ (0.76852435750330428, 1, 0.38067394159083323),\ (0.099802260814129934, 1, 0.75206705793155604)],RTOL)
def test_error_3eq(self): #Three equation example, unequal K y_var1 = ['HR60','HR70','HR80'] x_var1 = [['RD60','PS60'],['RD70','PS70','UE70'],['RD80','PS80']] bigy1,bigX1,bigyvars1,bigXvars1 = sur_dictxy(self.db,y_var1,x_var1) reg = SURerrorML(bigy1,bigX1,self.w,name_bigy=bigyvars1,name_bigX=bigXvars1,\ name_w="natqueen",name_ds="natregimes") dict_compare(reg.bSUR0,{0: np.array([[ 4.50407527],[ 2.39199682],[ 0.52723694]]), 1: np.array([[ 7.44509818],\ [ 3.74968571],[ 1.28811685],[-0.23526451]]), 2: np.array([[ 6.92761614],[ 3.65423052],\ [ 1.38247611]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 4.474891 ],[ 2.19004379],[ 0.59110509]]), 1: np.array([[ 7.15676612],\ [ 3.49581077],[ 1.12846288],[-0.17133968]]), 2: np.array([[ 6.91550936],[ 3.69351192],\ [ 1.40395543]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 1.345557e-001, 3.325679e+001, 1.628656e-242],\ [ 1.205317e-001, 1.816985e+001, 8.943986e-074],\ [ 1.092657e-001, 5.409796e+000, 6.309653e-008]]),\ 1: np.array([[ 2.957692e-001, 2.419713e+001, 2.384951e-129],\ [ 1.482144e-001, 2.358618e+001, 5.343318e-123],\ [ 1.344687e-001, 8.392014e+000, 4.778835e-017],\ [ 5.378335e-002, -3.185738e+000, 1.443854e-003]]),\ 2: np.array([[ 1.500528e-001, 4.608718e+001, 0.000000e+000],\ [ 1.236340e-001, 2.987457e+001, 4.210941e-196],\ [ 1.194989e-001, 1.174869e+001, 7.172248e-032]])},rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.lamols,np.array([[ 0.4248829 ],[ 0.46428101],[ 0.42823999]]),RTOL) np.testing.assert_allclose(reg.lamsur,np.array([[ 0.36137603],[ 0.38321666],[ 0.37183716]]),RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1., 0.24563253, 0.14986527],\ [ 0.24563253, 1., 0.25945021],[ 0.14986527, 0.25945021, 1. ]]),RTOL) np.testing.assert_allclose(reg.llik,-28695.767676078722) np.testing.assert_allclose(reg.errllik,-28593.569427945633) np.testing.assert_allclose(reg.surerrllik,-28393.703607018397) np.testing.assert_allclose(reg.lrtest,(399.7316418544724, 3, 2.5309501580053097e-86))
def test_error_vm(self): #Asymptotic variance matrix y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SURerrorML(bigy0,bigX0,self.w,spat_diag=True,vm=True,\ name_bigy=bigyvars0,name_bigX=bigXvars0,\ name_w="natqueen",name_ds="natregimes") dict_compare(reg.bSUR,{0: np.array([[ 4.0222855 ],[ 0.88489646],[ 0.42402853]]),\ 1: np.array([[ 3.04923009],[ 1.10972634],[ 0.47075682]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 3.669218e-01, 1.096224e+01, 5.804195e-28],\ [ 1.412908e-01, 6.262946e+00, 3.777726e-10],\ [ 4.267954e-02, 9.935169e+00, 2.926783e-23]]),\ 1: np.array([[ 3.31399691e-01, 9.20106497e+00, 3.54419478e-20],\ [ 1.33525912e-01, 8.31094371e+00, 9.49439563e-17],\ [ 4.00409716e-02, 1.17568780e+01, 6.50970965e-32]])},rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.vm, np.array([[ 4.14625293e-04, 2.38494923e-05, -3.48748935e-03,\ -5.55994101e-04, -1.63239040e-04],[ 2.38494923e-05, 4.53642714e-04, -2.00602452e-04,\ -5.46893937e-04, -3.10498019e-03],[ -3.48748935e-03, -2.00602452e-04, 7.09989591e-01,\ 2.11105214e-01, 6.39785285e-02],[ -5.55994101e-04, -5.46893937e-04, 2.11105214e-01,\ 3.42890248e-01, 1.91931389e-01],[ -1.63239040e-04, -3.10498019e-03, 6.39785285e-02,\ 1.91931389e-01, 5.86933821e-01]]),RTOL) np.testing.assert_allclose(reg.lamsetp,(np.array([[ 0.02036235],\ [ 0.02129889]]), np.array([[ 26.69730489],[ 23.68454458]]), np.array([[ 5.059048e-157],\ [ 5.202838e-124]])),rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.joinlam,(1207.81269, 2, 5.330924e-263), rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.surchow,[(5.1073696860799931, 1, 0.023824413482255974), (1.9524745281321374, 1, 0.16232044613203933), (0.79663667463065702, 1, 0.37210085476281407)],rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.likrlambda, (1014.0319285186415, 2, 6.3938800607190098e-221), rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.lrtest, (287.95821154104488, 1, 1.3849971230596533e-64), rtol=RTOL, atol=ATOL) np.testing.assert_allclose(reg.lamtest, (1.8693306894921564, 1, 0.17155175615429052), rtol=RTOL, atol=ATOL)
def test_error_3eq(self): #Three equation example, unequal K y_var1 = ['HR60','HR70','HR80'] x_var1 = [['RD60','PS60'],['RD70','PS70','UE70'],['RD80','PS80']] bigy1,bigX1,bigyvars1,bigXvars1 = sur_dictxy(self.db,y_var1,x_var1) reg = SURerrorML(bigy1,bigX1,self.w,name_bigy=bigyvars1,name_bigX=bigXvars1,\ name_w="natqueen",name_ds="natregimes") dict_compare(reg.bSUR0,{0: np.array([[ 4.50407527],[ 2.39199682],[ 0.52723694]]), 1: np.array([[ 7.44509818],\ [ 3.74968571],[ 1.28811685],[-0.23526451]]), 2: np.array([[ 6.92761614],[ 3.65423052],\ [ 1.38247611]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 4.474891 ],[ 2.19004379],[ 0.59110509]]), 1: np.array([[ 7.15676612],\ [ 3.49581077],[ 1.12846288],[-0.17133968]]), 2: np.array([[ 6.91550936],[ 3.69351192],\ [ 1.40395543]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 1.345557e-001, 3.325679e+001, 1.628656e-242],\ [ 1.205317e-001, 1.816985e+001, 8.943986e-074],\ [ 1.092657e-001, 5.409796e+000, 6.309653e-008]]),\ 1: np.array([[ 2.957692e-001, 2.419713e+001, 2.384951e-129],\ [ 1.482144e-001, 2.358618e+001, 5.343318e-123],\ [ 1.344687e-001, 8.392014e+000, 4.778835e-017],\ [ 5.378335e-002, -3.185738e+000, 1.443854e-003]]),\ 2: np.array([[ 1.500528e-001, 4.608718e+001, 0.000000e+000],\ [ 1.236340e-001, 2.987457e+001, 4.210941e-196],\ [ 1.194989e-001, 1.174869e+001, 7.172248e-032]])},RTOL) np.testing.assert_allclose(reg.lamols,np.array([[ 0.4248829 ],[ 0.46428101],[ 0.42823999]]),RTOL) np.testing.assert_allclose(reg.lamsur,np.array([[ 0.36137603],[ 0.38321666],[ 0.37183716]]),RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1., 0.24563253, 0.14986527],\ [ 0.24563253, 1., 0.25945021],[ 0.14986527, 0.25945021, 1. ]]),RTOL) np.testing.assert_allclose(reg.llik,-28695.767676078722) np.testing.assert_allclose(reg.errllik,-28593.569427945633) np.testing.assert_allclose(reg.surerrllik,-28393.703607018397) np.testing.assert_allclose(reg.lrtest,(399.7316418544724, 3, 2.5309501580053097e-86))
def test_3SLS_3eq(self): #Three equations, no endogenous y_var1 = ['HR60', 'HR70', 'HR80'] x_var1 = [['RD60', 'PS60'], ['RD70', 'PS70', 'UE70'], ['RD80', 'PS80']] bigy1, bigX1, bigyvars1, bigXvars1 = sur_dictxy( self.db, y_var1, x_var1) reg = SURlagIV(bigy1,bigX1,w=self.w,name_bigy=bigyvars1,name_bigX=bigXvars1,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b2SLS,{0: np.array([[ 2.42754085],[ 1.48928052],[ 0.33812558],\ [ 0.45567848]]), 1: np.array([[ 4.83887747],[ 2.86272903],[ 0.96950417],\ [-0.12928124],[ 0.33328525]]), 2: np.array([[ 6.69407561],[ 3.81449588],\ [ 1.44603996],[ 0.03355501]])},RTOL) dict_compare( reg.b3SLS, { 0: np.array([[2.1646724], [1.31916307], [0.3398716], [0.51336281] ]), 1: np.array([[4.87587006], [2.68927603], [0.94945336], [-0.145607], [0.33901794]]), 2: np.array([[6.48848271], [3.53936913], [1.34731149], [0.06309451]]) }, RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 3.51568531e-01, 6.15718476e+00, 7.40494437e-10],\ [ 1.86875349e-01, 7.05905340e+00, 1.67640650e-12],\ [ 9.04557549e-02, 3.75732426e+00, 1.71739894e-04],\ [ 7.48661202e-02, 6.85707782e+00, 7.02833502e-12]]),\ 1: np.array([[ 4.72342840e-01, 1.03227352e+01, 5.56158073e-25],\ [ 2.12539934e-01, 1.26530388e+01, 1.07629786e-36],\ [ 1.21325632e-01, 7.82566179e+00, 5.04993280e-15],\ [ 4.61662438e-02, -3.15397123e+00, 1.61064963e-03],\ [ 5.41804741e-02, 6.25719766e+00, 3.91956530e-10]]),\ 2: np.array([[ 3.36526688e-001, 1.92807374e+001, 7.79572152e-083],\ [ 1.59012676e-001, 2.22584087e+001, 9.35079396e-110],\ [ 1.08370073e-001, 1.24325052e+001, 1.74091603e-035],\ [ 4.61776859e-002, 1.36634202e+000, 1.71831639e-001]])},RTOL) reg = SURlagIV(bigy1,bigX1,w=self.w,w_lags=2,name_bigy=bigyvars1,name_bigX=bigXvars1,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b3SLS,{0: np.array([[ 1.77468937],[ 1.14510457],[ 0.30768813],\ [ 0.5989414 ]]), 1: np.array([[ 4.26823484],[ 2.43651351],[ 0.8683601 ],[-0.12672555],\ [ 0.4208373 ]]), 2: np.array([[ 6.02334209],[ 3.38056146],[ 1.30003556],[ 0.12992573]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 3.27608281e-01, 5.41710779e+00, 6.05708284e-08],\ [ 1.76245578e-01, 6.49721025e+00, 8.18230736e-11],\ [ 8.95068772e-02, 3.43759205e+00, 5.86911195e-04],\ [ 6.94610221e-02, 8.62269771e+00, 6.53949186e-18]]),\ 1: np.array([[ 4.52225005e-01, 9.43829906e+00, 3.78879655e-21],\ [ 2.03807701e-01, 1.19549629e+01, 6.11608551e-33],\ [ 1.19004906e-01, 7.29684281e+00, 2.94598624e-13],\ [ 4.57552474e-02, -2.76963964e+00, 5.61183429e-03],\ [ 5.13101239e-02, 8.20183745e+00, 2.36740266e-16]]),\ 2: np.array([[ 3.27580342e-001, 1.83873735e+001, 1.65820984e-075],\ [ 1.55771577e-001, 2.17020429e+001, 1.96247435e-104],\ [ 1.06817752e-001, 1.21705946e+001, 4.45822889e-034],\ [ 4.48871540e-002, 2.89449691e+000, 3.79766647e-003]])},RTOL)
def test_3SLS_3eq(self): #Three equations, no endogenous y_var1 = ['HR60','HR70','HR80'] x_var1 = [['RD60','PS60'],['RD70','PS70','UE70'],['RD80','PS80']] bigy1,bigX1,bigyvars1,bigXvars1 = sur_dictxy(self.db,y_var1,x_var1) reg = SURlagIV(bigy1,bigX1,w=self.w,name_bigy=bigyvars1,name_bigX=bigXvars1,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b2SLS,{0: np.array([[ 2.42754085],[ 1.48928052],[ 0.33812558],\ [ 0.45567848]]), 1: np.array([[ 4.83887747],[ 2.86272903],[ 0.96950417],\ [-0.12928124],[ 0.33328525]]), 2: np.array([[ 6.69407561],[ 3.81449588],\ [ 1.44603996],[ 0.03355501]])},RTOL) dict_compare(reg.b3SLS,{0: np.array([[ 2.1646724 ],[ 1.31916307],[ 0.3398716 ], [ 0.51336281]]), 1: np.array([[ 4.87587006],[ 2.68927603], [ 0.94945336],[-0.145607 ],[ 0.33901794]]), 2: np.array([[ 6.48848271], [ 3.53936913],[ 1.34731149],[ 0.06309451]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 3.51568531e-01, 6.15718476e+00, 7.40494437e-10],\ [ 1.86875349e-01, 7.05905340e+00, 1.67640650e-12],\ [ 9.04557549e-02, 3.75732426e+00, 1.71739894e-04],\ [ 7.48661202e-02, 6.85707782e+00, 7.02833502e-12]]),\ 1: np.array([[ 4.72342840e-01, 1.03227352e+01, 5.56158073e-25],\ [ 2.12539934e-01, 1.26530388e+01, 1.07629786e-36],\ [ 1.21325632e-01, 7.82566179e+00, 5.04993280e-15],\ [ 4.61662438e-02, -3.15397123e+00, 1.61064963e-03],\ [ 5.41804741e-02, 6.25719766e+00, 3.91956530e-10]]),\ 2: np.array([[ 3.36526688e-001, 1.92807374e+001, 7.79572152e-083],\ [ 1.59012676e-001, 2.22584087e+001, 9.35079396e-110],\ [ 1.08370073e-001, 1.24325052e+001, 1.74091603e-035],\ [ 4.61776859e-002, 1.36634202e+000, 1.71831639e-001]])},RTOL) reg = SURlagIV(bigy1,bigX1,w=self.w,w_lags=2,name_bigy=bigyvars1,name_bigX=bigXvars1,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b3SLS,{0: np.array([[ 1.77468937],[ 1.14510457],[ 0.30768813],\ [ 0.5989414 ]]), 1: np.array([[ 4.26823484],[ 2.43651351],[ 0.8683601 ],[-0.12672555],\ [ 0.4208373 ]]), 2: np.array([[ 6.02334209],[ 3.38056146],[ 1.30003556],[ 0.12992573]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 3.27608281e-01, 5.41710779e+00, 6.05708284e-08],\ [ 1.76245578e-01, 6.49721025e+00, 8.18230736e-11],\ [ 8.95068772e-02, 3.43759205e+00, 5.86911195e-04],\ [ 6.94610221e-02, 8.62269771e+00, 6.53949186e-18]]),\ 1: np.array([[ 4.52225005e-01, 9.43829906e+00, 3.78879655e-21],\ [ 2.03807701e-01, 1.19549629e+01, 6.11608551e-33],\ [ 1.19004906e-01, 7.29684281e+00, 2.94598624e-13],\ [ 4.57552474e-02, -2.76963964e+00, 5.61183429e-03],\ [ 5.13101239e-02, 8.20183745e+00, 2.36740266e-16]]),\ 2: np.array([[ 3.27580342e-001, 1.83873735e+001, 1.65820984e-075],\ [ 1.55771577e-001, 2.17020429e+001, 1.96247435e-104],\ [ 1.06817752e-001, 1.21705946e+001, 4.45822889e-034],\ [ 4.48871540e-002, 2.89449691e+000, 3.79766647e-003]])},RTOL)
def test_3SLS_3eq_end( self): #Three equations, two endogenous, three instruments y_var2 = ['HR60', 'HR70', 'HR80'] x_var2 = [['RD60', 'PS60'], ['RD70', 'PS70', 'MA70'], ['RD80', 'PS80']] yend_var2 = [['UE60', 'DV60'], ['UE70', 'DV70'], ['UE80', 'DV80']] q_var2 = [['FH60', 'FP59', 'GI59'], ['FH70', 'FP69', 'GI69'], ['FH80', 'FP79', 'GI79']] bigy2, bigX2, bigyvars2, bigXvars2 = sur_dictxy( self.db, y_var2, x_var2) bigyend2, bigyendvars2 = sur_dictZ(self.db, yend_var2) bigq2, bigqvars2 = sur_dictZ(self.db, q_var2) reg = SURlagIV(bigy2,bigX2,bigyend2,bigq2,w=self.w,name_bigy=bigyvars2,name_bigX=bigXvars2,\ name_bigyend=bigyendvars2,name_bigq=bigqvars2,spat_diag=True,name_ds="NAT",name_w="nat_queen") dict_compare(reg.b2SLS,{0: np.array([[-2.36265226],[ 1.69785946],[ 0.65777251],[-0.07519173],[ 2.15755822],\ [ 0.69200015]]), 1: np.array([[ 8.13716008],[ 3.28583832],[ 0.90311859],[-0.21702098],[-1.04365606],\ [ 2.8597322 ],[ 0.39935589]]), 2: np.array([[-5.8117312 ],[ 3.49934818],[ 0.56523782],[ 0.09653315],\ [ 2.31166815],[ 0.20602185]])},RTOL) dict_compare(reg.b3SLS,{0: np.array([[-2.33115839],[ 1.43097732],[ 0.57312948],[ 0.03474891],[ 1.78825098],\ [ 0.7145636 ]]), 1: np.array([[ 8.34932294],[ 3.28396774],[ 0.95119978],[-0.19323687],[-1.1750583 ],\ [ 2.75925141],[ 0.38544424]]), 2: np.array([[-5.2395274 ],[ 3.38941755],[ 0.55897901],[ 0.08212108],\ [ 2.19387428],[ 0.21582944]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 7.31246733e-01, -3.18792315e+00, 1.43298614e-03],\ [ 2.07089585e-01, 6.90994348e+00, 4.84846854e-12],\ [ 1.15296751e-01, 4.97090750e+00, 6.66402399e-07],\ [ 8.75272616e-02, 3.97006755e-01, 6.91362479e-01],\ [ 3.10638495e-01, 5.75669472e+00, 8.57768262e-09],\ [ 5.40333500e-02, 1.32244919e+01, 6.33639937e-40]]),\ 1: np.array([[ 1.71703190e+00, 4.86264870e+00, 1.15825305e-06],\ [ 2.79253520e-01, 1.17598079e+01, 6.28772226e-32],\ [ 1.27575632e-01, 7.45596763e+00, 8.92106480e-14],\ [ 3.31742265e-02, -5.82490950e+00, 5.71435564e-09],\ [ 2.19785746e-01, -5.34638083e+00, 8.97303096e-08],\ [ 3.29882178e-01, 8.36435430e+00, 6.04450321e-17],\ [ 5.54968909e-02, 6.94533032e+00, 3.77575814e-12]]),\ 2: np.array([[ 9.77398092e-01, -5.36068920e+00, 8.29050465e-08],\ [ 1.67632600e-01, 2.02193222e+01, 6.61862485e-91],\ [ 1.24321379e-01, 4.49624202e+00, 6.91650078e-06],\ [ 6.94834624e-02, 1.18187957e+00, 2.37253491e-01],\ [ 1.68013780e-01, 1.30577045e+01, 5.74336064e-39],\ [ 4.16751208e-02, 5.17885587e+00, 2.23250870e-07]])},RTOL) np.testing.assert_allclose(reg.joinrho, (215.897034, 3, 1.54744730e-46))
def test_3SLS_uneqK( self ): # Three equations, unequal K, two endog variables, three instruments y_var2 = ['HR60', 'HR70', 'HR80'] x_var2 = [['RD60', 'PS60'], ['RD70', 'PS70', 'MA70'], ['RD80', 'PS80']] yend_var2 = [['UE60', 'DV60'], ['UE70', 'DV70'], ['UE80', 'DV80']] q_var2 = [['FH60', 'FP59', 'GI59'], ['FH70', 'FP69', 'GI69'], ['FH80', 'FP79', 'GI79']] bigy2, bigX2, bigyvars2, bigXvars2 = sur_dictxy( self.db, y_var2, x_var2) bigyend2, bigyendvars2 = sur_dictZ(self.db, yend_var2) bigq2, bigqvars2 = sur_dictZ(self.db, q_var2) reg = ThreeSLS(bigy2,bigX2,bigyend2,bigq2,name_bigy=bigyvars2,\ name_bigX=bigXvars2,name_bigyend=bigyendvars2,\ name_bigq=bigqvars2,name_ds="natregimes") dict_compare(reg.b2SLS,{0: np.array([[-2.04160355],[ 4.5438992 ],[ 1.65007567],[-0.73163458],\ [ 5.43071683]]), 1: np.array([[ 17.26252005],[ 5.17297895],[ 1.2893243 ],[ -0.38349609],\ [ -2.17689289],[ 4.31713382]]), 2: np.array([[-7.6809159 ],[ 3.88957396],[ 0.49973258],\ [ 0.36476446],[ 2.63375234]])},RTOL) dict_compare(reg.b3SLS,{0: np.array([[-1.56830297],[ 4.07805179],[ 1.49694849],[-0.5376807 ],\ [ 4.65487154]]), 1: np.array([[ 16.13792395],[ 4.97265632],[ 1.31962844],[ -0.32122485],\ [ -2.12407425],[ 3.91227737]]), 2: np.array([[-6.7283657 ],[ 3.79206731],[ 0.52278922],\ [ 0.33447996],[ 2.47158609]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 9.95215966e-01, -1.57584185e+00, 1.15062254e-01],\ [ 2.26574971e-01, 1.79986861e+01, 1.99495587e-72],\ [ 1.60939740e-01, 9.30129807e+00, 1.38741353e-20],\ [ 1.19040839e-01, -4.51677511e+00, 6.27885257e-06],\ [ 5.32942876e-01, 8.73427857e+00, 2.45216107e-18]]),\ 1: np.array([[ 1.59523920e+000, 1.01163035e+001, 4.67748637e-024],\ [ 1.87013008e-001, 2.65898954e+001, 8.88419907e-156],\ [ 1.44410869e-001, 9.13801331e+000, 6.36101069e-020],\ [ 3.46429228e-002, -9.27245233e+000, 1.81914372e-020],\ [ 2.49627824e-001, -8.50896434e+000, 1.75493796e-017],\ [ 4.19425249e-001, 9.32771068e+000, 1.08182251e-020]]),\ 2: np.array([[ 1.09143600e+000, -6.16469102e+000, 7.06208998e-010],\ [ 1.27908896e-001, 2.96466268e+001, 3.74870055e-193],\ [ 1.32436222e-001, 3.94747912e+000, 7.89784041e-005],\ [ 8.81489692e-002, 3.79448524e+000, 1.47950082e-004],\ [ 1.95538678e-001, 1.26398834e+001, 1.27242486e-036]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.31819323, 0.20428789],\ [ 0.31819323, 1. , 0.12492191],[ 0.20428789, 0.12492191, 1. ]]),RTOL)
def test_SUR(self): #2 equations, same K in each, two-step estimation y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SUR(bigy0,bigX0,name_bigy=bigyvars0,name_bigX=bigXvars0) dict_compare(reg.bOLS,{0: np.array([[ 5.39719146],[ 0.6973813 ],\ [ 0.22566378]]), 1: np.array([[ 1.80829725],[ 1.03504143],[ 0.6582483 ]])},RTOL) dict_compare(reg.bSUR,{0: np.array([[ 5.13907179],[ 0.67764814],\ [ 0.26372397]]), 1: np.array([[ 3.61394031],[ 1.02607147],[ 0.38654993]])},RTOL) dict_compare(reg.sur_inf,{0: np.array([[ 2.62467257e-01, 1.95798587e+01, 2.29656805e-85],\ [ 1.21957836e-01, 5.55641325e+00, 2.75374482e-08],\ [ 3.43183797e-02, 7.68462769e+00, 1.53442563e-14]]),\ 1: np.array([[ 2.53499643e-01, 1.42561949e+01, 4.10220329e-46],\ [ 1.12166227e-01, 9.14777552e+00, 5.81179115e-20],\ [ 3.41995564e-02, 1.13027760e+01, 1.27134462e-29]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.46954842],\ [ 0.46954842, 1. ]]),RTOL) np.testing.assert_allclose(reg.surchow,[(26.72917022127309, 1, 2.3406126054510838e-07),\ (8.2409218385398244, 1, 0.0040956326095295649),\ (9.3837654127686712, 1, 0.002189154327032255)],RTOL)
def test_3SLS_3eq_2or( self): # Second order spatial lags, no instrument lags y_var2 = ['HR60', 'HR70', 'HR80'] x_var2 = [['RD60', 'PS60'], ['RD70', 'PS70', 'MA70'], ['RD80', 'PS80']] yend_var2 = [['UE60', 'DV60'], ['UE70', 'DV70'], ['UE80', 'DV80']] q_var2 = [['FH60', 'FP59', 'GI59'], ['FH70', 'FP69', 'GI69'], ['FH80', 'FP79', 'GI79']] bigy2, bigX2, bigyvars2, bigXvars2 = sur_dictxy( self.db, y_var2, x_var2) bigyend2, bigyendvars2 = sur_dictZ(self.db, yend_var2) bigq2, bigqvars2 = sur_dictZ(self.db, q_var2) reg = SURlagIV(bigy2,bigX2,bigyend2,bigq2,w=self.w,w_lags=2,lag_q=False,\ name_bigy=bigyvars2,name_bigX=bigXvars2,\ name_bigyend=bigyendvars2,name_bigq=bigqvars2,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b3SLS,{0: np.array([[-2.40071969],[ 1.2933015 ],[ 0.53165876],[ 0.04883189],[ 1.6663233 ],\ [ 0.76473297]]), 1: np.array([[ 7.24987963],[ 2.96110365],[ 0.86322179],[-0.17847268],[-1.1332928 ],\ [ 2.69573919],[ 0.48295237]]), 2: np.array([[-7.55692635],[ 3.17561152],[ 0.37487877],[ 0.1816544 ],\ [ 2.45768258],[ 0.27716717]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 7.28635609e-01, -3.29481522e+00, 9.84864177e-04],\ [ 2.44756930e-01, 5.28402406e+00, 1.26376643e-07],\ [ 1.26021571e-01, 4.21879172e+00, 2.45615028e-05],\ [ 1.03323393e-01, 4.72612122e-01, 6.36489932e-01],\ [ 3.48694501e-01, 4.77874843e+00, 1.76389726e-06],\ [ 6.10435763e-02, 1.25276568e+01, 5.26966810e-36]]),\ 1: np.array([[ 1.76286536e+00, 4.11255436e+00, 3.91305295e-05],\ [ 2.78649343e-01, 1.06266306e+01, 2.24061686e-26],\ [ 1.28607242e-01, 6.71207766e+00, 1.91872523e-11],\ [ 3.21721548e-02, -5.54742685e+00, 2.89904383e-08],\ [ 2.09773378e-01, -5.40246249e+00, 6.57322045e-08],\ [ 3.06806758e-01, 8.78644007e+00, 1.54373978e-18],\ [ 5.88231798e-02, 8.21023915e+00, 2.20748374e-16]]),\ 2: np.array([[ 1.10429601e+00, -6.84320712e+00, 7.74395589e-12],\ [ 1.81002635e-01, 1.75445597e+01, 6.54581911e-69],\ [ 1.33983129e-01, 2.79795505e+00, 5.14272697e-03],\ [ 7.56814009e-02, 2.40025154e+00, 1.63838090e-02],\ [ 1.83365858e-01, 1.34031635e+01, 5.79398038e-41],\ [ 4.61324726e-02, 6.00807101e+00, 1.87743612e-09]])},RTOL)
def test_3SLS_3eq_end(self): #Three equations, two endogenous, three instruments y_var2 = ['HR60','HR70','HR80'] x_var2 = [['RD60','PS60'],['RD70','PS70','MA70'],['RD80','PS80']] yend_var2 = [['UE60','DV60'],['UE70','DV70'],['UE80','DV80']] q_var2 = [['FH60','FP59','GI59'],['FH70','FP69','GI69'],['FH80','FP79','GI79']] bigy2,bigX2,bigyvars2,bigXvars2 = sur_dictxy(self.db,y_var2,x_var2) bigyend2,bigyendvars2 = sur_dictZ(self.db,yend_var2) bigq2,bigqvars2 = sur_dictZ(self.db,q_var2) reg = SURlagIV(bigy2,bigX2,bigyend2,bigq2,w=self.w,name_bigy=bigyvars2,name_bigX=bigXvars2,\ name_bigyend=bigyendvars2,name_bigq=bigqvars2,spat_diag=True,name_ds="NAT",name_w="nat_queen") dict_compare(reg.b2SLS,{0: np.array([[-2.36265226],[ 1.69785946],[ 0.65777251],[-0.07519173],[ 2.15755822],\ [ 0.69200015]]), 1: np.array([[ 8.13716008],[ 3.28583832],[ 0.90311859],[-0.21702098],[-1.04365606],\ [ 2.8597322 ],[ 0.39935589]]), 2: np.array([[-5.8117312 ],[ 3.49934818],[ 0.56523782],[ 0.09653315],\ [ 2.31166815],[ 0.20602185]])},RTOL) dict_compare(reg.b3SLS,{0: np.array([[-2.33115839],[ 1.43097732],[ 0.57312948],[ 0.03474891],[ 1.78825098],\ [ 0.7145636 ]]), 1: np.array([[ 8.34932294],[ 3.28396774],[ 0.95119978],[-0.19323687],[-1.1750583 ],\ [ 2.75925141],[ 0.38544424]]), 2: np.array([[-5.2395274 ],[ 3.38941755],[ 0.55897901],[ 0.08212108],\ [ 2.19387428],[ 0.21582944]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 7.31246733e-01, -3.18792315e+00, 1.43298614e-03],\ [ 2.07089585e-01, 6.90994348e+00, 4.84846854e-12],\ [ 1.15296751e-01, 4.97090750e+00, 6.66402399e-07],\ [ 8.75272616e-02, 3.97006755e-01, 6.91362479e-01],\ [ 3.10638495e-01, 5.75669472e+00, 8.57768262e-09],\ [ 5.40333500e-02, 1.32244919e+01, 6.33639937e-40]]),\ 1: np.array([[ 1.71703190e+00, 4.86264870e+00, 1.15825305e-06],\ [ 2.79253520e-01, 1.17598079e+01, 6.28772226e-32],\ [ 1.27575632e-01, 7.45596763e+00, 8.92106480e-14],\ [ 3.31742265e-02, -5.82490950e+00, 5.71435564e-09],\ [ 2.19785746e-01, -5.34638083e+00, 8.97303096e-08],\ [ 3.29882178e-01, 8.36435430e+00, 6.04450321e-17],\ [ 5.54968909e-02, 6.94533032e+00, 3.77575814e-12]]),\ 2: np.array([[ 9.77398092e-01, -5.36068920e+00, 8.29050465e-08],\ [ 1.67632600e-01, 2.02193222e+01, 6.61862485e-91],\ [ 1.24321379e-01, 4.49624202e+00, 6.91650078e-06],\ [ 6.94834624e-02, 1.18187957e+00, 2.37253491e-01],\ [ 1.68013780e-01, 1.30577045e+01, 5.74336064e-39],\ [ 4.16751208e-02, 5.17885587e+00, 2.23250870e-07]])},RTOL) np.testing.assert_allclose(reg.joinrho,(215.897034, 3, 1.54744730e-46))
def test_3SLS_uneqK(self): # Three equations, unequal K, two endog variables, three instruments y_var2 = ['HR60','HR70','HR80'] x_var2 = [['RD60','PS60'],['RD70','PS70','MA70'],['RD80','PS80']] yend_var2 = [['UE60','DV60'],['UE70','DV70'],['UE80','DV80']] q_var2 = [['FH60','FP59','GI59'],['FH70','FP69','GI69'],['FH80','FP79','GI79']] bigy2,bigX2,bigyvars2,bigXvars2 = sur_dictxy(self.db,y_var2,x_var2) bigyend2,bigyendvars2 = sur_dictZ(self.db,yend_var2) bigq2,bigqvars2 = sur_dictZ(self.db,q_var2) reg = ThreeSLS(bigy2,bigX2,bigyend2,bigq2,name_bigy=bigyvars2,\ name_bigX=bigXvars2,name_bigyend=bigyendvars2,\ name_bigq=bigqvars2,name_ds="natregimes") dict_compare(reg.b2SLS,{0: np.array([[-2.04160355],[ 4.5438992 ],[ 1.65007567],[-0.73163458],\ [ 5.43071683]]), 1: np.array([[ 17.26252005],[ 5.17297895],[ 1.2893243 ],[ -0.38349609],\ [ -2.17689289],[ 4.31713382]]), 2: np.array([[-7.6809159 ],[ 3.88957396],[ 0.49973258],\ [ 0.36476446],[ 2.63375234]])},RTOL) dict_compare(reg.b3SLS,{0: np.array([[-1.56830297],[ 4.07805179],[ 1.49694849],[-0.5376807 ],\ [ 4.65487154]]), 1: np.array([[ 16.13792395],[ 4.97265632],[ 1.31962844],[ -0.32122485],\ [ -2.12407425],[ 3.91227737]]), 2: np.array([[-6.7283657 ],[ 3.79206731],[ 0.52278922],\ [ 0.33447996],[ 2.47158609]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 9.95215966e-01, -1.57584185e+00, 1.15062254e-01],\ [ 2.26574971e-01, 1.79986861e+01, 1.99495587e-72],\ [ 1.60939740e-01, 9.30129807e+00, 1.38741353e-20],\ [ 1.19040839e-01, -4.51677511e+00, 6.27885257e-06],\ [ 5.32942876e-01, 8.73427857e+00, 2.45216107e-18]]),\ 1: np.array([[ 1.59523920e+000, 1.01163035e+001, 4.67748637e-024],\ [ 1.87013008e-001, 2.65898954e+001, 8.88419907e-156],\ [ 1.44410869e-001, 9.13801331e+000, 6.36101069e-020],\ [ 3.46429228e-002, -9.27245233e+000, 1.81914372e-020],\ [ 2.49627824e-001, -8.50896434e+000, 1.75493796e-017],\ [ 4.19425249e-001, 9.32771068e+000, 1.08182251e-020]]),\ 2: np.array([[ 1.09143600e+000, -6.16469102e+000, 7.06208998e-010],\ [ 1.27908896e-001, 2.96466268e+001, 3.74870055e-193],\ [ 1.32436222e-001, 3.94747912e+000, 7.89784041e-005],\ [ 8.81489692e-002, 3.79448524e+000, 1.47950082e-004],\ [ 1.95538678e-001, 1.26398834e+001, 1.27242486e-036]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.31819323, 0.20428789],\ [ 0.31819323, 1. , 0.12492191],[ 0.20428789, 0.12492191, 1. ]]),RTOL)
def test_3SLS(self): #2 equations, same K in each y_var0 = ['HR80','HR90'] x_var0 = [['PS80','UE80'],['PS90','UE90']] bigy0,bigX0,bigyvars0,bigXvars0 = sur_dictxy(self.db,y_var0,x_var0) reg = SURlagIV(bigy0,bigX0,w=self.w,name_bigy=bigyvars0,name_bigX=bigXvars0,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b3SLS,{0: np.array([[ 4.79766641],[ 0.66900706],[ 0.45430715],\ [-0.13665465]]), 1: np.array([[ 2.27972563],[ 0.99252289],[ 0.52280565],[ 0.06909469]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 4.55824001e+00, 1.05252606e+00, 2.92558259e-01],\ [ 3.54744447e-01, 1.88588453e+00, 5.93105171e-02],\ [ 7.79071951e-02, 5.83138887e+00, 5.49679157e-09],\ [ 6.74318852e-01, -2.02655838e-01, 8.39404043e-01]]),\ 1: np.array([[ 3.90351092e-01, 5.84019280e+00, 5.21404469e-09],\ [ 1.21674079e-01, 8.15722547e+00, 3.42808098e-16],\ [ 4.47686969e-02, 1.16779288e+01, 1.65273681e-31],\ [ 7.99640809e-02, 8.64071585e-01, 3.87548567e-01]])},RTOL) np.testing.assert_allclose(reg.corr,np.array([[ 1. , 0.525751], [ 0.525751, 1. ]]),RTOL) np.testing.assert_allclose(reg.surchow,[(0.3178787640240518, 1, 0.57288522734425285),\ (1.0261877219299562, 1, 0.31105574708021311),\ (0.76852435750330428, 1, 0.38067394159083323),\ (0.099802260814129934, 1, 0.75206705793155604)],RTOL)
def test_3SLS_3eq_2or(self): # Second order spatial lags, no instrument lags y_var2 = ['HR60','HR70','HR80'] x_var2 = [['RD60','PS60'],['RD70','PS70','MA70'],['RD80','PS80']] yend_var2 = [['UE60','DV60'],['UE70','DV70'],['UE80','DV80']] q_var2 = [['FH60','FP59','GI59'],['FH70','FP69','GI69'],['FH80','FP79','GI79']] bigy2,bigX2,bigyvars2,bigXvars2 = sur_dictxy(self.db,y_var2,x_var2) bigyend2,bigyendvars2 = sur_dictZ(self.db,yend_var2) bigq2,bigqvars2 = sur_dictZ(self.db,q_var2) reg = SURlagIV(bigy2,bigX2,bigyend2,bigq2,w=self.w,w_lags=2,lag_q=False,\ name_bigy=bigyvars2,name_bigX=bigXvars2,\ name_bigyend=bigyendvars2,name_bigq=bigqvars2,\ name_ds="NAT",name_w="nat_queen") dict_compare(reg.b3SLS,{0: np.array([[-2.40071969],[ 1.2933015 ],[ 0.53165876],[ 0.04883189],[ 1.6663233 ],\ [ 0.76473297]]), 1: np.array([[ 7.24987963],[ 2.96110365],[ 0.86322179],[-0.17847268],[-1.1332928 ],\ [ 2.69573919],[ 0.48295237]]), 2: np.array([[-7.55692635],[ 3.17561152],[ 0.37487877],[ 0.1816544 ],\ [ 2.45768258],[ 0.27716717]])},RTOL) dict_compare(reg.tsls_inf,{0: np.array([[ 7.28635609e-01, -3.29481522e+00, 9.84864177e-04],\ [ 2.44756930e-01, 5.28402406e+00, 1.26376643e-07],\ [ 1.26021571e-01, 4.21879172e+00, 2.45615028e-05],\ [ 1.03323393e-01, 4.72612122e-01, 6.36489932e-01],\ [ 3.48694501e-01, 4.77874843e+00, 1.76389726e-06],\ [ 6.10435763e-02, 1.25276568e+01, 5.26966810e-36]]),\ 1: np.array([[ 1.76286536e+00, 4.11255436e+00, 3.91305295e-05],\ [ 2.78649343e-01, 1.06266306e+01, 2.24061686e-26],\ [ 1.28607242e-01, 6.71207766e+00, 1.91872523e-11],\ [ 3.21721548e-02, -5.54742685e+00, 2.89904383e-08],\ [ 2.09773378e-01, -5.40246249e+00, 6.57322045e-08],\ [ 3.06806758e-01, 8.78644007e+00, 1.54373978e-18],\ [ 5.88231798e-02, 8.21023915e+00, 2.20748374e-16]]),\ 2: np.array([[ 1.10429601e+00, -6.84320712e+00, 7.74395589e-12],\ [ 1.81002635e-01, 1.75445597e+01, 6.54581911e-69],\ [ 1.33983129e-01, 2.79795505e+00, 5.14272697e-03],\ [ 7.56814009e-02, 2.40025154e+00, 1.63838090e-02],\ [ 1.83365858e-01, 1.34031635e+01, 5.79398038e-41],\ [ 4.61324726e-02, 6.00807101e+00, 1.87743612e-09]])},RTOL)