#Simulate Residual patterns set.seed(10101) pdf('ResidualPatternsNew.pdf',height=11,width=8) par(mfrow=c(2,1)) n<-1000 x<-runif(1000,0,100) beta0<-30 beta1<-1.5 y1<-beta0+beta1*x+rnorm(n)*10 plot(x,y1,pch=3,cex=0.6);title('Original data') summary(lm(y1~x)) abline(coef(lm(y1~x)),col='red',lwd=2) e1<-residuals(lm(y1~x)) plot(x,e1,pch=19,cex=0.6,ylab='residuals') title('Residuals show no pattern vs x \n Straight line assumption correct') abline(h=0,lty=2) y2<-beta0+beta1*x+0.02*x^2+rnorm(n)*10 plot(x,y2,pch=3,cex=0.6);title('Original data') summary(lm(y2~x)) abline(coef(lm(y2~x)),col='red',lwd=2) e2<-residuals(lm(y2~x)) plot(x,e2,pch=19,cex=0.6,ylab='residuals') title('Residuals show parabolic pattern vs x \n Incorrect straight line assumption') abline(h=0,lty=2) y3<-beta0+beta1*x+0.01*exp(x/11)+rnorm(n)*10 plot(x,y3,pch=3,cex=0.6);title('Original data') summary(lm(y3~x)) abline(coef(lm(y3~x)),col='red',lwd=2) e3<-residuals(lm(y3~x)) plot(x,e3,pch=19,cex=0.6,ylab='residuals') title('Residuals show curvilinear pattern vs x \n Incorrect straight line assumption') abline(h=0,lty=2) y4<-beta0+beta1*x+rnorm(n)*(x*(1000-x)/1000+10) plot(x,y4,pch=3,cex=0.6);title('Original data') summary(lm(y4~x)) abline(coef(lm(y4~x)),col='red',lwd=2) e4<-residuals(lm(y4~x)) plot(x,e4,pch=19,cex=0.6,ylab='residuals') title('Residuals show parabolic pattern vs x \n Incorrect constant variance assumption') abline(h=0,lty=2) y5<-beta0+beta1*x+rnorm(n)*(x*(100-x)/100+10) plot(x,y5,pch=3,cex=0.6);title('Original data') summary(lm(y5~x)) abline(coef(lm(y5~x)),col='red',lwd=2) e5<-residuals(lm(y5~x)) plot(x,e5,pch=19,cex=0.6,ylab='residuals') title('Residuals show non-constant variance pattern vs x \n Incorrect constant variance assumption') x<-rnorm(n,50,100/sqrt(12)) beta0<-30 beta1<-1.5 y6<-beta0+beta1*x+rnorm(n)*10 plot(x,y6,pch=3,cex=0.6,xlim=range(0,100));title('Original data') summary(lm(y6~x)) abline(coef(lm(y6~x)),col='red',lwd=2) e6<-residuals(lm(y6~x)) plot(x,e6,pch=19,cex=0.6,ylab='residuals') title('Residuals show no pattern vs x \n Straight line assumption correct') abline(h=0,lty=2) n<-50000 x<-runif(n,0,100) xlabs<-paste(10*c(0:9),"-",10+10*c(0:9),sep='') class.7<-cut(x,breaks=seq(0,100,by=10),labels=FALSE) y7<-beta0+beta1*x+rnorm(n)*(x*(100-x)/100+10) e7<-residuals(lm(y7~x)) plot(x,e7,pch=19,cex=0.6,ylab='residuals') title('Larger sample size (50000) \n Incorrect constant variance assumption') boxplot(e7~class.7,col='gray',names=xlabs) title('Residuals show non-constant variance pattern in boxplot') x<-rnorm(n,50,100/sqrt(12)) class.8<-cut(x,breaks=seq(0,100,by=10),labels=FALSE) beta0<-30 beta1<-1.5 y8<-beta0+beta1*x+rnorm(n)*10 e8<-residuals(lm(y8~x)) plot(x,e8,pch=19,cex=0.6,ylab='residuals') title('Larger sample size (50000) \n Straight line assumption correct') abline(h=0,lty=2) boxplot(e8~class.8,col='gray',names=xlabs) title('Residuals show constant variance pattern in boxplot') dev.off()