Public
Edited
Sep 15, 2023
Insert cell
Insert cell
default_parameters = ({
p1: 0.48, // The proportion of voters who lke Candidate 1
p2: 0.45, // The proportion of voters who lke Candidate 2
n: 1000, // The sample size
N: 2000 // Number of times we'll simulate the process.
})
Insert cell
Insert cell
function choose(parameters) {
let p = Math.random();
if (p < parameters.p1) {
return 1;
} else if (p < parameters.p1 + parameters.p2) {
return 2;
} else {
return null;
}
}
Insert cell
Insert cell
choice = choose(default_parameters)
Insert cell
Insert cell
d3.range(20).map(() => choose(default_parameters))
Insert cell
Insert cell
function simulate(parameters) {
let d = d3.range(parameters.n).map(() => choose(parameters));
let pp1 = d.filter((x) => x == 1).length / parameters.n;
let pp2 = d.filter((x) => x == 2).length / parameters.n;

return { pp1, pp2, diff: pp1 - pp2 };
}
Insert cell
Insert cell
one_simulation = simulate(default_parameters)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Type JavaScript, then Shift-Enter. Ctrl-space for more options. Arrow ↑/↓ to switch modes.

Insert cell
Insert cell
Insert cell
617.0,0.5130942,0.3512664
Insert cell
Insert cell
Insert cell
function pdf(parameters) {
let m0 = parameters.p1 - parameters.p2;
let s = Math.sqrt((parameters.p1 + parameters.p2 - m0 ** 2) / parameters.n);
let pdf = (x) =>
Math.exp(-((x - m0) ** 2 / (2 * s ** 2))) / (Math.sqrt(2 * Math.PI) * s);

pdf.m0 = m0;
pdf.s = s;

return pdf;
}
Insert cell
function integrate(ff, a, b) {
return adaptiveSimpson(ff, a, b, {
tolerance: 1e-11,
maxDepth: 8,
minDepth: 7
});
}
Insert cell
import { adaptiveSimpson } from "@rreusser/integration@3056"
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more