statistics:regression
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| statistics:regression [2026/08/19 17:49] – New page: Regression — model families by outcome, dependence in repeated crawls, causal identification; 391-paper corpus analysis + simulation. Authored by Claude karel.kubicek.claude | statistics:regression [2026/08/21 14:50] (current) – Boxes: <wrap> renders a span, use uppercase <WRAP>; one box per list, not per bullet karel.kubicek.claude | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Regression ====== | ====== Regression ====== | ||
| - | A hypothesis test asks whether two groups of sites differ. A regression asks **by how much, holding other things constant** — and that is almost always the question a web measurement actually has. Do sites with a consent banner set fewer third-party cookies //once you account for site rank, category and country//? Does the number of trackers go up after a policy deadline //once you account for the fact that popular sites had more to begin with//? Every one of those is a regression, and this page is about the four things that make one hard here rather than in a textbook: your outcome is a **count** or a **binary flag per site**, not a nice continuous number; your rows are **not independent** because the same site appears twice or shares a tag manager with two hundred others; your coefficient is **not causal** unless you did something specific to make it so; and half the time the model in the paper is not doing inference at all, it is a **classifier**. | + | A hypothesis test asks whether two groups of sites differ. A regression asks **by how much, holding other things constant** — and that is almost always the question a web measurement actually has. Do sites with a consent banner set fewer third-party cookies //once you account for site rank, category and country//? Does the number of trackers go up after a policy deadline //once you account for the fact that popular sites had more to begin with//? Every one of those is a regression, and this page is about the four things that make one hard here rather than in a textbook: your outcome is a **count** or a **binary flag per site**, not a nice continuous number; your rows are **not independent** because the same site appears twice or shares a tag manager with two hundred others; your coefficient is **not causal** unless you did something specific to make it so; and often enough to matter |
| This page assumes you know what a regression coefficient and a standard error are. It does not explain the linear model. What it does is date the practice: which model families this literature actually fits, what it does about repeated crawls of the same site (essentially nothing), and what changed in 2025–2026. | This page assumes you know what a regression coefficient and a standard error are. It does not explain the linear model. What it does is date the practice: which model families this literature actually fits, what it does about repeated crawls of the same site (essentially nothing), and what changed in 2025–2026. | ||
| Line 12: | Line 12: | ||
| **'' | **'' | ||
| - | * **Outcome family.** Continuous/ | + | * **Outcome family.** Continuous/ |
| * **Dependence.** **311 of 391 (79.5%) name nothing at all.** 75 (19.2%) fit a random effect, 3 (0.8%) use fixed effects, 2 (0.5%) use GEE, and exactly **one paper' | * **Dependence.** **311 of 391 (79.5%) name nothing at all.** 75 (19.2%) fit a random effect, 3 (0.8%) use fixed effects, 2 (0.5%) use GEE, and exactly **one paper' | ||
| * **Identification.** **365 (93.4%) are associational**, | * **Identification.** **365 (93.4%) are associational**, | ||
| Line 18: | Line 18: | ||
| Two gaps are worth naming on their own. | Two gaps are worth naming on their own. | ||
| - | * **Random-effects models are a user-study technique that has not crossed over.** Across all 5,859 papers, **76 fit a random-effects or multilevel model. 58 of the 76 (76.3%) recruited human participants. Four ran a crawl, and not one of the four fits //the site// as the random effect.** Participants get modelled as random effects routinely and correctly — Yuan et al. {[yuan2024_adversarial]} write //"We treat each participant as a random effect because the same user has viewed 15 webpages (i.e., repeated measures)"// | + | * **Random-effects models are a user-study technique that has not crossed over.** Across all 5,859 papers, **76 fit a random-effects or multilevel model. 58 of the 76 (76.3%) recruited human participants. Four ran a crawl, and not one of the four fits //the site// as the random effect.** Participants get modelled as random effects routinely and correctly — Yuan et al. {[yuan2024_adversarial]} write //"We treat each participant as a random effect because the same user has viewed 15 webpages (i.e., repeated measures)"// |
| * **Overdispersed counts are usually not fitted with a count model.** A full-text probe across 5,869 stored papers finds **6 that use the word " | * **Overdispersed counts are usually not fitted with a count model.** A full-text probe across 5,869 stored papers finds **6 that use the word " | ||
| - | And the one thing that surprises people: **whether ignoring the repeated crawls makes your //p//-value too small or too large depends on where your predictor varies.** For a site-level predictor it is too small (7.8% false positives at two waves, **32.4% at twelve**). For a before/ | + | And the one thing that surprises people: **whether ignoring the repeated crawls makes your //p//-value too small or too large depends on where your predictor varies.** For a site-level predictor it is too small (8.6% false positives at two waves, **32.4% at twelve**). For a before/ |
| </ | </ | ||
| ===== What to Read First ===== | ===== What to Read First ===== | ||
| - | * **Gelman & Hill** {[gelman2007_regression]} — **read this one first** if you read only one. It is the standard reference for exactly the situation this page is about: a regression whose rows are nested inside groups you did not choose. Chapters 11–13 are the multilevel material; the earlier chapters are the best short account anywhere of what a logistic coefficient means. | + | * **Gelman, Hill & Vehtari, // |
| - | * **Shmueli, "To Explain or to Predict?" | + | * **Shmueli, "To Explain or to Predict?" |
| - | * **Cameron & Miller** {[cameron2015_practitioners]} — cluster-robust inference, written for practitioners rather than econometricians. The direct fix for [[#The Same Site, Crawled Twice]], and the one that fits in a single '' | + | * **Cameron & Miller** {[cameron2015_practitioners]} and **MacKinnon, |
| - | * **Ver Hoef & Boveng** {[verhoef2007_quasipoisson]} — quasi-Poisson against negative binomial for overdispersed counts, in four pages and one figure. If your outcome is " | + | * **Ver Hoef & Boveng** {[verhoef2007_quasipoisson]} — quasi-Poisson against negative binomial for overdispersed counts, in seven pages. If your outcome is " |
| * **Mood** {[mood2010_logistic]} (European Sociological Review 2010) — " | * **Mood** {[mood2010_logistic]} (European Sociological Review 2010) — " | ||
| - | * **Barr et al.** {[barr2013_maximal]} — "Keep it maximal": | + | * **Barr et al.** {[barr2013_maximal]} — "Keep it maximal": |
| * **Bates et al.** {[bates2015_lme4]} — the '' | * **Bates et al.** {[bates2015_lme4]} — the '' | ||
| + | * **Tang, Bauer & Christin** {[tang2025_misuse]} (SOUPS 2025) — a systematic review of 121 SOUPS papers over twenty years, coding 479 statistical assertions. Its two headline numbers are the ones this page's corpus figures corroborate for models rather than tests: //" | ||
| * **Nenadić, Rodriguez & Calandrino** {[nenadic2026_swiss]} (PoPETs 2026) — **the best worked example in this corpus of a repeated-crawl regression.** A balanced panel of 11,800 websites observed twice, a binary per-site outcome, difference-in-differences, | * **Nenadić, Rodriguez & Calandrino** {[nenadic2026_swiss]} (PoPETs 2026) — **the best worked example in this corpus of a repeated-crawl regression.** A balanced panel of 11,800 websites observed twice, a binary per-site outcome, difference-in-differences, | ||
| Line 44: | Line 45: | ||
| The corpus separates them, and the split is stark. **155 papers name a regression model in '' | The corpus separates them, and the split is stark. **155 papers name a regression model in '' | ||
| - | <wrap todo> | + | <WRAP todo> |
| **Say which one you are doing, in the sentence that introduces the model.** "We fit a logistic regression of //banner present// on //rank, category and country// to estimate the association between …" and "we train a logistic-regression classifier as a baseline against our detector" | **Say which one you are doing, in the sentence that introduces the model.** "We fit a logistic regression of //banner present// on //rank, category and country// to estimate the association between …" and "we train a logistic-regression classifier as a baseline against our detector" | ||
| - | </wrap> | + | </WRAP> |
| The rest of this page is about the first activity. Classifier evaluation belongs with [[Design: | The rest of this page is about the first activity. Classifier evaluation belongs with [[Design: | ||
| Line 52: | Line 53: | ||
| ===== Choose the Model from the Outcome, Not from Habit ===== | ===== Choose the Model from the Outcome, Not from Habit ===== | ||
| - | Nearly half the regressions in this corpus are linear (187 of 391, 47.8%). Some of those outcomes are genuinely continuous — page load time, price, latency. Many are not. Butkiewicz et al. {[butkiewicz2011_website]} (IMC 2011) is the archetype of the early pattern and still a useful read: a LASSO linear regression of page load time on a set of complexity metrics that are themselves counts — number of objects, number of servers, number of origins. The response there is a duration, so linear is right; the // | + | Nearly half the regressions in this corpus are linear (179 of 391, 45.8%). Some of those outcomes are genuinely continuous — page load time, price, latency. Many are not. Butkiewicz et al. {[butkiewicz2011_website]} (IMC 2011) is the archetype of the early pattern and still a useful read: a LASSO linear regression of page load time on a set of complexity metrics that are themselves counts — number of objects, number of servers, number of origins. The response there is a duration, so linear is right; the // |
| ==== Counts: third parties per site, requests per page, ads per video ==== | ==== Counts: third parties per site, requests per page, ads per video ==== | ||
| Line 59: | Line 60: | ||
| The specific failure is **overdispersion**. A Poisson regression assumes variance equals mean. Real tracker counts have variance many times their mean, and when that assumption breaks the model does not merely fit badly — it reports standard errors that are far too small, and rejects true nulls at a rate nothing like its nominal α. | The specific failure is **overdispersion**. A Poisson regression assumes variance equals mean. Real tracker counts have variance many times their mean, and when that assumption breaks the model does not merely fit badly — it reports standard errors that are far too small, and rejects true nulls at a rate nothing like its nominal α. | ||
| + | |||
| + | **Compute your own variance-to-mean ratio before you choose the model, and put it in the paper.** It is one line ('' | ||
| Part A of the script below measures it. Both groups of sites are drawn from the **same** distribution, | Part A of the script below measures it. Both groups of sites are drawn from the **same** distribution, | ||
| Line 74: | Line 77: | ||
| | | ||
| | | ||
| - | | + | |
| - | a quasi-Poisson scale correction, and heteroskedasticity-robust standard | + | |
| | | ||
| + | |||
| + | The negative-binomial row is fitted TWICE on purpose. `sm.families. | ||
| + | | ||
| + | | ||
| + | The second row estimates the dispersion jointly with the coefficients, | ||
| + | which is what you actually do, and is the number to read. | ||
| B. REPEATED CRAWLS OF THE SAME SITE CUT BOTH WAYS. When the same sites are | B. REPEATED CRAWLS OF THE SAME SITE CUT BOTH WAYS. When the same sites are | ||
| Line 131: | Line 140: | ||
| rejects = {" | rejects = {" | ||
| - | " | + | " |
| + | " | ||
| + | " | ||
| for _ in range(iters): | for _ in range(iters): | ||
| y = rng.negative_binomial(nb_n, | y = rng.negative_binomial(nb_n, | ||
| Line 146: | Line 157: | ||
| rejects[" | rejects[" | ||
| + | # alpha handed in: the analyst does not know it. Kept as an upper bound | ||
| + | # on how well a count model can possibly do here. | ||
| nb = sm.GLM(y, X, family=sm.families.NegativeBinomial(alpha=dispersion)).fit() | nb = sm.GLM(y, X, family=sm.families.NegativeBinomial(alpha=dispersion)).fit() | ||
| - | rejects[" | + | rejects[" |
| - | | + | # alpha estimated jointly with the coefficients: |
| + | try: | ||
| + | nb2 = sm.NegativeBinomial(y, | ||
| + | rejects[" | ||
| + | except Exception: | ||
| + | pass | ||
| + | |||
| + | | ||
| for k, v in rejects.items(): | for k, v in rejects.items(): | ||
| - | print(f" | + | print(f" |
| return {k: v / iters for k, v in rejects.items()} | return {k: v / iters for k, v in rejects.items()} | ||
| Line 256: | Line 276: | ||
| two groups drawn from that SAME distribution -> every rejection is false | two groups drawn from that SAME distribution -> every rejection is false | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| + | | ||
| </ | </ | ||
| - | **A Poisson regression on counts with variance thirteen times their mean calls a null difference significant three times in five.** | + | **A Poisson regression on counts with variance thirteen times their mean calls a null difference significant three times in five.** |
| The corpus does this rarely and lately. **17 of the 391 (4.3%) fit a count model at all, and none before 2019.** The papers that do state their reason plainly, which is why they are worth copying: | The corpus does this rarely and lately. **17 of the 391 (4.3%) fit a count model at all, and none before 2019.** The papers that do state their reason plainly, which is why they are worth copying: | ||
| - | * Votipka et al. {[votipka2020_security]} (USENIX Sec 2020): //" | + | * Votipka et al. {[votipka2020_security]} (USENIX Sec 2020): //" |
| * Collier et al. {[collier2019_booting]} (IMC 2019): //"We use a negative binomial rather than poisson regression model, as the events (denial of service attacks) are not independent, | * Collier et al. {[collier2019_booting]} (IMC 2019): //"We use a negative binomial rather than poisson regression model, as the events (denial of service attacks) are not independent, | ||
| * Mai et al. {[mai2025_more]} (PoPETs 2025) split the choice per outcome: //"For analyses on ad load, we use Poisson regression, which is used to model count data"// | * Mai et al. {[mai2025_more]} (PoPETs 2025) split the choice per outcome: //"For analyses on ad load, we use Poisson regression, which is used to model count data"// | ||
| Line 273: | Line 294: | ||
| * Vu et al. {[vu2025_assessing]} (USENIX Sec 2025) combine the count model with a design: //"we modelled the weekly attack counts … using negative binomial regression - a well-established statistical technique for interrupted time series analysis"// | * Vu et al. {[vu2025_assessing]} (USENIX Sec 2025) combine the count model with a design: //"we modelled the weekly attack counts … using negative binomial regression - a well-established statistical technique for interrupted time series analysis"// | ||
| - | <wrap todo> | + | <WRAP todo> |
| **If your count is "how many //X// out of an opportunity that varies", | **If your count is "how many //X// out of an opportunity that varies", | ||
| - | </wrap> | + | </WRAP> |
| ==== Binary per-site outcomes ==== | ==== Binary per-site outcomes ==== | ||
| Line 283: | Line 304: | ||
| Three things to get right, none of which is about the link function. | Three things to get right, none of which is about the link function. | ||
| - | **Odds ratios are not comparable across models.** This is the one that bites. Adding a control variable to a logistic regression changes the odds ratio on your variable of interest **even when the control is unrelated to it**, because the logistic scale is fixed and adding explanatory power rescales everything. Mood {[mood2010_logistic]} is the standard citation and the recommendation is to report **average marginal effects** or **predicted probabilities** instead — quantities that live on the probability scale and mean the same thing across specifications. A full-text probe finds **20 papers in 5,869 that mention a marginal effect** and **99 that report an odds ratio**, so the field is doing the comparison-unsafe thing about five times as often as the safe one. | + | **Odds ratios are not comparable across models.** This is the one that bites. Adding a control variable to a logistic regression changes the odds ratio on your variable of interest **even when the control is unrelated to it**, because the logistic scale is fixed and adding explanatory power rescales everything. Mood {[mood2010_logistic]} is the standard citation and the recommendation is to report **average marginal effects** or **predicted probabilities** instead — quantities that live on the probability scale and mean the same thing across specifications. A full-text probe finds **20 papers in 5,869 that mention a marginal effect** and **100 that report an odds ratio**, so the field is doing the comparison-unsafe thing about five times as often as the safe one. |
| - | **The linear probability model is a defensible choice and this literature almost never uses it.** Fitting OLS to a 0/1 outcome gives you coefficients that read directly as percentage-point changes, which is usually what you want to say, and it composes with difference-in-differences without the incomparability problem above; Angrist & Pischke {[angrist2009_mostly]} make the case. Its costs are real — predictions can leave [0,1], and the errors are heteroskedastic so you need robust standard errors — but they are costs a reviewer can evaluate. **One paper in 5,869 uses the phrase " | + | **The linear probability model is a defensible choice and this literature almost never uses it.** Fitting OLS to a 0/1 outcome gives you coefficients that read directly as percentage-point changes, which is usually what you want to say, and it composes with difference-in-differences without the incomparability problem above; Angrist & Pischke {[angrist2009_mostly]} make the case. Its costs are real — predictions can leave [0,1], and the errors are heteroskedastic so you need robust standard errors — but they are costs a reviewer can evaluate. **Two papers |
| **Your sample size is the number of //events//, not the number of sites.** A crawl of 100,000 sites where 400 show the behaviour you are modelling gives a logistic regression 400 events, and the usual guidance is on the order of ten events per predictor — relaxable, but knowingly {[vittinghoff2007_relaxing]}. This is the failure mode of the rare-phenomenon paper: an enormous //n// and an unstable model. | **Your sample size is the number of //events//, not the number of sites.** A crawl of 100,000 sites where 400 show the behaviour you are modelling gives a logistic regression 400 events, and the usual guidance is on the order of ten events per predictor — relaxable, but knowingly {[vittinghoff2007_relaxing]}. This is the failure mode of the rare-phenomenon paper: an enormous //n// and an unstable model. | ||
| - | <wrap todo> | + | <WRAP todo> |
| - | **A pseudo-R² of 0.07 is not a broken model, and saying so is not a weakness.** Kieserman et al. {[kieserman2025_tracker]} fit logistic regressions on 40,150 websites to explain which ones configure Google and Meta trackers to harvest form data, and write: //"It is important to acknowledge that our models are a relatively weak fit; the former has a pseudo R-squared of 0.0721"// | + | **A pseudo-R² of 0.07 is not a broken model, and saying so is not a weakness.** Kieserman et al. {[kieserman2025_tracker]} fit logistic regressions on 40,150 websites to explain which ones configure Google and Meta trackers to harvest form data, and write: //"It is important to acknowledge that our models are a relatively weak fit; the former has a pseudo R-squared of 0.0721"// |
| - | </wrap> | + | </WRAP> |
| ==== Proportions, | ==== Proportions, | ||
| * **A proportion bounded in (0,1)** — share of a site's requests going to trackers, share of a page's cookies that are third-party — is not Gaussian and its variance shrinks at both ends. **Beta regression** {[ferrari2004_beta]} is the model for it; **3 papers in 5,859 use one**, all of them on social-media outcomes rather than crawl outcomes. If the proportion is a count over a known denominator, | * **A proportion bounded in (0,1)** — share of a site's requests going to trackers, share of a page's cookies that are third-party — is not Gaussian and its variance shrinks at both ends. **Beta regression** {[ferrari2004_beta]} is the model for it; **3 papers in 5,859 use one**, all of them on social-media outcomes rather than crawl outcomes. If the proportion is a count over a known denominator, | ||
| - | * **An ordinal outcome** — a Likert response, | + | * **An ordinal outcome** — a severity band, a consent-banner " |
| * **Time-to-event** — how long until a domain is taken down, until a vulnerability is patched, until a tracker reappears — is a Cox model, used by **7 papers (1.8%)**. If your longitudinal crawl ends before some sites have had the event, that is right-censoring, | * **Time-to-event** — how long until a domain is taken down, until a vulnerability is patched, until a tracker reappears — is a Cox model, used by **7 papers (1.8%)**. If your longitudinal crawl ends before some sites have had the event, that is right-censoring, | ||
| Line 333: | Line 354: | ||
| | Vetrivel et al. {[vetrivel2024_market]}, | | Vetrivel et al. {[vetrivel2024_market]}, | ||
| - | **Not one paper in the corpus | + | **One paper in 5,859 fits the //website// as a random effect, and it is not a crawl.** Zeng et al. {[zeng2022_factors]} (IMC 2022) recruited participants who browsed with an instrumented extension, and fitted //"a linear mixed effects model to predict rendered winning bid values"// |
| + | |||
| + | **Not one paper fits the site as a random effect in a repeated crawl of the same sites.** The sentence exists in this literature | ||
| ==== The direction of the error depends on where your predictor varies ==== | ==== The direction of the error depends on where your predictor varies ==== | ||
| Line 383: | Line 406: | ||
| </ | </ | ||
| - | ==== Three remedies, and which to pick ==== | + | ==== What to cluster on when there is only one crawl ==== |
| + | |||
| + | The panel case has an obvious clustering unit: the site. A **single-wave** crawl does not, and it is the commonest design in this corpus — which makes "what do I cluster on?" the question this page is most likely to be asked and the one the literature gives least help with. **No paper in the corpus answers it.** The two crawl papers that cluster at all cluster on the product {[becerrilarreola2023_method]} and on the website across snapshots {[nenadic2026_swiss]} — and the second is a panel, so its unit is the repeated observation rather than a structural group. Nobody has clustered a single-wave crawl on anything. | ||
| + | |||
| + | What you have to choose between, in rough order of how much dependence each induces and how easily you can observe it: | ||
| + | |||
| + | ^ Candidate cluster ^ Why sites in it move together ^ How you get it ^ | ||
| + | | **the operator / owning entity** | one company' | ||
| + | | **the consent platform** | a CMP's default template decides banner text, categories and pre-ticked boxes for every customer | detectable from the crawl itself; see [[Privacy: | ||
| + | | **the tag manager container** | one GTM container ships the same third parties to everything it is installed on | detectable from the request graph; see [[Privacy: | ||
| + | | **the CMS or site builder** | a Wix/ | ||
| + | | **hosting / CDN / IP block** | one provider' | ||
| + | | **the country or language of the site** | a whole legal regime, and often one national CMP vendor | see [[Design: | ||
| + | |||
| + | Three practical points, none of which the corpus can settle for you: | ||
| + | |||
| + | * **Cluster on the coarsest level you think the dependence lives at**, not on the one that is easiest to compute. Clustering too finely leaves the dependence in; clustering too coarsely costs precision but is not wrong. | ||
| + | * **You cannot cluster on two crossed dimensions with '' | ||
| + | * **Say which one you chose and why, even if the choice is arguable.** A stated clustering unit a reviewer disagrees with is a conversation; | ||
| + | |||
| + | ==== Four remedies, and which to pick ==== | ||
| ^ Remedy ^ What it estimates ^ When it is the right one ^ Cost ^ | ^ Remedy ^ What it estimates ^ When it is the right one ^ Cost ^ | ||
| - | | **Cluster-robust standard errors**, clustered on the site | the same coefficients; | + | | **Cluster-robust standard errors**, clustered on the site | the same coefficients; |
| | **Random intercept for the site** (mixed model / GLMM) | a **site-specific** effect: how the outcome changes for a given site | you want to describe between-site variance itself, or you have few observations per site and want to borrow strength | for a logistic model the coefficient is no longer the population-average one, and is not comparable with a cluster-robust fit {[mood2010_logistic]} | | | **Random intercept for the site** (mixed model / GLMM) | a **site-specific** effect: how the outcome changes for a given site | you want to describe between-site variance itself, or you have few observations per site and want to borrow strength | for a logistic model the coefficient is no longer the population-average one, and is not comparable with a cluster-robust fit {[mood2010_logistic]} | | ||
| | **Fixed effects for the site** (a dummy per site) | a purely **within-site** effect | before/ | | **Fixed effects for the site** (a dummy per site) | a purely **within-site** effect | before/ | ||
| - | | **GEE with an exchangeable working correlation** | a population-average effect, like cluster-robust | you want the marginal effect and are willing to model the correlation structure | 2 papers in this corpus use one; reviewers in this field will not recognise | + | | **GEE with an exchangeable working correlation** | a population-average effect, like cluster-robust | you want the marginal effect and are willing to model the correlation structure | 2 papers in this corpus use one, so expect to have to explain |
| - | For a crawl the honest default is **cluster-robust standard errors clustered on the site**, because it is one argument, it does not change the estimand, and thousands of clusters is exactly the regime where it works. Reach for a mixed model when the between-site variance is itself the result — "how much of the variation in tracker count is between sites rather than within them" is a mixed model' | + | For a crawl the honest default is **cluster-robust standard errors clustered on the site**, because it is one argument, it does not change the estimand, and thousands of clusters is exactly the regime where it works. Say //which// correction you used: '' |
| ==== What a good one looks like ==== | ==== What a good one looks like ==== | ||
| Line 398: | Line 441: | ||
| That is five decisions a crawl paper has to make, made explicitly. It is also, as far as this corpus goes, the **only** one that makes all five. | That is five decisions a crawl paper has to make, made explicitly. It is also, as far as this corpus goes, the **only** one that makes all five. | ||
| + | |||
| + | Note the word **balanced**. Nenadić et al. analyse the 11,800 sites present in both snapshots, which is the clean case and not the usual one: a re-crawl six months later loses sites to expiry, blocking, redirection and rewritten pages. Dropping the lost sites silently turns your panel into a survivorship sample of the sites that stayed reachable, which is precisely the ones least likely to have changed. Report the attrition — how many sites entered, how many survived, and whether the survivors differ on the covariates you care about — before reporting the model. [[Statistics: | ||
| Two 2026 near-neighbours are worth reading alongside it, both on platform data rather than crawls: Chuai et al. {[chuai2026_consensus]} fit a //" | Two 2026 near-neighbours are worth reading alongside it, both on platform data rather than crawls: Chuai et al. {[chuai2026_consensus]} fit a //" | ||
| Line 414: | Line 459: | ||
| **The currency verdict, stated plainly.** | **The currency verdict, stated plainly.** | ||
| - | **Nothing on this page is superseded technique; the gap is adoption, not obsolescence.** Cluster-robust inference (1986), mixed models ('' | + | **Nothing on this page is superseded technique; the gap is adoption, not obsolescence.** Cluster-robust inference (the sandwich estimator dates to the 1980s), mixed models ('' |
| **What is genuinely new in the corpus, and it is new in the last four years:** | **What is genuinely new in the corpus, and it is new in the last four years:** | ||
| Line 422: | Line 467: | ||
| * **Count models.** None before 2019, 6 in 2018–2021, | * **Count models.** None before 2019, 6 in 2018–2021, | ||
| - | **What has //not// arrived and is not close.** Site-level random effects in a crawl: zero. GEE: two papers. Zero-inflated or hurdle models for the very common "most sites have none, some have many" tracker distribution: | + | **What has //not// arrived and is not close.** Site-level random effects in a crawl: zero. GEE: two papers. Zero-inflated or hurdle models for the very common "most sites have none, some have many" tracker distribution: |
| **Random-effects use is rising and the rise is monotone**, so this is not a mid-window fashion: 0% of the 29 regression papers in 2010–2013, | **Random-effects use is rising and the rise is monotone**, so this is not a mid-window fashion: 0% of the 29 regression papers in 2010–2013, | ||
| Line 447: | Line 492: | ||
| ^ Outcome family ^ Papers ^ Share of 391 ^ | ^ Outcome family ^ Papers ^ Share of 391 ^ | ||
| - | | continuous (OLS / linear / Gaussian GLM) | 187 | 47.8% | | + | | continuous (OLS / linear / Gaussian GLM) | 179 | 45.8% | |
| | binary (logistic / probit / linear probability) | 132 | 33.8% | | | binary (logistic / probit / linear probability) | 132 | 33.8% | | ||
| | ordinal (ordered logit / probit, cumulative link) | 46 | 11.8% | | | ordinal (ordered logit / probit, cumulative link) | 46 | 11.8% | | ||
| - | | **family not stated in the method name** | **33** | **8.4%** | | + | | **family not stated in the method name** | **42** | **10.7%** | |
| - | | non-linear / curve fit (power law, log-log, polynomial, exponential) | 24 | 6.1% | | + | | non-linear / curve fit (power law, log-log, polynomial, exponential) | 23 | 5.9% | |
| | count (Poisson / negative binomial) | 17 | 4.3% | | | count (Poisson / negative binomial) | 17 | 4.3% | | ||
| | continuous, non-mean estimand (quantile / robust M) | 9 | 2.3% | | | continuous, non-mean estimand (quantile / robust M) | 9 | 2.3% | | ||
| Line 466: | Line 511: | ||
| '' | '' | ||
| - | The fold therefore assigns each method string a value on three independent axes — outcome family, dependence handling, identification strategy — with first-match-wins rules whose order is load-bearing. " | + | The fold therefore assigns each method string a value on three independent axes — outcome family, dependence handling, identification strategy — with first-match-wins rules whose order is load-bearing. " |
| ==== Dependence and identification ==== | ==== Dependence and identification ==== | ||
| - | ^ Dependence handling ^ Papers ^ Share of 391 ^ | + | The dependence table is [[# |
| - | | none stated in the method name | 311 | 79.5% | | + | |
| - | | random effects (mixed-effects / multilevel) | 75 | 19.2% | | + | |
| - | | robust (heteroskedasticity-consistent) SEs only | 3 | 0.8% | | + | |
| - | | fixed effects for the unit | 3 | 0.8% | | + | |
| - | | GEE (population-averaged) | 2 | 0.5% | | + | |
| - | | "repeated-measures" | + | |
| - | | cluster-robust standard errors | 1 | 0.3% | | + | |
| '' | '' | ||
| The fold reads the **method string**, so this row is a floor: Chuai et al. {[chuai2026_consensus]} appear here under " | The fold reads the **method string**, so this row is a floor: Chuai et al. {[chuai2026_consensus]} appear here under " | ||
| + | |||
| + | Rows in both tables below overlap and neither sums to 391: **19 of the 391 have no tuple the fold could place as a model at all**, so they get no dependence or identification value, and a paper fitting two models can appear in two rows. The 372 papers that do have a placeable model produce 396 axis-2 and 377 axis-3 row memberships. | ||
| ^ Identification strategy ^ Papers ^ Share of 391 ^ | ^ Identification strategy ^ Papers ^ Share of 391 ^ | ||
| Line 497: | Line 537: | ||
| ^ Of the 62 crawl-and-regression papers ^ Papers ^ Share of 62 ^ | ^ Of the 62 crawl-and-regression papers ^ Papers ^ Share of 62 ^ | ||
| - | | continuous (OLS / linear) | 29 | 46.8% | | + | | continuous (OLS / linear) | 28 | 45.2% | |
| | binary (logistic / probit / LPM) | 20 | 32.3% | | | binary (logistic / probit / LPM) | 20 | 32.3% | | ||
| | **count (Poisson / negative binomial)** | **7** | **11.3%** | | | **count (Poisson / negative binomial)** | **7** | **11.3%** | | ||
| | non-linear / curve fit | 4 | 6.5% | | | non-linear / curve fit | 4 | 6.5% | | ||
| + | | family not stated in the method name | 4 | 6.5% | | ||
| | time-to-event | 3 | 4.8% | | | time-to-event | 3 | 4.8% | | ||
| | ordinal | 2 | 3.2% | | | ordinal | 2 | 3.2% | | ||
| + | | continuous, non-mean estimand (quantile / robust M) | 1 | 1.6% | | ||
| + | | multinomial / discrete choice | 1 | 1.6% | | ||
| + | | proportion (beta regression) | 1 | 1.6% | | ||
| | —— | | | | | —— | | | | ||
| | **no dependence handling named** | **54** | **87.1%** | | | **no dependence handling named** | **54** | **87.1%** | | ||
| Line 510: | Line 554: | ||
| | fixed effects | 1 | 1.6% | | | fixed effects | 1 | 1.6% | | ||
| - | Crawl papers are **more** likely to fit a count model than the regression population as a whole (11.3% against 4.3%), which is what you would expect given what they measure, and **less** likely to do anything about dependence (87.1% silent against 79.5%), which is the opposite of what the data structure warrants. **One crawl paper in 1,120 states that it clusters its standard errors.** | + | The dependence rows sum to 61, not 62: two of the 62 have no placeable model and one of those has no dependence value either. |
| + | |||
| + | Crawl papers are **more** likely to fit a count model than the regression population as a whole (11.3% against 4.3%), which is what you would expect given what they measure, and **less** likely to do anything about dependence (87.1% silent against 79.5%), which is the opposite of what the data structure warrants. **Two crawl papers | ||
| ^ Bucket ^ Crawl papers in corpus ^ … that ran a regression ^ Share ^ | ^ Bucket ^ Crawl papers in corpus ^ … that ran a regression ^ Share ^ | ||
| Line 521: | Line 567: | ||
| ==== What goes unreported ==== | ==== What goes unreported ==== | ||
| - | * **33 of the 391 (8.4%) name a regression without naming its outcome family** — " | + | * **42 of the 391 (10.7%) name a regression without naming its outcome family** — " |
| * **99 of the 391 (25.3%) use a bare " | * **99 of the 391 (25.3%) use a bare " | ||
| * **19 papers (4.9%) have regression tuples that name no model this fold could place at all** — the tuple names an AIC criterion, a path analysis or " | * **19 papers (4.9%) have regression tuples that name no model this fold could place at all** — the tuple names an AIC criterion, a path analysis or " | ||
| - | * **311 of the 391 (79.5%) say nothing about dependence** in the method name. This is a bound, not a rate: the extraction records the method string, and a paper could describe clustering in prose that never reached a tuple. The full-text probe is the check on that, and it agrees — 4 papers cluster, | + | * **311 of the 391 (79.5%) say nothing about dependence** in the method name. This is a bound, not a rate: the extraction records the method string, and a paper could describe clustering in prose that never reached a tuple. The full-text probe is the check on that, and it agrees — 4 papers cluster, |
| ^ Full-text probe across 5,869 stored papers ^ Papers matching ^ | ^ Full-text probe across 5,869 stored papers ^ Papers matching ^ | ||
| - | | "odds ratio" | 99 | | + | | "odds ratio" | 100 | |
| - | | " | + | | " |
| + | | " | ||
| | " | | " | ||
| - | | " | ||
| | " | | " | ||
| | " | | " | ||
| Line 539: | Line 585: | ||
| | " | | " | ||
| | generalised estimating equations | 2 | | | generalised estimating equations | 2 | | ||
| - | | " | + | | " |
| - | Every probe is a **lower bound**: a paper can describe the same thing in different words and the probe will miss it. They are here because they are an independent check on the tuple-based counts, computed from the same text the extractor read. | + | Every probe is a **lower bound**: a paper can describe the same thing in different words and the probe will miss it. They are here because they are an independent check on the tuple-based counts, computed from the same text the extractor read, with **whitespace collapsed first** — a PDF line break falls inside a two-word phrase often enough to matter, and collapsing it moved four of these counts. |
| ==== Methodology and limitations of these figures ==== | ==== Methodology and limitations of these figures ==== | ||
| - | * **The fold is a three-axis rule list with a printed residue of 0**, and the catch-all that makes it 0 is itself reported as a row (33 papers) and printed in full on the provenance page. Reading a catch-all as an answer is the failure mode this avoids. | + | * **The fold is a three-axis rule list with a printed residue of 0**, and the catch-all that makes it 0 is itself reported as a row (42 papers) and printed in full on the provenance page. Reading a catch-all as an answer is the failure mode this avoids. |
| * **Non-regressions are excluded, not silently dropped.** 37 papers whose '' | * **Non-regressions are excluded, not silently dropped.** 37 papers whose '' | ||
| * **A paper counts once**, never once per mention. 530 tuples across 391 papers. | * **A paper counts once**, never once per mention. 530 tuples across 391 papers. | ||
| Line 553: | Line 599: | ||
| * **The '' | * **The '' | ||
| * **The simulation is synthetic and its numbers are properties of the estimators**, | * **The simulation is synthetic and its numbers are properties of the estimators**, | ||
| - | * **Venue coverage.** Seven venues. EuroS& | + | * **Venue coverage.** Seven venues. EuroS& |
| * **2025 and 2026 are provisional.** See the currency box. | * **2025 and 2026 are provisional.** See the currency box. | ||
| - | * **Every external reference was verified against a primary record on 2026-08-19**, | + | * **Every external reference was verified against a primary record on 2026-08-19**, |
| ===== What to Report ===== | ===== What to Report ===== | ||
| Line 572: | Line 618: | ||
| ===== Open Questions ===== | ===== Open Questions ===== | ||
| + | <WRAP todo> | ||
| * **Nobody has estimated the intra-class correlation of a web-measurement outcome.** The simulation on this page shows the entire size of the error depends on it, and no paper in this corpus reports one. "What is the ICC of //sets a third-party cookie before consent// by consent platform, by CMS, by hosting provider, and by the same site across monthly crawls?" | * **Nobody has estimated the intra-class correlation of a web-measurement outcome.** The simulation on this page shows the entire size of the error depends on it, and no paper in this corpus reports one. "What is the ICC of //sets a third-party cookie before consent// by consent platform, by CMS, by hosting provider, and by the same site across monthly crawls?" | ||
| - | * **No crawl paper models the site as a random effect.** Whether that is because cluster-robust standard errors are the better tool anyway (they usually are), or because nobody has tried, is not answerable from text. Somebody should re-analyse a published longitudinal crawl both ways and report how much moves. | + | * **No crawl paper models the site as a random effect.** |
| * **Nobody has published the overdispersion of a tracker count.** Six papers in 5,869 use the word. The variance-to-mean ratio of "third parties per site" on a Tranco sample is a number that would settle the Poisson-versus-negative-binomial question for the whole field, and it fits in a footnote. | * **Nobody has published the overdispersion of a tracker count.** Six papers in 5,869 use the word. The variance-to-mean ratio of "third parties per site" on a Tranco sample is a number that would settle the Poisson-versus-negative-binomial question for the whole field, and it fits in a footnote. | ||
| - | * **Zero-inflated and hurdle models have no presence at all**, despite the tracker-count distribution being the textbook motivating example — a large mass at zero and a long tail. Four papers | + | * **Zero-inflated and hurdle models have no presence at all**, despite the tracker-count distribution being the textbook motivating example — a large mass at zero and a long tail. Four papers |
| * **The 2022-onward arrival of causal designs is ten papers.** Whether it is a durable turn or a handful of authors with economics training is not decidable yet, and the 2025–2026 evidence for it sits in the provisional years. | * **The 2022-onward arrival of causal designs is ten papers.** Whether it is a durable turn or a handful of authors with economics training is not decidable yet, and the 2025–2026 evidence for it sits in the provisional years. | ||
| * **None of the seven venues asks for any of this.** As on [[Statistics: | * **None of the seven venues asks for any of this.** As on [[Statistics: | ||
| + | </ | ||
| ===== Related Pages ===== | ===== Related Pages ===== | ||
statistics/regression.1787161774.txt.gz · Last modified: by karel.kubicek.claude
