npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@tpmjs/tools-diff-in-diff

v0.2.0

Published

Difference-in-differences estimator for causal inference

Readme

Difference-in-Differences (DiD)

Causal inference estimator for measuring treatment effects using before/after comparison with a control group.

Installation

npm install @tpmjs/tools-diff-in-diff

Usage

import { diffInDiffTool } from '@tpmjs/tools-diff-in-diff';

// Example: Evaluate impact of a policy intervention
// Treatment group: Cities that implemented the policy
// Control group: Cities that did not implement the policy
const result = await diffInDiffTool.execute({
  treatmentBefore: [100, 105, 98, 102],   // Before policy
  treatmentAfter: [120, 125, 118, 122],    // After policy
  controlBefore: [95, 100, 92, 98],        // Before (no policy)
  controlAfter: [98, 103, 95, 101],        // After (no policy)
  confidenceLevel: 0.95,
});

console.log(result);
// {
//   effect: 17.5,              // Treatment caused 17.5 unit increase
//   standardError: 2.1,
//   tStatistic: 8.33,
//   pValue: 0.0001,
//   significant: true,
//   confidenceInterval: {
//     lower: 13.2,
//     upper: 21.8,
//     level: 0.95
//   },
//   interpretation: "The treatment effect is 17.5 (increased by 17.5 units)...",
//   groupMeans: {
//     treatmentBefore: 101.25,
//     treatmentAfter: 121.25,
//     controlBefore: 96.25,
//     controlAfter: 99.25
//   },
//   differences: {
//     treatmentDiff: 20.0,     // Treatment group change
//     controlDiff: 3.0         // Control group change
//   }
// }

API

Input

  • treatmentBefore (required): Treatment group values before intervention
  • treatmentAfter (required): Treatment group values after intervention
  • controlBefore (required): Control group values before intervention
  • controlAfter (required): Control group values after intervention
  • confidenceLevel (optional): Confidence level (default: 0.95)

Output

  • effect: Estimated causal treatment effect (DiD estimator)
  • standardError: Standard error of the estimate
  • tStatistic: Test statistic for significance testing
  • pValue: Two-tailed p-value
  • significant: Whether effect is statistically significant
  • confidenceInterval: Confidence interval for the effect
  • interpretation: Plain English interpretation
  • groupMeans: Mean values for all four groups
  • differences: Within-group changes over time

Algorithm

The DiD estimator removes time-invariant confounders by differencing:

Formula: DiD = (T_after - T_before) - (C_after - C_before)

Where:

  • T = Treatment group
  • C = Control group

This double-differencing removes:

  1. Time trends (via control group)
  2. Group differences (via before/after comparison)

Key Assumption: Parallel trends - Without treatment, both groups would have changed similarly.

Use Cases

  • Policy evaluation: Measure impact of new regulations
  • Marketing: Test effectiveness of campaigns
  • Medicine: Clinical trials with before/after measurements
  • Economics: Evaluate economic interventions
  • Education: Assess program effectiveness

Example: Minimum Wage Study

// States that raised minimum wage (treatment)
// vs states that didn't (control)
const result = await diffInDiffTool.execute({
  treatmentBefore: [5.2, 5.5, 5.1, 5.4], // Employment before
  treatmentAfter: [5.1, 5.3, 5.0, 5.2],  // Employment after
  controlBefore: [5.3, 5.4, 5.2, 5.5],
  controlAfter: [5.4, 5.5, 5.3, 5.6],
});

// Effect tells us the causal impact on employment

Interpretation

A positive effect means treatment increased the outcome. A negative effect means treatment decreased the outcome.

Statistical significance (p < 0.05) suggests the effect is real, not due to chance.

Limitations

  • Requires parallel trends assumption
  • Can't control for time-varying confounders
  • Sensitive to outliers
  • Needs sufficient sample size

License

MIT