13.3 The Chi-square Plot

# Fig. 13.4.: Garrett outlier detection for Mg, Sr in Moss
library(StatDA)
data(moss)
Mg=log10(moss[,"Mg"])
Sr=log10(moss[,"Sr"])
x=cbind(Mg,Sr)

pdf("fig-13-4.pdf",width=8,height=8)
par(mfcol=c(2,2),mar=c(4,4,2,2))


covr <- covMcd(x)
dist <- mahalanobis(x, center = covr$center, cov = covr$cov)
s <- sort(dist, index = TRUE)
q <- (0.5:length(dist))/length(dist)
qchi <- qchisq(q, df = ncol(x))
plot(s$x, qchi, xlab = "Ordered squared robust distance",
ylab = "Quantiles of Chi-square distribution",type="n",cex.lab=1.2)
outl=(s$x>s$x[s$ix==247])
points(s$x[!outl],qchi[!outl],pch=21,cex=0.2)
points(s$x[outl],qchi[outl],pch=3,cex=0.7)
abline(v=s$x[s$ix==247],lty=2)


i=sum(!outl)
q <- (0.5:i)/i
qchi <- qchisq(q, df = ncol(x))

plot(s$x[!outl], qchi, xlab = "Ordered squared robust distance",
ylab = "Quantiles of Chi-square distribution",pch=21,cex=0.2,cex.lab=1.2)


plot(Mg,Sr,xlab="Mg in Moss [mg/kg]",ylab="Sr in Moss [mg/kg]",
cex.lab=1.2, cex=0.7, pch=3, xaxt="n", yaxt="n",
ylim=c(0,max(Sr)),type="n")
axis(1,at=log10(alog<-sort(c((10^(-50:50))%*%t(c(2,5,10))))),labels=alog)
axis(2,at=log10(alog<-sort(c((10^(-50:50))%*%t(c(2,5,10))))),labels=alog)

points(Mg[s$ix[outl]], Sr[s$ix[outl]],pch=3,cex=0.7)
points(Mg[-s$ix[outl]], Sr[-s$ix[outl]],pch=21,cex=0.2)



par(mar=c(2,4,2,2))

X=moss[,"XCOO"]
Y=moss[,"YCOO"]
data(kola.background)
# generate plot with background
plot(X,Y,frame.plot=FALSE,xaxt="n",yaxt="n",xlab="",ylab="",type="n")
plotbg(map.col=c("gray","gray","gray","gray"),add.plot=T)

legend("topright",pch=c(3,21),pt.cex=c(0.7,0.2), legend=c("outliers",
"non-outliers"), cex=1)

points(X[s$ix[outl]],Y[s$ix[outl]],pch=3,cex=0.7)
points(X[-s$ix[outl]],Y[-s$ix[outl]],pch=21,cex=0.2)

# scalebar
scalebar(761309,7373050,861309,7363050,shifttext=-0.5,shiftkm=37e3,sizetext=0.8)
# North arrow
Northarrow(362602,7818750,362602,7878750,362602,7838750,Alength=0.15,Aangle=15,Alwd=1.3,Tcex=1.6)

dev.off()