{
 "about": "Modeler lesson M14 (m14-did-it-work), wave W5, 2026-11-06. Every dataset of this lesson is SIMULATED: two seeded panels generated by assets/learn/m14-did-it-work.js (the page) and by the lab notebook's port (scripts/build_learn_m14_notebook.py), with known true effects, so the reader can see when an estimator recovers the truth and when it does not. No household, utility, region or programme in these panels is real; the coefficients below are illustrative teaching values, not estimates of anything. Real programme evidence on the page comes only from the cited DOE report (doe-cbs-2016). Every number the page states is checked by _tests/learn/test_m14-did-it-work.js, which writes the reference block below (--write); the notebook asserts it.",
 "built": "2026-11-06",
 "generator": "mulberry32 (LX.mulberry32), one stream per panel in a fixed order of draws; an approximately normal draw is the sum of 12 uniform draws minus 6 (Irwin-Hall: mean 0, standard deviation 1), arithmetic only, so the Python port gives the same numbers to the last digit.",
 "tou": {
  "label": "Simulated panel 1: a time-of-use tariff and household evening peaks",
  "seed": 78,
  "seedNote": "Seed 78 was picked among seeds 1 to 400 for a calm pre-period in the default draw (a teaching choice, said on the page); the notebook redraws 200 panels to show the spread.",
  "n": 400,
  "months": 24,
  "start": 12,
  "peakWindow": [
   16,
   21
  ],
  "outcome": "a home's evening peak: its average daily highest hourly demand between 16:00 and 21:00 in a month, kW",
  "acShare": 0.6,
  "size": [
   1,
   3
  ],
  "sizeUnit": "thousand square feet",
  "select": {
   "noise": 0.6,
   "cut": 1,
   "size": -0.6,
   "note": "Opt-in: a home signs up when engagement - 0.6 x (size - 2) + 0.6 x noise > 1. Engaged owners and smaller homes sign up more; air conditioning plays no part."
  },
  "effect": {
   "base": 0.2,
   "engaged": 0.08,
   "note": "Each home's true effect: -(0.20 + 0.08 x engagement) kW, never above zero; it applies from month 13 in homes that signed up."
  },
  "level": {
   "base": 2.5,
   "ac": 0.6,
   "size": 0.35,
   "engaged": -0.25,
   "note": "A home's own level: 2.5 + 0.6 x air conditioning + 0.35 x (size - 2) - 0.25 x engagement, kW. The 2.5 keeps every home-month's evening peak above zero in every panel on the page (lowest about 0.27 kW, with the thermostat offer); a constant moves every home alike, so no estimate changes."
  },
  "season": [
   0.35,
   0.3,
   0.15,
   0.05,
   0.1,
   0.25,
   0.35,
   0.35,
   0.2,
   0.05,
   0.15,
   0.3
  ],
  "acSeason": [
   0,
   0,
   0,
   0.1,
   0.4,
   0.9,
   1.3,
   1.3,
   0.8,
   0.2,
   0,
   0
  ],
  "cooling": [
   1,
   0.75
  ],
  "coolingNote": "The second year's summer is cooler: air-conditioning load is 75% of the first year's in every home.",
  "noise": 0.3,
  "threats": {
   "trend": -0.012,
   "anticipateMonths": 3,
   "anticipateShare": 0.6,
   "spill": -0.08,
   "bundle": -0.15,
   "bundleCut": 0.5
  }
 },
 "threats": [
  {
   "key": "trend",
   "label": "Self-selection on trends",
   "short": "Already cutting",
   "kind": "selection",
   "text": "Homes that signed up were already cutting their peak by 0.012 kW a month (new appliances), before and after the start."
  },
  {
   "key": "anticipate",
   "label": "Anticipation",
   "short": "Early cuts",
   "kind": "anticipation",
   "text": "After the sign-up letter, homes on the new tariff made 60% of their cut in the three months before it started."
  },
  {
   "key": "spill",
   "label": "Spillover",
   "short": "Neighbours copy",
   "kind": "spillover",
   "text": "Flat-tariff homes heard about evening peaks too and cut 0.08 kW from month 13."
  },
  {
   "key": "bundle",
   "label": "Confounding (a second change)",
   "short": "Thermostat offer",
   "kind": "confounding",
   "text": "From month 13 the most engaged TOU homes (engagement above 0.5) also got a smart thermostat, worth a further 0.15 kW."
  }
 ],
 "regions": {
  "label": "Simulated panel 2: a policy and solar investment across regions",
  "seed": 233,
  "seedNote": "Seed 233 was picked among seeds 1 to 300 for 10 to 14 adopters and a calm pre-period (a teaching choice).",
  "n": 30,
  "years": 10,
  "first": 2016,
  "start": 5,
  "outcome": "new solar capacity built in a region in a year, MW",
  "level": 30,
  "levelSun": 8,
  "select": {
   "noise": 0.7,
   "cut": 0.3,
   "note": "A region adopts the policy in 2021 when sunshine + 0.7 x noise > 0.3: sunnier regions adopt more."
  },
  "growth": 3,
  "noise": 5,
  "effect": 10,
  "boom": 2.5,
  "border": -4,
  "threats": [
   {
    "key": "boom",
    "label": "The policy followed a boom",
    "text": "Adopting regions were already growing 2.5 MW a year faster than the others, before and after 2021."
   },
   {
    "key": "border",
    "label": "Projects moved across the border",
    "text": "From 2021 each region without the policy lost 4 MW a year of projects to the adopting regions. Those projects are part of the adopters' +10 MW, so some of that gain moved rather than grew."
   }
  ]
 },
 "classify": [
  {
   "id": "c1",
   "text": "Households with rooftop solar were the first to choose the new tariff.",
   "answer": "selection"
  },
  {
   "id": "c2",
   "text": "A state rebate for heat pumps began in the same month as the tariff, mostly in the same towns.",
   "answer": "confounding"
  },
  {
   "id": "c3",
   "text": "The control town's residents read about the tariff in the local news and cut their evening use too.",
   "answer": "spillover"
  },
  {
   "id": "c4",
   "text": "Customers were told in March that the tariff would start in June, and some changed their habits in April.",
   "answer": "anticipation"
  }
 ],
 "kinds": {
  "selection": "Selection",
  "confounding": "Confounding",
  "spillover": "Spillover",
  "anticipation": "Anticipation"
 },
 "doe": {
  "title": "Final Report on Customer Acceptance, Retention, and Response to Time-Based Rates from the Consumer Behavior Studies",
  "publisher": "U.S. Department of Energy, Smart Grid Investment Grant Program",
  "date": "November 2016",
  "url": "https://www.energy.gov/sites/prod/files/2017/01/f34/CBS_Final_Program_Impact_Report_20161107.pdf",
  "accessed": "2026-11-06",
  "facts": {
   "utilities": 10,
   "studies": 11,
   "page": "iv-v",
   "optOutEnroll": 92,
   "optInEnroll": 15,
   "optOutTOU": 6,
   "optInTOU": 12,
   "optOutRetain": 90,
   "optInRetain": 87,
   "pageOpt": "vi",
   "touLow": 6,
   "touHigh": 18,
   "pageTOU": "viii (Table ES-2)"
  }
 },
 "reference": {
  "about": "Written by node _tests/learn/test_m14-did-it-work.js --write; recomputed by the same test on every run. kW for panel 1, MW a year for panel 2; [estimate, standard error].",
  "tou": {
   "nOn": 92,
   "nOff": 308,
   "att": -0.2945066134,
   "ate": -0.203400457,
   "naive": [
    -0.8511209294,
    0.06299758077
   ],
   "regSize": -0.7286764569,
   "regBoth": -0.7011616681,
   "beforeAfter": [
    -0.3631278084,
    0.01350610586
   ],
   "did": [
    -0.2991988173,
    0.01547350492
   ],
   "cells": [
    2.884321859,
    2.52119405,
    3.436243971,
    3.37231498
   ],
   "eventStudy": [
    -0.00332081569,
    -0.02199233072,
    0.02505087276,
    0.003363714017,
    0.01568280781,
    0.007844969301,
    0.03689500811,
    -0.01184725793,
    0.04018726631,
    -0.006000042592,
    -0.003830820307,
    0,
    -0.2342731506,
    -0.2965754359,
    -0.3353519417,
    -0.2854538382,
    -0.2803383819,
    -0.2818048363,
    -0.3274621325,
    -0.2379130662,
    -0.3513118847,
    -0.2968765496,
    -0.2872562304,
    -0.2937349879
   ],
   "firstY": 3.516733667,
   "lastY": 2.776870184,
   "threats": {
    "trend": [
     -0.4431988173,
     0.01547350492
    ],
    "anticipate": [
     -0.2550228252,
     0.01511037746
    ],
    "spill": [
     -0.2191988173,
     0.01547350492
    ],
    "bundle": [
     -0.4198509912,
     0.01830169019
    ]
   }
  },
  "regions": {
   "nOn": 14,
   "nOff": 16,
   "did": [
    9.964600022,
    1.161631219
   ],
   "naive": [
    15.69745888,
    2.258517846
   ],
   "eventStudy": [
    -0.9817970268,
    1.339325424,
    -0.687234329,
    0.8853172105,
    0,
    9.254458253,
    9.112074504,
    9.873998246,
    11.23643823,
    10.90164216
   ],
   "threats": {
    "boom": [
     22.46460002,
     1.161631219
    ],
    "border": [
     13.96460002,
     1.161631219
    ]
   }
  }
 }
}
