*Replicate of plot in http://andrewgelman.com/2016/03/07/smiley-faces-were-never-seen. DATASET CLOSE ALL. OUTPUT CLOSE ALL. *Simulating a set of data. SET SEED 10. INPUT PROGRAM. LOOP #i = 1 TO 22. COMPUTE Year = (#i-1)*5 + 1905. COMPUTE Ord = #i. END CASE. END LOOP. END FILE. END INPUT PROGRAM. DATASET NAME Smiley. DO IF Year <= 1955. COMPUTE M_M = Ord + RV.NORMAL(0,1). ELSE. COMPUTE M_M = 9.5 + RV.NORMAL(0,1). END IF. COMPUTE W_M = M_M + 1 + RV.NORMAL(0,0.2). COMPUTE SE = M_M*0.3 + 1 + RV.NORMAL(0,0.3). FORMATS Year (F4.0) M_M W_M SE Ord (F2.0). *Replicating the original plot. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=Year M_M W_M SE /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: Year=col(source(s), name("Year"), unit.category()) DATA: M_M=col(source(s), name("M_M")) DATA: W_M=col(source(s), name("W_M")) DATA: SE=col(source(s), name("SE")) TRANS: M_L=eval(M_M-SE) TRANS: M_H=eval(M_M+SE) TRANS: F_L=eval(W_M-SE) TRANS: F_H=eval(W_M+SE) GUIDE: axis(dim(1), label("Year")) GUIDE: axis(dim(2), label("Simulated Data")) ELEMENT: line(position(Year*W_M), color(color.blue)) ELEMENT: interval(position(region.spread.range(Year*(F_L+F_H))), shape(shape.ibeam), color(color.blue)) ELEMENT: line(position(Year*M_M), color(color.green)) ELEMENT: interval(position(region.spread.range(Year*(M_L+M_H))), shape(shape.ibeam), color(color.green)) END GPL. *Use semi-transparent areas instead of error bars. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=Year M_M W_M SE /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: Year=col(source(s), name("Year"), unit.category()) DATA: M_M=col(source(s), name("M_M")) DATA: W_M=col(source(s), name("W_M")) DATA: SE=col(source(s), name("SE")) TRANS: M_L=eval(M_M-SE) TRANS: M_H=eval(M_M+SE) TRANS: F_L=eval(W_M-SE) TRANS: F_H=eval(W_M+SE) GUIDE: axis(dim(1), label("Year")) GUIDE: axis(dim(2), label("Simulated Data")) ELEMENT: line(position(Year*W_M), color(color.blue)) ELEMENT: area.difference(position(region.spread.range(Year*(F_L+F_H))), color.interior(color.blue), transparency.interior(transparency."0.6")) ELEMENT: line(position(Year*M_M), color(color.green)) ELEMENT: area.difference(position(region.spread.range(Year*(M_L+M_H))), color.interior(color.green), transparency.interior(transparency."0.6")) END GPL. *Do small multiples - reshape wide to long. VARSTOCASES /MAKE MeanSmi FROM W_M M_M /INDEX Gender. VALUE LABELS Gender 1 'Female' 2 'Male'. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=Year MeanSmi SE Gender /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: Year=col(source(s), name("Year"), unit.category()) DATA: Gender=col(source(s), name("Gender"), unit.category()) DATA: MeanSmi=col(source(s), name("MeanSmi")) DATA: SE=col(source(s), name("SE")) TRANS: M_L=eval(MeanSmi-SE) TRANS: M_H=eval(MeanSmi+SE) GUIDE: axis(dim(1), label("Year")) GUIDE: axis(dim(2), label("Simulated Data")) GUIDE: axis(dim(3), opposite()) GUIDE: legend(aesthetic(aesthetic.color), null()) ELEMENT: line(position(Year*MeanSmi*Gender), color(Gender)) ELEMENT: area.difference(position(region.spread.range(Year*(M_L+M_H)*Gender)), color.interior(Gender), transparency.interior(transparency."0.6")) END GPL. *Dodge the areas. TEMPORARY. SELECT IF RANGE(Year,1940,1960). GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=Ord MeanSmi Gender SE /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: Ord=col(source(s), name("Ord"), unit.category()) DATA: MeanSmi=col(source(s), name("MeanSmi")) DATA: Gender=col(source(s), name("Gender"), unit.category()) DATA: SE=col(source(s), name("SE")) TRANS: M_L=eval(MeanSmi-SE) TRANS: M_H=eval(MeanSmi+SE) COORD: rect(dim(1,2), cluster(3,0)) GUIDE: axis(dim(3), label("Category")) GUIDE: axis(dim(2), label("Simulated Data")) GUIDE: legend(aesthetic(aesthetic.color.interior), label("Gender")) ELEMENT: edge(position(region.spread.range(Gender*(M_L+M_H)*Ord)),color.interior(Gender)) ELEMENT: point(position(Gender*MeanSmi*Ord), color.interior(Gender), shape(Gender), size(size."10")) END GPL. EXECUTE. OUTPUT EXPORT /PNG IMAGEROOT="C:\Users\andrew.wheeler\Dropbox\Documents\BLOG\ErrorGraphs\ErrorGraphs.png".