Appendice ^ — Crisi della replicazione

# Standard library imports
import os

# Third-party imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import arviz as az
import scipy.stats as stats
from scipy.special import expit  # Funzione logistica
from cmdstanpy import cmdstan_path, CmdStanModel

# Configuration
seed = sum(map(ord, "stan_poisson_regression"))
rng = np.random.default_rng(seed=seed)
az.style.use("arviz-darkgrid")
%config InlineBackend.figure_format = "retina"

# Define directories
home_directory = os.path.expanduser("~")
project_directory = f"{home_directory}/_repositories/psicometria"

# Print project directory to verify
print(f"Project directory: {project_directory}")
Project directory: /Users/corradocaudek/_repositories/psicometria

Capitolo 116

Esercizio 116.1

Le argomentazioni di Gelman & Brown (2024) mettono in luce fattori come la selezione dei confronti, la variabilità degli effetti tra i soggetti, l’influenza delle condizioni sperimentali, e l’assenza di un chiaro meccanismo d’azione. Questi stessi fattori potrebbero essere stati determinanti nella mancata replicazione dello studio di Karataş & Cutright (2023). La combinazione di una possibile sovrainterpretazione dei dati iniziali, la presenza di variabili non controllate, e la mancanza di un chiaro modello teorico per spiegare i risultati originali potrebbe aver portato a risultati che non si sono confermati in studi successivi.

Capitolo 119

Esercizio 119.1

Il seguente codice è scritto in R. Può essere facilmente convertito in Python.

set.seed(42)  # Imposta un seed per la riproducibilità

n_sim <- 10000  # Numero di simulazioni
n_per_group <- 20  # Campioni per gruppo
sd_max_fp <- 10  # Deviazione standard scelta per massimizzare i falsi positivi

# Vettori per conservare i risultati
significant_results <- numeric()
effect_sizes <- numeric()

for (i in 1:n_sim) {
  # Genera due gruppi con media 0 e sd massimizzata
  group1 <- rnorm(n_per_group, mean = 0, sd = sd_max_fp)
  group2 <- rnorm(n_per_group, mean = 0, sd = sd_max_fp)
  
  # Esegui il t-test
  t_test <- t.test(group1, group2)
  
  # Calcola l'effect size (d di Cohen)
  pooled_sd <- sqrt(((n_per_group - 1) * var(group1) + (n_per_group - 1) * var(group2)) / 
                      (2 * n_per_group - 2))
  cohen_d <- abs(mean(group1) - mean(group2)) / pooled_sd
  
  # Conserva i risultati solo se significativi
  if (t_test$p.value < 0.05) {
    significant_results <- c(significant_results, t_test$p.value)
    effect_sizes <- c(effect_sizes, cohen_d)
  }
}

# Calcola la proporzione di risultati significativi
proportion_significant <- length(significant_results) / n_sim

# Calcola l'effect size medio dei risultati significativi
mean_effect_size_significant <- mean(effect_sizes)

# Stampa i risultati
cat("Proporzione di risultati statisticamente significativi:", proportion_significant, "\n")
cat("Effect size medio dei risultati significativi:", mean_effect_size_significant, "\n")