松鼠人的记录

于是,雅克开始了他的 JavaScript 之旅,并搭建了用于保存每天记录的一套开发环境。

  1. let journal = [];
  2. function addEntry(events, squirrel) {
  3. journal.push({events, squirrel});
  4. }

请注意添加到日记中的对象看起来有点奇怪。 它不像events:events那样声明属性,只是提供属性名称。 这是一个简写,意思一样 - 如果大括号中的属性名后面没有值,它的值来自相同名称的绑定。

那么,在每天晚上十点 — 或者有时候是下一天的早晨,从它的书架顶部爬下来之后 — 雅克记录了这一天。

  1. addEntry(["work", "touched tree", "pizza", "running",
  2. "television"], false);
  3. addEntry(["work", "ice cream", "cauliflower", "lasagna",
  4. "touched tree", "brushed teeth"], false);
  5. addEntry(["weekend", "cycling", "break", "peanuts",
  6. "beer"], true);

一旦他有了足够的数据点,他打算使用统计学来找出哪些事件可能与变成松鼠有关。

关联性是统计绑定之间的独立性的度量。 统计绑定与编程绑定不完全相同。 在统计学中,你通常会有一组度量,并且每个绑定都根据每个度量来测量。 绑定之间的相关性通常表示为从 -1 到 1 的值。 相关性为零意味着绑定不相关。 相关性为一表明两者完全相关 - 如果你知道一个,你也知道另一个。 负一意味着它们是完全相关的,但它们是相反的 - 当一个是真的时,另一个是假的。

为了计算两个布尔绑定之间的相关性度量,我们可以使用 phi 系数(ϕ)。 这是一个公式,输入为一个频率表格,包含观测绑定的不同组合的次数。 公式的输出是 -1 和 1 之间的数字。

我们可以将吃比萨的事件放在这样的频率表中,每个数字表示我们的度量中的组合的出现次数。

松鼠人的记录 - 图1

如果我们将那个表格称为n,我们可以用下列公式自己算ϕ

松鼠人的记录 - 图2

(如果你现在把这本书放下,专注于十年级数学课的可怕的再现,坚持住!我不打算用无休止的神秘符号折磨你 - 现在只有这一个公式。我们所做的就是把它变成 JavaScript。)

符号n01表明, 第一个绑定(松鼠)为假(0)时,第二个绑定(披萨)为真(1)。 在披萨表中,n01是 9。

n1表示所有度量之和,其中第一个绑定为true,在示例表中为 5。 同样,n0表示所有度量之和,其中第二个绑定为假。

因此,我们以比萨表为例,除法线上方的部分(被除数)为1×76–9×4=40,而除法线下面的部分(除数)则是10×80×5×85的平方根,也就是√340000。计算结果为ϕ≈0.069,这个结果很小,因此吃比萨对是否变身成松鼠显然没有太大影响。