64  Errore di specificazione e bias da variabile omessa

“The coefficients may be useful for descriptive purposes, but not for causal inference or even prediction.”

David A. Freedman, From Association to Causation via Regression

Introduzione

Uno degli aspetti più delicati dei modelli di regressione è il rischio di errore di specificazione (Ramsey, 1969). Questo si verifica quando il modello che stimiamo non corrisponde al “vero” modello che ha generato i dati. In particolare, parleremo del caso in cui omettiamo una variabile esplicativa che:

  1. è correlata con almeno uno dei regressori inclusi nel modello, e
  2. ha un effetto diretto sulla variabile dipendente \(Y\).

Quando entrambe queste condizioni si verificano, la stima dei coefficienti parziali di regressione risulta sistematicamente distorta.

Panoramica del capitolo

  • Bias da variabile omessa: escludere una variabile rilevante altera sistematicamente i coefficienti.
  • Condizioni del bias.
  • Implicazioni: i coefficienti OLS non sono interpretabili in chiave causale; la regressione è fenomenologica.
  • Prospettiva: privilegiare modelli meccanicistici (es., Rescorla–Wagner, DDM, dinamici EMA).

Per seguire al meglio questo capitolo è utile avere:

  • una conoscenza di base della regressione lineare semplice e del concetto di coefficiente di regressione.
here::here("code", "_common.R") |> 
  source()

# Load packages
if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(brms, posterior, cmdstanr, tidybayes, loo, patchwork)

64.1 Errore di specificazione e bias da variabile omessa

64.1.1 Idea chiave

Se il vero modello è

\[ Y=\beta_0+\beta_1X_1+\beta_2X_2+\varepsilon,\qquad \mathbb{E}[\varepsilon\mid X_1,X_2]=0, \] ma stimiamo erroneamente il modello che omette \(X_2\),

\[ Y=\alpha_0+\alpha_1X_1+u, \] allora il coefficiente su \(X_1\) risulta distorto quando:

  1. \(X_2\) ha effetto diretto su \(Y\) (\(\beta_2\neq 0\));
  2. \(X_2\) è correlata con \(X_1\) (\(\mathrm{Corr}(X_1,X_2)\neq 0\)).

64.1.2 Dimostrazione (via standardizzazione)

64.1.2.1 Passo 1 — Standardizza le variabili

Definiamo medie \(\mu_1,\mu_2,\mu_Y\) e deviazioni standard \(\sigma_1,\sigma_2,\sigma_Y\). Poniamo

\[ Z_1=\frac{X_1-\mu_1}{\sigma_1},\qquad Z_2=\frac{X_2-\mu_2}{\sigma_2},\qquad Z_Y=\frac{Y-\mu_Y}{\sigma_Y}. \]

Per costruzione:

  • \(\mathrm{Var}(Z_1)=\mathrm{Var}(Z_2)=1\),
  • \(\mathrm{Cov}(Z_1,Z_2)=\rho_{12}=\mathrm{Corr}(X_1,X_2)\).

Il modello vero standardizzato è

\[ Z_Y=\gamma_1 Z_1+\gamma_2 Z_2+\varepsilon_z,\qquad \mathbb{E}[\varepsilon_z\mid Z_1,Z_2]=0, \] con beta standardizzati

\[ \gamma_1=\beta_1\,\frac{\sigma_1}{\sigma_Y},\qquad \gamma_2=\beta_2\,\frac{\sigma_2}{\sigma_Y}. \]

64.1.2.2 Passo 2 — Stima (erronea) che omette \(Z_2\)

Stimiamo la regressione univariata

\[ Z_Y=\delta_1 Z_1 + \text{errore}. \]

Per OLS,

\[ \hat\delta_1=\frac{\mathrm{Cov}(Z_1,Z_Y)}{\mathrm{Var}(Z_1)}=\mathrm{Cov}(Z_1,Z_Y), \] dato che \(\mathrm{Var}(Z_1)=1\).

Usiamo il modello vero standardizzato:

