松鼠人的记录
于是,雅克开始了他的 JavaScript 之旅,并搭建了用于保存每天记录的一套开发环境。
let journal = [];
function addEntry(events, squirrel) {
journal.push({events, squirrel});
}
请注意添加到日记中的对象看起来有点奇怪。 它不像events:events
那样声明属性,只是提供属性名称。 这是一个简写,意思一样 - 如果大括号中的属性名后面没有值,它的值来自相同名称的绑定。
那么,在每天晚上十点 — 或者有时候是下一天的早晨,从它的书架顶部爬下来之后 — 雅克记录了这一天。
addEntry(["work", "touched tree", "pizza", "running",
"television"], false);
addEntry(["work", "ice cream", "cauliflower", "lasagna",
"touched tree", "brushed teeth"], false);
addEntry(["weekend", "cycling", "break", "peanuts",
"beer"], true);
一旦他有了足够的数据点,他打算使用统计学来找出哪些事件可能与变成松鼠有关。
关联性是统计绑定之间的独立性的度量。 统计绑定与编程绑定不完全相同。 在统计学中,你通常会有一组度量,并且每个绑定都根据每个度量来测量。 绑定之间的相关性通常表示为从 -1 到 1 的值。 相关性为零意味着绑定不相关。 相关性为一表明两者完全相关 - 如果你知道一个,你也知道另一个。 负一意味着它们是完全相关的,但它们是相反的 - 当一个是真的时,另一个是假的。
为了计算两个布尔绑定之间的相关性度量,我们可以使用 phi 系数(ϕ
)。 这是一个公式,输入为一个频率表格,包含观测绑定的不同组合的次数。 公式的输出是 -1 和 1 之间的数字。
我们可以将吃比萨的事件放在这样的频率表中,每个数字表示我们的度量中的组合的出现次数。
如果我们将那个表格称为n
,我们可以用下列公式自己算ϕ
:
(如果你现在把这本书放下,专注于十年级数学课的可怕的再现,坚持住!我不打算用无休止的神秘符号折磨你 - 现在只有这一个公式。我们所做的就是把它变成 JavaScript。)
符号n01
表明, 第一个绑定(松鼠)为假(0)时,第二个绑定(披萨)为真(1)。 在披萨表中,n01
是 9。
值n1
表示所有度量之和,其中第一个绑定为true
,在示例表中为 5。 同样,n0
表示所有度量之和,其中第二个绑定为假。
因此,我们以比萨表为例,除法线上方的部分(被除数)为1×76–9×4=40
,而除法线下面的部分(除数)则是10×80×5×85
的平方根,也就是√340000
。计算结果为ϕ≈0.069
,这个结果很小,因此吃比萨对是否变身成松鼠显然没有太大影响。