From 2b81ba5ac77cc234354d8b5e15607d8bb70f4cfd Mon Sep 17 00:00:00 2001 From: droodman Date: Thu, 29 Dec 2022 16:39:50 -0500 Subject: [PATCH] Fixed crash in AR test after over-ID'd regression; added mention of jackknifing to output --- boottest.ado | 9 ++++-- boottest.mata | 84 +++++++++++++++++++++---------------------------- lboottest.mlib | Bin 447336 -> 445960 bytes unit tests.log | 16 +++++----- 4 files changed, 51 insertions(+), 58 deletions(-) diff --git a/boottest.ado b/boottest.ado index 40f2f39..e058cb3 100644 --- a/boottest.ado +++ b/boottest.ado @@ -1,4 +1,4 @@ -*! boottest 4.4.0 23 December 2022 +*! boottest 4.4.1 28 December 2022 *! Copyright (C) 2015-22 David Roodman * This program is free software: you can redistribute it and/or modify @@ -1001,7 +1001,11 @@ program define _boottest, rclass sortpreserve } di - if `reps' di as txt strproper("`boottype'") " bootstrap-`statistic', null " cond(0`null', "", "not ") "imposed, " as txt `reps' as txt " replications, " _c + if `reps' { + di as txt strproper("`boottype'") " bootstrap-`statistic', null " cond(0`null', "", "not ") "imposed, " _c + if `jk' di "jackknifed residuals, " _c + di as txt `reps' as txt " replications, " _c + } di as txt cond(`ar', "Anderson-Rubin ", "") cond(!`reps' & `null' & "`boottype'"=="score", "Rao score (Lagrange multiplier)", "Wald") " test" _c if "`cluster'"!="" di ", clustering by " as res "`cluster'" _c if ("`bootcluster'"!="" | `NErrClustVar' > 1) & `reps' di as txt ", bootstrap clustering by " as res "`bootcluster'" _c @@ -1169,6 +1173,7 @@ end * Version history +* 4.4.1 Fixed crash in AR test after over-ID'd regression; added mention of jackknifing to output * 4.4.0 Minimized O(N) operations in non-jk WRE when clustering is coarse. Skip FE code in WRE if FE = cluster grouping. Bumped Julia version to 0.8.5. * 4.3.1 Bumped Julia version to 0.8.3. Check for Python 2. Restored code path of memory-intensive granular WRE computation of denominator. * 4.3.0 Added jackknife for WRE; fixed failure to detect constant term after ivreg; fixed incorrect computation in "WUE" diff --git a/boottest.mata b/boottest.mata index c62d821..b5338dd 100644 --- a/boottest.mata +++ b/boottest.mata @@ -1,4 +1,4 @@ -*! boottest 4.4.0 23 December 2022 +*! boottest 4.4.1 28 December 2022 *! Copyright (C) 2015-22 David Roodman * This program is free software: you can redistribute it and/or modify @@ -527,7 +527,7 @@ void boottestIVGMM::InitVars(|pointer(real matrix) scalar pRperp) { if (parent->robust & parent->bootstrapt & (parent->granular | parent->jk /*| parent->NFE*/)) { // for WRE replication regression, prepare for CRVE XinvXX = *pX12B(*pX1, X2, invXX) - if (((parent->granular & parent->Nw==1) | parent->jk) & parent->WREnonARubin) + if ((parent->granular | parent->jk) & parent->WREnonARubin) PXZ = *pX12B(*pX1, X2, invXXXZ) } } @@ -1409,7 +1409,7 @@ void boottest::boottest() { rseed(seed) MakeWildWeights(WeightGrpStop[1] - 1, 1) } - + if (WREnonARubin) PrepWRE() else @@ -1501,6 +1501,7 @@ void boottest::MakeWildWeights(real scalar _B, real scalar first) { // (only really the Hessian when we narrow Y to Z) real matrix boottest::HessianFixedkappa(real rowvector ind1, real scalar ind2, real scalar kappa, real scalar _jk) { real matrix retval; real scalar i + if (cols(ind1) > 1) { retval = J(cols(ind1),cols(v),0) for (i=cols(ind1);i;i--) @@ -1559,52 +1560,39 @@ pointer(real matrix) scalar boottest::Filling(real scalar ind1, real matrix beta pragma unset retval if (granular) { // create pieces of each N x B matrix one at a time rather than whole thing at once - if (Nw == 1) { // create or avoid NxB matrix? - pPXYstar = pcol(PXZbar, ind1) - if (Repl.Yendog[ind1+1]) - pPXYstar = &(*pPXYstar :+ SstarUPX[ind1+1].M * v) - retval = *_panelsum(*pPXYstar :* (DGP.y1bar :- SstarUMZperp.M * v), *pinfoCapData) - - for (ind2=Repl.kZ;ind2;ind2--) { + retval = J(Clust.N, cols(v), 0) + SstarUXv = SstarUX[ind1+1].M * v + for (ind2=0; ind2<=Repl.kZ; ind2++) { + if (ind2) { _beta = betas[ind2,] - retval = retval - *_panelsum(*pPXYstar :* (Repl.Yendog[ind2+1]? *pcol(Zbar,ind2) * _beta :- SstarUMZperp[ind2+1].M * (v :* _beta) : - *pcol(Zbar,ind2) * _beta ), *pinfoCapData) - } - } else { // create pieces of each N x B matrix one at a time rather than whole thing at once--slower, but less memory-intensive - retval = J(Clust.N, cols(v), 0) - SstarUXv = SstarUX[ind1+1].M * v - for (ind2=0; ind2<=Repl.kZ; ind2++) { - if (ind2) { - _beta = betas[ind2,] - pbetav = &(v :* _beta) - } else - pbetav = &v + pbetav = &(v :* _beta) + } else + pbetav = &v - if (Repl.Yendog[ind2+1]) - SstarUZperpinvZperpZperp_v = SstarinvZperpZperpZperpU[ind2+1].M * *pbetav + if (Repl.Yendog[ind2+1]) + SstarUZperpinvZperpZperp_v = SstarinvZperpZperpZperpU[ind2+1].M * *pbetav - if (NFE & FEboot==0) - CTstarFEUv = invFEwt :* (CTstarFEU[ind2+1].M * *pbetav) + if (NFE & FEboot==0) + CTstarFEUv = invFEwt :* (CTstarFEU[ind2+1].M * *pbetav) - for (i=Clust.N;i;i--) { - S = (*pinfoCapData)[i,]' - pPXYstar = &PXZbar[|S,(ind1\ind1)|] - if (Repl.Yendog[ind1+1]) - pPXYstar = &(*pPXYstar :+ *pXS(Repl.XinvXX,S) * SstarUXv) - if (Repl.Yendog[ind2+1]) { - SstarUMZperp_ind2_i = *pXS(*Repl.pZperp,S) * SstarUZperpinvZperpZperp_v - (ind2? (*pU2parddot)[|S, (ind2\ind2)|] :* (*pbetav)[*pXS(*pIDBootData,S),] : - DGP.u1dddot.M[|S |] :* v [*pXS(*pIDBootData,S),]) - - if (NFE & FEboot==0) - SstarUMZperp_ind2_i = SstarUMZperp_ind2_i + CTstarFEUv[(*pFEID)[|S|],] // CT_(*,FE) (U ̈_(∥j) ) (S_FE S_FE^' )^(-1) S_FE - - if (ind2) - retval[i,] = retval[i,] - colsum(*pPXYstar :* (Zbar[|S,(ind2\ind2)|] * _beta :- SstarUMZperp_ind2_i)) - else - retval[i,] = colsum(*pPXYstar :* (DGP.y1bar[|S|] :- SstarUMZperp_ind2_i)) - } else - retval[i,] = retval[i,] - colsum(*pPXYstar :* (Zbar[|S,(ind2\ind2)|] * _beta)) - } + for (i=Clust.N;i;i--) { + S = (*pinfoCapData)[i,]' + pPXYstar = &PXZbar[|S,(ind1\ind1)|] + if (Repl.Yendog[ind1+1]) + pPXYstar = &(*pPXYstar :+ *pXS(Repl.XinvXX,S) * SstarUXv) + if (Repl.Yendog[ind2+1]) { + SstarUMZperp_ind2_i = *pXS(*Repl.pZperp,S) * SstarUZperpinvZperpZperp_v - (ind2? (*pU2parddot)[|S, (ind2\ind2)|] :* (*pbetav)[*pXS(*pIDBootData,S),] : + DGP.u1dddot.M[|S |] :* v [*pXS(*pIDBootData,S),]) + + if (NFE & FEboot==0) + SstarUMZperp_ind2_i = SstarUMZperp_ind2_i + CTstarFEUv[(*pFEID)[|S|],] // CT_(*,FE) (U ̈_(∥j) ) (S_FE S_FE^' )^(-1) S_FE + + if (ind2) + retval[i,] = retval[i,] - colsum(*pPXYstar :* (Zbar[|S,(ind2\ind2)|] * _beta :- SstarUMZperp_ind2_i)) + else + retval[i,] = colsum(*pPXYstar :* (DGP.y1bar[|S|] :- SstarUMZperp_ind2_i)) + } else + retval[i,] = retval[i,] - colsum(*pPXYstar :* (Zbar[|S,(ind2\ind2)|] * _beta)) } } } else if (jk) // coarse error clustering with O(N) operations @@ -1879,7 +1867,7 @@ void boottest::InitWRE() { // stuff done only once that knits together results } } - if (NFE & FEboot==0) { + if (jk==0 & robust & bootstrapt & NFE & FEboot==0) { CTstarFEY2 = smatrix(kY2); for (i=kY2;i;i--) CTstarFEY2[i].M = crosstabFE(*pcol(DGP.Y2,i), infoBootData) CTstarFEX = smatrix(DGP.kX); for (i=DGP.kX1;i ;i--) CTstarFEX[i].M = crosstabFE(*pcol(*DGP.pX1,i ), infoBootData) for (i=DGP.kX;i>DGP.kX1;i--) CTstarFEX[i].M = crosstabFE(*pcol(DGP.X2 ,i-DGP.kX1), infoBootData) @@ -1973,7 +1961,7 @@ void boottest::PrepWRE() { SstarUU[i+1,j+1].M = *_panelsum(j? *pcol(*pU2parddot,j) : DGP.u1dddot.M, *pu, infoBootData) } - if (robust & bootstrapt & (granular==0 | Nw==1) & Repl.Yendog[i+1]) { + if (robust & bootstrapt & granular==0 & Repl.Yendog[i+1]) { SstarUPX[i+1].M = Repl.XinvXX * SstarUX[i+1].M SstarUMZperp[i+1].M = *Repl.pZperp * SstarinvZperpZperpZperpU[i+1].M if (Nobs == Nstar) // subtract "crosstab" of observation by cap-group of u @@ -2711,7 +2699,7 @@ void boottest::plot() { if (q==2) { // 2D plot lo = hi = J(2, 1, .) - for(d=df;d;d--) { + for(d=q;d;d--) { lo[d] = editmissing(gridmin[d], confpeak[d] - halfwidth[d]) hi[d] = editmissing(gridmax[d], confpeak[d] + halfwidth[d]) diff --git a/lboottest.mlib b/lboottest.mlib index d51ed80215bf8523d69e4182b8b7224d5c028485..2c740a100570a1902dd178db94e47962f010268b 100644 GIT binary patch delta 4808 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 t+t95uEq26H1kNwo^$|t| = 0.0921 -Wild bootstrap-t, null imposed, 999 replications, Wald test, bootstrap clustering by year, Webb weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Wald test, bootstrap clustering by year, Webb weights: post_self=.04 t(7) = 2.0194 @@ -254,7 +254,7 @@ Wild bootstrap-t, null imposed, 999 replications, Wald test, bootstrap clusterin 95% confidence set for null hypothesis expression: [.03593, .07168] -Wild bootstrap-t, null not imposed, 999 replications, Wald test, bootstrap clustering by year, Webb weights: +Wild bootstrap-t, null not imposed, jackknifed residuals, 999 replications, Wald test, bootstrap clustering by year, Webb weights: post_self=.04 t(7) = 2.0194 @@ -471,7 +471,7 @@ Wild bootstrap-t, null imposed, 999 replications, Wald test, bootstrap clusterin z = 7.5847 Prob>|z| = 0.0070 -Wild bootstrap-t, null imposed, 999 replications, Wald test, bootstrap clustering by industry, Rademacher weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Wald test, bootstrap clustering by industry, Rademacher weights: tenure z = 7.5847 @@ -524,7 +524,7 @@ Wild bootstrap-t, null imposed, 999 replications, Wald test, bootstrap clusterin 95% confidence set for null hypothesis expression: [−.8324, −.602] ∪ [.2065, 1.205] -Wild bootstrap-t, null imposed, 999 replications, Wald test, bootstrap clustering by industry, Rademacher weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Wald test, bootstrap clustering by industry, Rademacher weights: tenure z = 4.0267 @@ -546,7 +546,7 @@ Wild bootstrap-t, null imposed, 999 replications, Anderson-Rubin Wald test, boot chi2(2) = 477.2687 Prob > chi2 = 0.0000 -Wild bootstrap-t, null imposed, 999 replications, Anderson-Rubin Wald test, bootstrap clustering by industry, Rademacher weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Anderson-Rubin Wald test, bootstrap clustering by industry, Rademacher weights: collgrad tenure chi2(2) = 477.2687 @@ -566,7 +566,7 @@ Wild bootstrap-t, null imposed, 999 replications, Wald test, Rademacher weights: 95% confidence set for null hypothesis expression: [−.0196, .0829] -Wild bootstrap-t, null imposed, 999 replications, Wald test, Rademacher weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Wald test, Rademacher weights: tenure t(2227) = 1.2925 @@ -616,7 +616,7 @@ Wild bootstrap-t, null imposed, 999 replications, Wald test, clustering by age o Overriding estimator's cluster/robust settings with cluster(age occupation) -Wild bootstrap-t, null imposed, 999 replications, Wald test, clustering by age occupation, bootstrap clustering by occupation, Rademacher weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Wald test, clustering by age occupation, bootstrap clustering by occupation, Rademacher weights: tenure t(12) = 0.4874 @@ -636,7 +636,7 @@ Wild bootstrap-t, null imposed, 999 replications, Wald test, clustering by age o Overriding estimator's cluster/robust settings with cluster(age occupation) -Wild bootstrap-t, null imposed, 999 replications, Wald test, clustering by age occupation, bootstrap clustering by occupation, Rademacher weights: +Wild bootstrap-t, null imposed, jackknifed residuals, 999 replications, Wald test, clustering by age occupation, bootstrap clustering by occupation, Rademacher weights: tenure t(12) = 0.4874