\[ \begin{align} \mathrm{Cov}(Z_1,Z_Y) &=\mathrm{Cov}\big(Z_1,\gamma_1Z_1+\gamma_2Z_2+\varepsilon_z\big)\notag\\ &=\gamma_1\underbrace{\mathrm{Var}(Z_1)}_{=1} +\gamma_2\,\mathrm{Cov}(Z_1,Z_2) +\underbrace{\mathrm{Cov}(Z_1,\varepsilon_z)}_{=0}. \end{align} \]

Quindi

\[ \boxed{\;\hat\delta_1=\gamma_1+\gamma_2\,\rho_{12}\;}. \]

Lettura immediata: il coefficiente stimato univariato mescola l’effetto diretto standardizzato di \(X_1\) (\(\gamma_1\)) con un termine spurio \(\gamma_2\rho_{12}\) dovuto all’omissione di \(X_2\).

64.1.3 Ritraduzione ai coefficienti non standardizzati

Tra i coefficienti vale

\[ \hat\delta_1=\frac{\sigma_1}{\sigma_Y}\,\hat\alpha_1,\qquad \gamma_1=\beta_1\,\frac{\sigma_1}{\sigma_Y},\qquad \gamma_2=\beta_2\,\frac{\sigma_2}{\sigma_Y}. \]

Dalla formula standardizzata

\[ \hat\delta_1=\gamma_1+\gamma_2\rho_{12} \] segue

\[ \frac{\sigma_1}{\sigma_Y}\,\hat\alpha_1 =\beta_1\frac{\sigma_1}{\sigma_Y} +\beta_2\frac{\sigma_2}{\sigma_Y}\rho_{12}. \]

Moltiplicando per \(\sigma_Y/\sigma_1\) e ricordando che \(\rho_{12}=\dfrac{\mathrm{Cov}(X_1,X_2)}{\sigma_1\sigma_2}\), ottieniamo la forma non standardizzata:

\[ \boxed{\;\hat\alpha_1=\beta_1+\beta_2\,\frac{\mathrm{Cov}(X_1,X_2)}{\mathrm{Var}(X_1)}\;}. \]

Bias (in media):

\[ \boxed{\;\mathbb{E}[\hat\alpha_1]-\beta_1 =\beta_2\,\frac{\mathrm{Cov}(X_1,X_2)}{\mathrm{Var}(X_1)}\;} \quad\Longleftrightarrow\quad \boxed{\;\mathbb{E}[\hat\delta_1]-\gamma_1=\gamma_2\rho_{12}\;}. \]

64.1.4 Interpretazione didattica

  • Condizioni per il bias: serve sia \(\beta_2\neq 0\) (l’omessa \(X_2\) conta davvero su \(Y\)) sia \(\rho_{12}\neq 0\) (l’omessa \(X_2\) è correlata con \(X_1\)). Se una condizione manca, il bias svanisce.
  • Segno del bias (scala standardizzata): \(\mathrm{Bias}(\hat\delta_1)=\gamma_2\rho_{12}\).
    • \(\gamma_2>0\) e \(\rho_{12}>0\)sovrastima;
    • \(\gamma_2>0\) e \(\rho_{12}<0\)sottostima.

64.1.5 Perché conta in psicologia

La regressione multipla è un modello fenomenologico: fotografa associazioni tra variabili, non i meccanismi che le generano. In contesti psicologici, l’omissione di variabili rilevanti è spesso inevitabile: non conosciamo o non misuriamo tutti i determinanti di \(Y\). Ne segue che i coefficienti parziali possono essere sistematicamente distorti e, dunque, fuorvianti.

64.1.6 Oltre la regressione: modelli formali dei processi

Per queste ragioni, i modelli di regressione multipla dovrebbero avere un ruolo limitato in psicologia. Molto più promettente è l’uso di modelli formali che cercano di rappresentare i meccanismi psicologici sottostanti. Esempi discussi in questa dispensa sono:

  • il modello di apprendimento di Rescorla–Wagner, che spiega come gli individui aggiornano le loro aspettative sulla base del feedback;
  • il Drift Diffusion Model (DDM), che descrive i processi decisionali come un accumulo di evidenza nel tempo;
  • i modelli dinamici per dati EMA, che mostrano come l’umore e altre variabili psicologiche cambiano nel tempo.

