How to creating a Confidence Ellipses in a sccatterplot using matplotlib?
The following code works until creating scatter plot. Then, does anyone familiar with putting Confidence Ellipses over the scatter plot?
import numpy as np import matplotlib.pyplot as plt x = [5,7,11,15,16,17,18] y = [8, 5, 8, 9, 17, 18, 25] plt.scatter(x,y) plt.show()
Following is the reference for Confidence Ellipses from SAS.
http://support.sas.com/documentation/cdl/en/grstatproc/62603/HTML/default/viewer.htm#a003160800.htm
The code in sas is like this:
proc sgscatter data=sashelp.iris(where=(species="Versicolor")); title "Versicolor Length and Width"; compare y=(sepalwidth petalwidth) x=(sepallength petallength) / reg ellipse=(type=mean) spacing=4; run;
To create a 95% confidence interval, we instead place . 95 in cell H9 and the formula =CHISQ. INV(H9,2) in cell H8 (resulting in a chi-square value of 5.99).
A 95% confidence ellipse for this mean is really an algorithm with the following property: if you were to replicate your sampling from the underlying distribution many times and each time calculate a confidence ellipse, then 95% of the ellipses so constructed would contain the underlying mean.
Download the “Install Matplotlib (for Mac)” file from my web site, and double-click it to run it. Test your installation. Start IDLE, type “import matplotlib”, and confirm that this command completes without an error.
The following code draws a one, two, and three standard deviation sized ellipses:
x = [5,7,11,15,16,17,18] y = [8, 5, 8, 9, 17, 18, 25] cov = np.cov(x, y) lambda_, v = np.linalg.eig(cov) lambda_ = np.sqrt(lambda_) from matplotlib.patches import Ellipse import matplotlib.pyplot as plt ax = plt.subplot(111, aspect='equal') for j in xrange(1, 4): ell = Ellipse(xy=(np.mean(x), np.mean(y)), width=lambda_[0]*j*2, height=lambda_[1]*j*2, angle=np.rad2deg(np.arccos(v[0, 0]))) ell.set_facecolor('none') ax.add_artist(ell) plt.scatter(x, y) plt.show()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With