Public
Edited
Nov 16, 2024
1 fork
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
data = aq
.from(gbd)
.join(aq.from(wbi), "Code")
.join(aq.from(wbc), "Code")
.derive(
{
Name: aq.escape((d) => codeToName[d["Code"]]),
Code: (d) => d["Code"],
"Income Group": (d) => d["Income group"],
"Depressed Adults": (d) => d["Population"],
"Internet Usage Proportion": (d) => d["Proportion"]
},
{ drop: true }
)
.derive({
"Depressed Adult Internet Users": (d) =>
d["Internet Usage Proportion"] &&
d["Depressed Adults"] * d["Internet Usage Proportion"]
})
.filter((d) => !!d["Depressed Adult Internet Users"])
.objects()
Insert cell
data
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
targetCountries = data.filter(
(d) => d["Income Group"] !== "High income" && d["Name"] !== "China"
)
Insert cell
d3.sum(targetCountries, (d) => d["Depressed Adult Internet Users"])
Insert cell
Insert cell
nonPlatformisedIndividualChance = dist.dist`0.05 to 0.40`
Insert cell
Insert cell
incrementalPlatformisedIndividualChance = dist.dist`0.25 to 0.45`
Insert cell
Insert cell
scenarios = {
let scenarios = [];

for (let scenario = 0; scenario < 1000; scenario++) {
const nonplatformisedChance = nonPlatformisedIndividualChance[scenario];
const platformisedChance =
nonplatformisedChance + incrementalPlatformisedIndividualChance[scenario];

let nonplatformisedPopulation = 0;
let platformisedPopulation = 0;
for (let country = 0; country < targetCountries.length; country++) {
const population =
targetCountries[country]["Depressed Adult Internet Users"];
const random = Math.random();

if (
random <= nonplatformisedChance ||
targetCountries[country]["Name"] === "India"
) {
nonplatformisedPopulation += population;
}

if (
random <= platformisedChance ||
targetCountries[country]["Name"] === "India"
) {
platformisedPopulation += population;
}
}

scenarios.push({
"Non-Platformised Population": nonplatformisedPopulation,
"Platformised Population": platformisedPopulation,
"Excess Population": platformisedPopulation - nonplatformisedPopulation
});
}

return scenarios;
}
Insert cell
Insert cell
plot(scenarios.map((d) => d["Excess Population"]))
Insert cell
Insert cell
excessRatio = scenarios.map(
(d) =>
d["Excess Population"] /
data.find((d) => d["Name"] === "India")["Depressed Adult Internet Users"]
)
Insert cell
overallPlatformisationSuccessChance = dist.dist`0.2 to 0.8`
Insert cell
multiplier = dist.dist`1 + ${excessRatio} * ${overallPlatformisationSuccessChance}`
Insert cell
plot(multiplier)
Insert cell
Insert cell
Insert cell
dist = import("https://esm.sh/jsr/@huw/dist")
Insert cell
import { plot } from "@huw/dist-plot"
Insert cell
import { dataLatest as wbi } from "@huw/world-bank-internet"
Insert cell
import { data as wbc } from "@huw/world-bank-categories"
Insert cell
import { depressiveDisordersOver20PopulationPerCountry2021 as gbd } from "@huw/gbd"
Insert cell
import { fixCode, codeToName } from "@huw/iso-3166-1"
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