Skip to content

Commit 3e0f32b

Browse files
committed
Chores
Chores in spatial lags code.
1 parent 5f5a1b0 commit 3e0f32b

4 files changed

Lines changed: 29 additions & 17 deletions

File tree

paneldata/util/simpacts.m

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
if est.slagy ~= 1
3030
error("Model does not have spatial lag of dependent variable.")
3131
end
32+
33+
% Error if additional spatial lags of X variables
34+
if ~isempty(est.slagX)
35+
error("Not yet implemented when additional spatial lags of X are included in the model.")
36+
end
3237

3338
% Get W matrix
3439
if est.isPanel
@@ -64,21 +69,21 @@
6469
hessi = est.varcoef;
6570
hessi = circshift(hessi,[1,1]); % Put spatial lag in first place
6671

67-
D_d = zeros(k,1);
68-
D_i = zeros(k,1);
69-
D_t = zeros(k,1);
72+
seADI = zeros(k,1);
73+
seAII = zeros(k,1);
74+
seATI = zeros(k,1);
7075

7176
ind = 1;
7277
for jj = 1:k
73-
D_d(jj) = full(sqrt([SSSi*coefs_beta(jj)/N, SSi/N]*(N*hessi([1,jj+ind],[1,jj+ind]))*[SSSi*coefs_beta(jj)/N, SSi/N]'/N));
74-
D_t(jj) = full(sqrt([KKi*coefs_beta(jj)/N, Ki/N]*(N*hessi([1,jj+ind],[1,jj+ind]))*[KKi*coefs_beta(jj)/N, Ki/N]'/N));
75-
D_i(jj) = full(sqrt(([KKi*coefs_beta(jj)/N, Ki/N]-[SSSi*coefs_beta(jj)/N, SSi/N])*(N*hessi([1,jj+ind],[1,jj+ind]))*([KKi*coefs_beta(jj)/N, Ki/N]-[SSSi*coefs_beta(jj)/N, SSi/N])'/N));
78+
seADI(jj) = full(sqrt([SSSi*coefs_beta(jj)/N, SSi/N]*(N*hessi([1,jj+ind],[1,jj+ind]))*[SSSi*coefs_beta(jj)/N, SSi/N]'/N));
79+
seATI(jj) = full(sqrt([KKi*coefs_beta(jj)/N, Ki/N]*(N*hessi([1,jj+ind],[1,jj+ind]))*[KKi*coefs_beta(jj)/N, Ki/N]'/N));
80+
seAII(jj) = full(sqrt(([KKi*coefs_beta(jj)/N, Ki/N]-[SSSi*coefs_beta(jj)/N, SSi/N])*(N*hessi([1,jj+ind],[1,jj+ind]))*([KKi*coefs_beta(jj)/N, Ki/N]-[SSSi*coefs_beta(jj)/N, SSi/N])'/N));
7681
end
7782

7883
% p-value
79-
pADI = (1 - normaldist(abs(ADI ./ D_d)))' * 2;
80-
pAII = (1 - normaldist(abs(AII ./ D_i)))' * 2;
81-
pATI = (1 - normaldist(abs(ATI ./ D_t)))' * 2;
84+
pADI = (1 - normaldist(abs(ADI ./ seADI)))' * 2;
85+
pAII = (1 - normaldist(abs(AII ./ seAII)))' * 2;
86+
pATI = (1 - normaldist(abs(ATI ./ seATI)))' * 2;
8287

8388
% Return structure with results
8489
simps.xnames = xnames;
@@ -88,9 +93,9 @@
8893
simps.AII = AII;
8994
simps.ATI = ATI;
9095

91-
simps.seADI = D_d;
92-
simps.seAII = D_i;
93-
simps.seATI = D_t;
96+
simps.seADI = seADI;
97+
simps.seAII = seAII;
98+
simps.seATI = seATI;
9499

95100
simps.pADI = pADI';
96101
simps.pAII = pAII';

paneldata/util/simpactsdisp.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function simpactsdisp( estsimpacts )
3838
% Print table
3939
fprintf('\n');
4040
fprintf('-------------------------------------------\n');
41-
fprintf('%12s%8s%10s%10s \n','Variable','ADI','AII','ATI');
41+
fprintf('%12s%10s%10s%10s \n','Variable','Direct','Indirect','Total');
4242
fprintf('-------------------------------------------\n');
4343
for jj = 1:k
4444
fprintf('%12s%10.6f%10.6f%10.6f \n',string(xnames(jj)),ADI(jj),AII(jj),ATI(jj));

unittests/ut_SPANEL.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ summary(feSARAR)
7575
reSAR <- spgm(fm, data=data, listw=lw, lag=TRUE, spatial.error=FALSE, model="random", method="g2sls")
7676
summary(reSAR)
7777

78-
impreSAR <- impacts(reSAR, listw = bigW, zstats = TRUE, time = 17)
79-
summary(impreSAR, zstats = TRUE)
78+
impreSAR <- impacts(reSAR, listw = bigW, zstats = TRUE, time = 17, R = 200)
79+
summary(impreSAR, zstats = TRUE, short = TRUE)
8080

8181
# RE SAR Endog
8282
reSARen <- spgm(fme, data=data, listw=lw, lag=TRUE, spatial.error=FALSE, model="random", method="g2sls", endog= ~log(pcap), instruments= ~log(hwy) + log(water))

unittests/ut_SPANEL.m

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,17 @@
5353
assert(all(abs(feSAR.stderr - [0.02666502; 0.02509769; 0.03077822; 0.00090997; 0.02617774]) <= tolCoef),'Standard errors')
5454

5555
simpfeSAR = simpacts(feSAR);
56-
assert(all(abs(simpfeSAR.ADI - [-0.040778101; 0.221057046; 0.674485934; -0.004771802]) <= tolCoef),'ATI')
56+
assert(all(abs(simpfeSAR.ADI - [-0.040778101; 0.221057046; 0.674485934; -0.004771802]) <= tolCoef),'ADI')
5757
assert(all(abs(simpfeSAR.AII - [-0.009208631; 0.049919753; 0.152314399; -0.001077582]) <= tolCoef),'AII')
5858
assert(all(abs(simpfeSAR.ATI - [-0.049986732; 0.270976799; 0.826800333; -0.005849384]) <= tolCoef),'ATI')
5959

60+
% standard errors different from R as R use simulation method. Tested
61+
% against MATLAB implementation
62+
assert(all(abs(simpfeSAR.seADI - [0.026918; 0.025105; 0.030323; 0.000917]) <= tolCoef),'seADI')
63+
assert(all(abs(simpfeSAR.seAII - [0.006369; 0.007918; 0.022793; 0.000261]) <= tolCoef),'seAII')
64+
assert(all(abs(simpfeSAR.seATI - [0.033145; 0.028716; 0.035545; 0.001125]) <= tolCoef),'seATI')
65+
66+
6067
% FE SAR Endog
6168
feSARen = spanel(id,year,y,X,W,'fe','endog',1,'inst',Z);
6269

@@ -98,7 +105,7 @@
98105
assert(all(abs(reSAR.stderr - [0.02475292; 0.02117623; 0.02677249; 0.00090826; 0.01508851; 0.16545521]) <= tolCoef),'Standard errors')
99106

100107
simpreSAR = simpacts(reSAR);
101-
assert(all(abs(simpreSAR.ADI - [0.020988834; 0.290123078; 0.710375425; -0.006412478]) <= tolCoef),'ATI')
108+
assert(all(abs(simpreSAR.ADI - [0.020988834; 0.290123078; 0.710375425; -0.006412478]) <= tolCoef),'ADI')
102109
assert(all(abs(simpreSAR.AII - [0.0008605104; 0.0118946067; 0.0291243161; -0.0002629019]) <= tolCoef),'AII')
103110
assert(all(abs(simpreSAR.ATI - [0.021849344; 0.302017685; 0.739499741; -0.006675379]) <= tolCoef),'ATI')
104111

0 commit comments

Comments
 (0)