(47) Linear regression using different norms and types

In this example we show how the module gmtregress is used to fit a multitude of different linear regression models to a data set with extreme outliers that can also act as leverage points. This data set forms the basis for the main sequence in a Hertzsprung-Russell diagram of the star cluster CYG OB1, which includes four red giants that are outlying with respect to the main trend.

#!/usr/bin/env bash
#               GMT EXAMPLE 47
# Purpose:      Illustrate use of gmtregress with different norms and types
# GMT modules:  gmtregress, plot, text, subplot
# Unix progs:	rm

# Because all panels are almost identical we make a bash function that plots
# one panel.  It takes a few options that differ between panels.

function plot_one { # First 3-4 args are: -E -N -c [-Barg]
	gmt plot -B+ghoneydew${4} data.txt -Sc0.1c -Gblue $3
	gmt plot giants.txt -Sc0.1c -Gred   -N
	gmt plot giants.txt -Sc0.25c  -W0.25p -N
	gmt regress data.txt -Fxm $1 $2 -T2.85/5.25/0.1 | gmt plot -W2p

gmt begin ex47
	file=$(gmt which -G @hertzsprung-russell.txt)
	# Allow outliers (commented out by #) to be included in the analysis:
	sed -e s/#//g $file > data.txt
	# Identify the red giants (outliers)
	grep '#' $file | sed -e s/#//g > giants.txt
	gmt subplot begin 4x3 -M0p -Fs5c -R2.85/5.25/3.9/6.3 -JX-5c/5c -Srl+l"Log light intensity" -Scb+l"Log temperature"+tc -Bwesn -Bafg
	# L1 regressions
	plot_one -Ey -N1 -c0,0 +tL@-1@-
	plot_one -Ex -N1 -c1,0
	plot_one -Eo -N1 -c2,0
	plot_one -Er -N1 -c3,0
	#L2 regressions
	plot_one -Ey -N2 -c0,1 +tL@-2@-
	plot_one -Ex -N2 -c1,1
	plot_one -Eo -N2 -c2,1
	plot_one -Er -N2 -c3,1
	#LMS regressions - also add labels on right side
	plot_one -Ey -Nr -c0,2 +tLMS
	gmt text -F+cRM+jTC+a90+t"Y ON X" -N -Dj15p
	plot_one -Ex -Nr -c1,2
	gmt text -F+cRM+jTC+a90+t"X ON Y" -N -Dj15p
	plot_one -Eo -Nr -c2,2
	gmt text -F+cRM+jTC+a90+tORTHOGONAL -N -Dj15p
	plot_one -Er -Nr -c3,2
	gmt text -F+cRM+jTC+a90+t"REDUCED MAJOR AXIS" -N -Dj15p
	gmt subplot end
gmt end show
rm -f data.txt giants.txt hertzsprung-russell.txt

Robust and not-so-robust regressions.