// Line parameter prior assume intercept = normal(0,7); assume slope = normal(0,4); // Hypothesized linear relationship assume line = proc(x) { slope * x + intercept }; // Prior on the outlier rate assume outlier_prob = uniform_continuous(0.01, 0.3); // Per-point outlier check assume is_outlier = mem(proc(i) { flip(outlier_prob) }); // Outlier model: Broad Gaussian independent of the line assume obs_outlier = proc(x) { normal(0,20) }; // Prior for unknown noise level assume noise = gamma(1, 1); // Inlier model: Linear relationship plus Gaussian noise of unknown // but fixed magnitude. assume obs_inlier = proc(x) { normal(line(x), noise) }; // Full data model: Either outlier or inlier. assume obs = proc(i, x) { if (is_outlier(i)) { obs_outlier(x) } else { obs_inlier(x) } };