Questi modelli non si limitano a descrivere correlazioni, ma cercano di catturare i processi causali che generano i dati osservati.

Esaminiamo come segno e magnitudo del bias cambino al variare della correlazione tra regressori (\(\rho_{12}\)) e dell’effetto dell’omessa (\(\beta_2\)). La heatmap visualizza \(\hat\alpha_1-\beta_1\).

set.seed(1)
n <- 3000; beta1 <- 1; sig <- 1
rho_seq <- seq(-.9,.9,length=19); b2_seq <- seq(-1.5,1.5,length=19)

grid <- expand.grid(rho=rho_seq, b2=b2_seq)

sim_once <- function(rho, beta2){
  X1 <- rnorm(n)
  X2 <- rho*X1 + sqrt(1-rho^2)*rnorm(n)   # Corr(X1,X2)=rho
  Y  <- beta1*X1 + beta2*X2 + rnorm(n,0,sig)
  coef(lm(Y ~ X1))[2] - beta1             # ritorna uno scalare, senza nome
}

grid$bias <- mapply(sim_once, grid$rho, grid$b2)  # <-- niente t(), niente [, "bias"]

ggplot(grid, aes(x=rho, y=b2, fill=bias)) +
  geom_tile() + scale_fill_gradient2() +
  labs(x=expression(rho[12]), y=expression(beta[2]), fill="Bias",
       title="Bias da variabile omessa al variare di ρ12 e β2")

Commento e interpretazione. L’asse orizzontale riporta la correlazione tra i regressori \(\rho_{12}=\mathrm{Corr}(X_1,X_2)\); l’asse verticale l’effetto dell’omessa \(X_2\) su \(Y\) (\(\beta_2\)). Il riempimento (“Bias”) è \(\hat\alpha_1-\beta_1\), cioè di quanto il coefficiente sul regressore incluso \(X_1\) sovrastima (valori > 0) o sottostima (valori < 0) il suo valore vero.

  • Segno del bias. Il bias è (in media) \(\beta_2\,\rho_{12}\). Quadranti:

    • \(\beta_2>0,\ \rho_{12}>0\)positivo (sovrastima);
    • \(\beta_2>0,\ \rho_{12}<0\)negativo (sottostima);
    • \(\beta_2<0,\ \rho_{12}>0\)negativo;
    • \(\beta_2<0,\ \rho_{12}<0\)positivo.

    Le bande di colore cambiano segno attraversando le linee \(\rho_{12}=0\) o \(\beta_2=0\), dove il bias si annulla (zona chiara).

  • Magnitudo. Aumenta con \(|\beta_2|\) e \(|\rho_{12}|\): gli angoli (|ρ|≈0.9, |β₂|≈1.5) mostrano i bias maggiori. La diagonale basso-sinistra → alto-destra evidenzia bias positivo; l’altra diagonale bias negativo.

  • Simmetria e teoria. La mappa è sostanzialmente simmetrica perché il bias teorico è \(\beta_2\rho_{12}\). Le piccole irregolarità dipendono dal rumore Monte Carlo della simulazione (con \(n\) finito).

  • Lettura pratica. Se anche solo una tra correlazione tra regressori (\(\rho_{12}\)) o effetto dell’omessa (\(\beta_2\)) è prossima a zero, il bias è trascurabile (aree chiare lungo gli assi). Quando entrambi sono lontani da zero, l’OLS nel modello omesso è fuorviante.

Riflessioni conclusive

L’errore di specificazione, e in particolare il bias da variabile omessa, ci ricorda che la regressione multipla non può essere considerata uno strumento neutro e affidabile per spiegare i fenomeni psicologici. Il suo valore è limitato a descrivere associazioni, ma il rischio di distorsione è sempre presente. Per costruire conoscenza solida, la psicologia deve andare oltre i modelli fenomenologici e puntare a modelli meccanicistici e computazionali, capaci di rappresentare i processi che danno origine ai dati (McElreath, 2020).

