For a program I'm writing, I calculate the root mean squared error for a real-versus predicted model. Cigsale3 represents the real smoking per capita in California from 1970-2000, and cf represents the counterfactual predicted by my estimator. I want to include the RMSE in my graph. Here's my code.
It says the RMSE is __00003. Well, why? When we do
we get 1.53. I presume using scalars is the same as using local macros, right? What am I missing here?
Code:
* Example generated by -dataex-. For more info, type help dataex
clear
input float(year cigsale3) double cf float(relative diff_ te_ub te_lb cf_ub cf_lb)
1970 123 119.82134651069296 -19 3.1786535 13.181376 -6.824069 . .
1971 121 121.28473667832696 -18 -.2847367 9.717986 -10.28746 . .
1972 123.5 124.80728902850656 -17 -1.307289 8.695435 -11.310012 . .
1973 124.4 123.71281491583973 -16 .6871866 10.68991 -9.3155365 . .
1974 126.7 125.58585418431278 -15 1.1141428 11.116866 -8.88858 . .
1975 127.1 125.50124154491989 -14 1.598757 11.60148 -8.403966 . .
1976 128 127.23161992677203 -13 .76838 10.771103 -9.234344 . .
1977 126.4 125.22142446733864 -12 1.1785771 11.1813 -8.824146 . .
1978 126.1 124.30211296755871 -11 1.7978855 11.80061 -8.204838 . .
1979 121.9 121.4519594845576 -10 .448042 10.450766 -9.554681 . .
1980 120.2 120.31033638806436 -9 -.11033944 9.892384 -10.113063 . .
1981 118.6 118.45282869275808 -8 .14716978 10.149893 -9.855554 . .
1982 115.4 116.16303441553967 -7 -.7630329 9.23969 -10.765756 . .
1983 110.8 112.16553654588606 -6 -1.3655335 8.63719 -11.368257 . .
1984 104.8 104.79919815323449 -5 .0008048985 10.003528 -10.001918 . .
1985 102.8 103.78663228449747 -4 -.9866292 9.016094 -10.989352 . .
1986 99.7 100.55414064169827 -3 -.8541437 9.14858 -10.856867 . .
1987 97.5 98.53773049469044 -2 -1.0377305 8.964993 -11.040454 . .
1988 90.1 94.31016267480518 -1 -4.210164 5.792559 -14.212887 108.52305 88.5176
1989 82.4 91.43004762108781 0 -9.030046 .9726767 -19.03277 110.46281 90.45737
1990 77.8 86.73737755464903 1 -8.937374 1.065349 -18.940098 105.67747 85.67203
1991 68.7 81.49684970441062 2 -12.796853 -2.79413 -22.799576 104.29642 78.70272
1992 67.5 80.17442849432022 3 -12.67443 -2.671706 -22.67715 102.85158 77.50272
1993 63.4 79.30744600654128 4 -15.907445 -5.904722 -25.91017 105.21761 73.402725
1994 58.6 77.5410142580436 5 -18.941015 -8.9382925 -28.94374 106.48476 68.60272
1995 56.4 77.24890915711582 6 -20.84891 -10.846185 -30.85163 108.10054 66.402725
1996 54.5 75.21275766342676 7 -20.712757 -10.710034 -30.71548 105.92824 64.50272
1997 53.8 75.18500615087264 8 -21.38501 -11.382285 -31.38773 106.57274 63.80272
1998 52.3 76.59469871504923 9 -24.2947 -14.291976 -34.29742 110.89212 62.30272
1999 47.2 73.84499577210156 10 -26.644995 -16.642271 -36.647717 110.49271 57.20272
2000 41.6 68.03738237069064 11 -26.437384 -16.43466 -36.440105 104.47749 51.60272
end
tempname treat contr loss err
mkmat cigsale3 if rel < 0, mat(`treat')
mkmat cf if rel < 0, mat(`contr')
mat `loss' = (`treat' - `contr')' * (`treat' - `contr')
mat `loss' = `loss' / rowsof(`treat')
cls
mat l `loss'
qui {
mata
X = round(sqrt(st_matrix("`loss'")),.01)
st_matrix("`loss'", lossround)
end
}
mat rowname `loss' = "RMSPE"
cls
sca `err' = `loss'[1,1]
di `err'
qui: su diff_ if relative >= 0, mean
/* This is the ATT for a single intervention. The
average of the difference after the intervention. */
loc ATT: disp %9.4g `r(mean)'
loc cf_color 237 41 57
loc tr_color black
tw ///
(line cig cf year, lcol("`tr_color'" red) lpat(solid dash)) /// Real Outcomes
(rline cf_lb cf_ub year, lcolor(green) lwidth(medthick) lpattern(solid)), /// Potential Outcomes
xli(1989, lcol(blue) lpat(dash) lwidth(thick)) ///
legend(order(1 "Real California" 2 "Synthetic California" 3 "Upper/Lower Bound") ///
color(black) fcolor(white) region(fcolor(white)) position(7) rows(3) ring(0)) ///
yti("Cigarette Smoking Per Capita") ///
ylab(, noticks) xlab(, noticks) ///
xsize(4) ysize(4) ///
note("RMSE = `err', ATT: `ATT'", position(6)) // "Chernozhukov, Zhu and Wuthrich's T: `czw_t'"
Code:
di `err'

Comment