heteroscedastic errors. """ # Author: Jake VanderPlas <*****@*****.**> # License: BSD # The figure produced by this code is published in the textbook # "Statistics, Data Mining, and Machine Learning in Astronomy" (2013) # For more information, see http://astroML.github.com import numpy as np from matplotlib import pyplot as plt from scipy import optimize from astroML.datasets import fetch_hogg2010test #------------------------------------------------------------ # Get data: this includes outliers data = fetch_hogg2010test() x = data['x'] y = data['y'] dy = data['sigma_y'] # Define the standard squared-loss function def squared_loss(m, b, x, y, dy): y_fit = m * x + b return np.sum(((y - y_fit) / dy) ** 2, -1) # Define the log-likelihood via the Huber loss function def huber_loss(m, b, x, y, dy, c=2): y_fit = m * x + b t = abs((y - y_fit) / dy)
import pymc #---------------------------------------------------------------------- # This function adjusts matplotlib settings for a uniform feel in the textbook. # Note that with usetex=True, fonts are rendered with LaTeX. This may # result in an error if LaTeX is not installed on your system. In that case, # you can set usetex to False. if "setup_text_plots" not in globals(): from astroML.plotting import setup_text_plots setup_text_plots(fontsize=8, usetex=True) np.random.seed(0) #------------------------------------------------------------ # Get data: this includes outliers data = fetch_hogg2010test() xi = data['x'] yi = data['y'] dyi = data['sigma_y'] #---------------------------------------------------------------------- # First model: no outlier correction # define priors on beta = (slope, intercept) @pymc.stochastic def beta_M0(value=np.array([2., 100.])): """Slope and intercept parameters for a straight line. The likelihood corresponds to the prior probability of the parameters.""" slope, intercept = value prob_intercept = 1 + 0 * intercept # uniform prior on theta = arctan(slope)