sessionInfo()
#> R version 4.5.1 (2025-06-13)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sequoia 15.6.1
#> 
#> Matrix products: default
#> BLAS:   /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib 
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
#> 
#> locale:
#> [1] C/UTF-8/C/C/C/C
#> 
#> time zone: Europe/Zagreb
#> tzcode source: internal
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#>  [1] cmdstanr_0.9.0        pillar_1.11.0         tinytable_0.11.0     
#>  [4] patchwork_1.3.1       ggdist_3.3.3          tidybayes_3.0.7      
#>  [7] bayesplot_1.13.0      ggplot2_3.5.2         reliabilitydiag_0.2.1
#> [10] priorsense_1.1.0      posterior_1.6.1       loo_2.8.0            
#> [13] rstan_2.32.7          StanHeaders_2.32.10   brms_2.22.0          
#> [16] Rcpp_1.1.0            sessioninfo_1.2.3     conflicted_1.2.0     
#> [19] janitor_2.2.1         matrixStats_1.5.0     modelr_0.1.11        
#> [22] tibble_3.3.0          dplyr_1.1.4           tidyr_1.3.1          
#> [25] rio_1.2.3             here_1.0.1           
#> 
#> loaded via a namespace (and not attached):
#>  [1] gridExtra_2.3        inline_0.3.21        sandwich_3.1-1      
#>  [4] rlang_1.1.6          magrittr_2.0.3       multcomp_1.4-28     
#>  [7] snakecase_0.11.1     compiler_4.5.1       systemfonts_1.2.3   
#> [10] vctrs_0.6.5          stringr_1.5.1        pkgconfig_2.0.3     
#> [13] arrayhelpers_1.1-0   fastmap_1.2.0        backports_1.5.0     
#> [16] labeling_0.4.3       rmarkdown_2.29       ps_1.9.1            
#> [19] ragg_1.4.0           purrr_1.1.0          xfun_0.52           
#> [22] cachem_1.1.0         jsonlite_2.0.0       broom_1.0.9         
#> [25] parallel_4.5.1       R6_2.6.1             stringi_1.8.7       
#> [28] RColorBrewer_1.1-3   lubridate_1.9.4      estimability_1.5.1  
#> [31] knitr_1.50           zoo_1.8-14           pacman_0.5.1        
#> [34] Matrix_1.7-3         splines_4.5.1        timechange_0.3.0    
#> [37] tidyselect_1.2.1     abind_1.4-8          yaml_2.3.10         
#> [40] codetools_0.2-20     curl_6.4.0           processx_3.8.6      
#> [43] pkgbuild_1.4.8       lattice_0.22-7       withr_3.0.2         
#> [46] bridgesampling_1.1-2 coda_0.19-4.1        evaluate_1.0.4      
#> [49] survival_3.8-3       RcppParallel_5.1.10  tensorA_0.36.2.1    
#> [52] checkmate_2.3.2      stats4_4.5.1         distributional_0.5.0
#> [55] generics_0.1.4       rprojroot_2.1.0      rstantools_2.4.0    
#> [58] scales_1.4.0         xtable_1.8-4         glue_1.8.0          
#> [61] emmeans_1.11.2       tools_4.5.1          mvtnorm_1.3-3       
#> [64] grid_4.5.1           QuickJSR_1.8.0       colorspace_2.1-1    
#> [67] nlme_3.1-168         cli_3.6.5            textshaping_1.0.1   
#> [70] svUnit_1.0.6         Brobdingnag_1.2-9    V8_6.0.5            
#> [73] gtable_0.3.6         digest_0.6.37        TH.data_1.1-3       
#> [76] htmlwidgets_1.6.4    farver_2.1.2         memoise_2.0.1       
#> [79] htmltools_0.5.8.1    lifecycle_1.0.4      MASS_7.3-65

Bibliografia

McElreath, R. (2020). Statistical rethinking: A Bayesian course with examples in R and Stan (2nd Edition). CRC Press.
Ramsey, J. B. (1969). Tests for specification errors in classical linear least-squares regression analysis. Journal of the Royal Statistical Society Series B: Statistical Methodology, 31(2), 350–371.