分析结果

我们需要计算数据集中发生的每种类型事件的相关性。 为此,我们首先需要寻找每种类型的事件。

  1. function journalEvents(journal) {
  2. let events = [];
  3. for (let entry of journal) {
  4. for (let event of entry.events) {
  5. if (!events.includes(event)) {
  6. events.push(event);
  7. }
  8. }
  9. }
  10. return events;
  11. }
  12. console.log(journalEvents(JOURNAL));
  13. // → ["carrot", "exercise", "weekend", "bread", …]

通过遍历所有事件,并将那些不在里面的事件添加到events数组中,该函数收集每种事件。

使用它,我们可以看到所有的相关性。

  1. for (let event of journalEvents(JOURNAL)) {
  2. console.log(event + ":", phi(tableFor(event, JOURNAL)));
  3. }
  4. // → carrot: 0.0140970969
  5. // → exercise: 0.0685994341
  6. // → weekend: 0.1371988681
  7. // → bread: -0.0757554019
  8. // → pudding: -0.0648203724
  9. // and so on...

绝大多数相关系数都趋近于 0。显然,摄入胡萝卜、面包或布丁并不会导致变身成松鼠。但是似乎在周末变身成松鼠的概率更高。让我们过滤结果,来仅仅显示大于 0.1 或小于 -0.1 的相关性。

  1. for (let event of journalEvents(JOURNAL)) {
  2. let correlation = phi(tableFor(event, JOURNAL));
  3. if (correlation > 0.1 || correlation < -0.1) {
  4. console.log(event + ":", correlation);
  5. }
  6. }
  7. // → weekend: 0.1371988681
  8. // → brushed teeth: -0.3805211953
  9. // → candy: 0.1296407447
  10. // → work: -0.1371988681
  11. // → spaghetti: 0.2425356250
  12. // → reading: 0.1106828054
  13. // → peanuts: 0.5902679812

啊哈!这里有两个因素,其相关性明显强于其他因素。 吃花生对变成松鼠的几率有强烈的积极影响,而刷牙有显着的负面影响。

这太有意思了。让我们再仔细看看这些数据。

  1. for (let entry of JOURNAL) {
  2. if (entry.events.includes("peanuts") &&
  3. !entry.events.includes("brushed teeth")) {
  4. entry.events.push("peanut teeth");
  5. }
  6. }
  7. console.log(phi(tableFor("peanut teeth", JOURNAL)));
  8. // → 1

这是一个强有力的结果。 这种现象正好发生在雅克吃花生并且没有刷牙时。 如果他只是不注意口腔卫生,他从来没有注意到他的病痛。

知道这些之后,雅克完全停止吃花生,发现他的变身消失了。

几年来,雅克过得越来越好。 但是在某个时候他失去了工作。 因为他生活在一个糟糕的国家,没有工作就意味着没有医疗服务,所以他被迫在一个马戏团就业,在那里他扮演的是不可思议的松鼠人,在每场演出前都用花生酱塞满了它的嘴。