From 0f3b0e9449643855397077a531e65f6c1c070167 Mon Sep 17 00:00:00 2001 From: droodman Date: Wed, 24 Mar 2021 11:46:18 -0400 Subject: [PATCH] Incorporated small-sample factor in r(dist) --- boottest.ado | 3 ++- boottest.mata | 10 +++++----- lboottest.mlib | Bin 341452 -> 341524 bytes 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/boottest.ado b/boottest.ado index bf7e542..cae5b38 100644 --- a/boottest.ado +++ b/boottest.ado @@ -1,4 +1,4 @@ -*! boottest 3.1.1 18 March 2021 +*! boottest 3.1.2 24 March 2021 *! Copyright (C) 2015-21 David Roodman * This program is free software: you can redistribute it and/or modify @@ -805,6 +805,7 @@ program define _boottest, rclass sortpreserve end * Version history +* 3.1.2 Incorporated small-sample factor in r(dist) * 3.1.1 Minor bug fixes and speed-ups * 3.1.0 Complete overhaul of WRE for ~200X speed gain. Dropped GMM support. Added support for ivreg2's partial(). * 3.0.2 Dropped "KK" calculation (last expression in eq 60 in paper) because inefficient when interpolating. Refined plotting to minimize interpolation anchor resets. Refined criterion to use "granular"-optimized code (many small clusters). diff --git a/boottest.mata b/boottest.mata index ce1d864..18d506d 100644 --- a/boottest.mata +++ b/boottest.mata @@ -1,4 +1,4 @@ -*! boottest 3.1.1 18 March 2021 +*! boottest 3.1.2 24 March 2021 *! Copyright (C) 2015-21 David Roodman * This program is free software: you can redistribute it and/or modify @@ -90,7 +90,7 @@ class boottestARubin extends boottestOLS { class boottestIVGMM extends boottestOLS { real matrix ZZ, XY2, XX, H_2SLS, V, ZY2, X2Y2, X1Y2, ZR1ZR1, X2ZR1, ZR1Y2, X1ZR1, ZZR1, X2y1, X1y1, Zy1, ZXinvXXXZ, H_2SLSmZZ real colvector ZXinvXXXy1par, t1Y - real rowvector y1Y2, y1ZR1 + real rowvector y1Y2, twoy1ZR1 real scalar y1y1, y1pary1par pointer(real colvector) scalar pX2y1par, pX1y1par, pZy1par pointer(real rowvector) scalar py1parY2 @@ -288,7 +288,7 @@ void boottestIVGMM::InitVars(|pointer(real matrix) scalar pRperp) { X2ZR1 = cross(X2 , *parent->pwt, *pZR1) X1ZR1 = cross(*pX1 , *parent->pwt, *pZR1) ZZR1 = cross(*pZ , *parent->pwt, *pZR1) - y1ZR1 = cross( y1 , *parent->pwt, *pZR1) + twoy1ZR1 = cross( y1 , *parent->pwt, *pZR1); twoy1ZR1 = twoy1ZR1 + twoy1ZR1 ZR1ZR1 = cross(*pZR1, *parent->pwt, *pZR1) ZR1Y2 = cross(*pZR1, *parent->pwt, Y2 ) } else { @@ -370,7 +370,7 @@ void boottestIVGMM::Estimate(real colvector r1) { pragma unset vec; pragma unset val if (cols(R1invR1R1)) { - y1pary1par = y1y1 - 2 * y1ZR1 * r1 + r1 ' ZR1ZR1 * r1 + y1pary1par = y1y1 - twoy1ZR1 * r1 + r1 ' ZR1ZR1 * r1 py1par = &(y1 - *pZR1 * r1) py1parY2 = &(y1Y2 - r1 ' ZR1Y2) pX2y1par = &(X2y1 - X2ZR1 * r1) @@ -662,7 +662,7 @@ real colvector boottest::getdist(| string scalar diststat) { _sort( DistCDR = (*_pnumer)[|2\.|]' :+ *pr , 1) } else if (rows(DistCDR)==0) if (cols(*pDist) > 1) - _sort( DistCDR=(*pDist)[|2\.|]' , 1) + _sort( DistCDR = multiplier * (*pDist)[|2\.|]' , 1) else DistCDR = J(0,1,0) return(DistCDR) diff --git a/lboottest.mlib b/lboottest.mlib index fe7bb023a80daa151389cc85e4d5088f874ee9c1..3a99b0abd86171df518e801162a98aa595009534 100644 GIT binary patch delta 2106 zcmcIkdu-H25T4!rwm><{HMV!5(B9P&s6bkt#`pkK&_aQNfKL=iix`W%gF;X+1=>i7 zRN9+TAT1oU3gr=s9)VCRk5I7k5E2Q7Qix)CDTIWmC^)}f!P*f2^Owxc?zcNT^L;zF zbys2vuf}Zerxxm;4V}4cX!lh^>u(zBb6duD4SfkvTnAA1o}gLJg60kZmAn9&HWYLx z9kg{k=)@U#A+LFgw3Pg&< zT6!YhCR2*v(#RxB)4EzZ(p|3FK8r=;ApK9<(>v-EazxjAlsuG_D~bja;DF$Zj&CaU5`e>6X-?cDIQnXM{$Y@->Y zg8W&d=_c-Yqv@fFdBuL^O`K0eGsJvim13jChKYH^(!^r<{YH~2LH-hx#9sxCi*qiS zME=2N+jIRz_)P&Id5lD+zm}4Znd@Ahd zmJD)RVNoJT{sXXr2Vj9#*Z_$wX@$iJRvN~l?k9G@AZLt44_#q6F$?h#G+3}rTsjs> zdRrK4(}Y#Eoa|~jsWyD0T&3`v4S zwiH;!hl{%%Q+B_`*_^PZp^n%|AM=dIw{) zb$N;Qhi**8T5X+%>KMp_mwmZ#^YjAw@h!vS{A(^^xHKPaLmhH)MTOeULUdbw)^PN4 z^a%|tz#tW!E_9YR({#pup7<$_8uB63dnJmLp$zchLOf$=3izQSbTpI&UQvdwoKb|# zrrEkJh>Pef(XujgudLiI!ZLYwz=;8PxHN!)hK5=`AHYmQZp){Gn9s);8HR>fPAtZj zhe@70YA0tnZQ)$%LGbxvB!&|#K^*&5;gF$f8&1)o1XW%dDM8XD@_Aj-Ec=^=mbafW zokC_Y=4mvw%%Y`O7OBp%dpY|47x81t7wWYVtW*Zq7UDTIg$sszr=ocHydssq;u)i4FqGP4X7EE!F z8;YfEa_QtBwztb|vk zhhA8NHpWvS;@!JZM-Jy+<|t0wjKi9;IkgO%JvlA*IPavRccJ2E<{1yC7ibqBt3p~#n`%9OvjL@QE@y8< zPIE*8N0nn@TcY-P@@KxlAAYNz4ih<9-kL~+@u&((*@}sp!~V_qMrRZED#LUhUx_DU zou}a5zGgP6kO$2(-uq;xs(P+j0&iq96MTTkDB9s4zo8xPwl{poWB8Mng=)l delta 2114 zcmcIkdrXu^5TD(hJp?U1DjYuGIE4CE#79ySB?wlj3cm4LY@!iTTdl7qMQkeyhy*aT zDvsa-go5CML$vwOXu)cHq*g=fAN7$cX{)GcR2tjb7CN5?gcAB^zvOp2``g{w`OVDU zjwavB4}Gh~iqvO!6`XvaprA=XTC;-J{$#sV!A?YY;f>%m9AQorLj0Qu>!u>ay@l}O zbcF1M%q>T_k&cj7hG72+;qgi4FY@~L2rbtU*4#nZ)`Sr8JA(WhAxdhvf*Rty7=9X_ z1?a(WH%NmeM8m*=8q$WcJyJu&C=KhvH4Gi2;pA8iACJ?=jvgK7eavbdEK=+4D>(j8 z!G=c)GX79d^p}Di5@DAGVWB@lO(a57G(z1Jgt0LQOQ#{si{<$;<~ihx1qc(W5ugU) z)@g({INXeD2y1U6EN|fRzagCCkRyeL$x4IM!lO5j0UB}xbtps*&~TYU-Y{50#&8W; zVH$qrkYTijc^s~zE!=dgW3$yE7}BshliO$j|B*ahRUmQy+;Ql*4D(yZSj7lplrv^CrZH@c7|Lo?VSLI_phBp&MD?PQ`zn}zx~m50 zQ@p`NUibdDy9~aoeu)l!72p!3#9|-iJz0iLsw*@g4wY~*yq zZS983>%v9w+59eCKj!wiIq!~(O|qC)&ck7{Oi^$m2716`<|-8RIg56SX;*e$sO~&5 zI!{h3dRit%()#(hN1UPl@far0D+<4gehS#w(1>fPdw+7ng8abH*-1Na9g|K z^15&ld^W!e*N?e927P+SdPQfla5T-_h5_{THr30h{Q~<4^4N|p1-;QYu^sb-f@q}Kc{s@q3H-v_ zACW0*CWCVZUJNIFz8-U=6UnCq0~N5bx&Q}K`cCAAJkB)Xd<7FV?ajwHG6+Kypr)rT zoK3H6#1uJR)2I@Rr`BD#pf`B(8yIXPWUym=*# zq|m)mOg9g5@$8gchKuO&GHJ8)uGhb|oDWJ(TTWC!S4H zp-2Y0Q;3(8SOIjn2v<^F9>2V+hcVR8eE#ij+T;qN$Q0#os$DA@sA?1MWvxAA15iLQ zCP~>qj!HZv9WTqcUy5d0<-$~vXqLEHmIB3;;$9_FfEr72qq(2!7vz@M@koi~u