import pandas as pd
import numpy as np
# =============================================================================
# SIMULADOR DE ESTUDIO DE REPETIBILIDAD - MÉTODO GERBER (GRASA EN LECHE)
# =============================================================================
# Diseño: 5 analistas x 3 muestras x 3 repeticiones = 45 análisis
#
# MUESTRAS:
# - Muestra A (baja): valor de referencia 3,4% — leche de verano, alimentación en pasto
# - Muestra B (media): valor de referencia 3,8% — valor típico anual
# - Muestra C (alta): valor de referencia 4,5% — leche de invierno, estabulación
#
# PERFILES DE ANALISTAS:
# - Analista 1 (referencia, el mejor): σ = 0,04%, sin sesgo.
# Técnica depurada, lectura correcta del butirómetro, temperatura de baño estable.
#
# - Analista 2 (correcto): σ = 0,08%, sin sesgo.
# Buen nivel general, pequeña variación natural de técnica.
#
# - Analista 3 (correcto con sesgo leve): σ = 0,12%, sesgo = +0,10%.
# Técnica algo menos consistente; tiende a redondear ligeramente al alza
# en la lectura de la columna de grasa.
#
# - Analista 4 (sesgo sistemático): σ = 0,06%, sesgo = -0,35%.
# Resultados consistentemente bajos. Error típico de lectura del menisco
# del butirómetro: lee el borde superior en lugar del borde inferior,
# o posición de ojos incorrecta. Alta repetibilidad pero resultado
# sistemáticamente alejado del valor de referencia.
#
# - Analista 5 (alta variabilidad): σ = 0,25%, sin sesgo.
# Técnica irregular: temperatura del baño maría inestable, tiempo de
# centrifugación variable, dificultad para homogeneizar bien la muestra.
# Los resultados oscilan alrededor del valor de referencia pero con mucha dispersión.
# =============================================================================
np.random.seed(42) # Para reproducibilidad del dataset generado
# --- Definición de muestras ---
muestras = {
'A_baja': 3.4, # leche de verano
'B_media': 3.8, # valor típico anual
'C_alta': 4.5, # leche de invierno
}
# --- Definición de analistas (sesgo, desviación típica) ---
analistas = {
'Analista_1': {'sesgo': 0.00, 'sigma': 0.04},
'Analista_2': {'sesgo': 0.00, 'sigma': 0.08},
'Analista_3': {'sesgo': +0.10, 'sigma': 0.12},
'Analista_4': {'sesgo': -0.35, 'sigma': 0.06},
'Analista_5': {'sesgo': 0.00, 'sigma': 0.25},
}
repeticiones = 3
# --- Generación del dataset ---
filas = []
for analista, params in analistas.items():
for muestra, valor_referencia in muestras.items():
for rep in range(1, repeticiones + 1):
resultado = (
valor_referencia
+ params['sesgo']
+ np.random.normal(0, params['sigma'])
)
filas.append({
'analista': analista,
'muestra': muestra,
'valor_referencia': valor_referencia,
'repeticion': rep,
'resultado': round(resultado, 2),
})
df = pd.DataFrame(filas)
# --- Exportar ---
nombre_fichero = 'datos/grr_gerber.csv'
df.to_csv(nombre_fichero, index=False, sep=';', decimal=',', encoding='ISO-8859-1')
print(f"Dataset generado: {nombre_fichero}")
print(f"Dimensiones: {df.shape[0]} filas x {df.shape[1]} columnas")