Public
Edited
May 18, 2023
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
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
pcaTable = {
const { data: feature1 } = predict,
{ n } = data;

const table = [];
for (let i = 0; i < n; ++i) {
table.push({
f1: feature1[i][0],
f2: feature1[i][1],
f3: feature1[i][2],
signal: i
});
}

return table;
}
Insert cell
predict = pca.predict(distanceMatrix)
Insert cell
pca = new PCA(distanceMatrix, { center: true, scale: true })
Insert cell
PCA = (await require("https://bundle.run/ml-pca@4.0.2")).PCA
Insert cell
Insert cell
distanceTable = {
const mat = distanceMatrix,
{ T, n } = data,
distanceTable = [];

for (let i = 0; i < n; ++i) {
for (let j = 0; j < n; ++j) {
distanceTable.push({ i, j, v: mat[i][j] });
}
}

return distanceTable;
}
Insert cell
distanceMatrix = {
const matrix = matrixBrownianBridge,
{ T, n } = data,
distance = [];

for (let i = 0; i < n; ++i) {
const array = [...new Array(n).fill(0)];
for (let j = i; j < n; ++j) {
for (let t = 0; t < T; ++t) {
array[j] += (matrix[t][i] - matrix[t][j]) ** 2;
}
}
distance.push(array);
}

for (let i = 0; i < n; ++i) {
for (let j = i; j < n; ++j) {
distance[i][j] = Math.sqrt(distance[i][j]) / T;
distance[j][i] = distance[i][j];
}
}

return distance;
}
Insert cell
Insert cell
matrixBrownianBridge = table2matrix("brownianBridge")
Insert cell
table2matrix = (column = "brownianBridge") => {
const { T, n } = data;

const matrix = [];
for (let t = 0; t < T; ++t) {
matrix.push([...new Array(n).fill(0)]);
}

data.map((d) => {
matrix[d.time][d.signal] = d[column];
});

return matrix;
}
Insert cell
data = mkData(dataSetup.length, dataSetup.signals)
Insert cell
rndEngine = d3.randomNormal()
Insert cell
rndEngine1 = d3.randomBernoulli(0.5) //d3.randomUniform()
Insert cell
rnd = () => {
// return rndEngine1() * 2 - 1;
return rndEngine();
}
Insert cell
/**
* Make data for T length and n signals.
**/
mkData = (T, n) => {
const data = [];

var x,
xT = [],
b,
invT = 1.0 / T;

for (let i = 0; i < n; ++i) {
x = 0;

for (let t = 0; t < T; ++t) {
data.push({
signal: i,
time: t,
brownian: x,
brownianAccumulate: x + (i > 0 ? d3.sum(xT.slice(0, i)) : 0)
});

if (t === T - 1) {
xT.push(x);
} else {
x += rnd();
}
}
}

data.map((d) => {
b = d.brownian - (d.time + 1) * invT * xT[d.signal];
Object.assign(d, { brownianBridge: b });
});

Object.assign(data, { T, n });

return data;
}
Insert cell
d3 = require("d3")
Insert cell
import { toc } from "@nebrius/indented-toc"
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