Menu
CoddyTech

La prueba t

Parte de la sección Estadística para ML del Journey de Machine Learning de Coddy. Lección 45 de 64.

Antes de las computadoras, la estadística tenía un atajo: la prueba t. Una fórmula convierte las medias, las dispersiones y los tamaños de los grupos en un valor p de una sola vez:

from scipy import stats

result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))

Para el estudio de fuentes, esto imprime 0.031 y -2.61. Las 1000 permutaciones dieron 0.039: cercano, como de costumbre.

Las 1000 diferencias permutadas del estudio de fuentes como un histograma pálido, con la curva en forma de campana de la prueba t superpuesta y una línea roja discontinua en la diferencia real de -6.6. La leyenda indica p = 0.039 para las permutaciones y 0.031 para la fórmula

El valor t es la diferencia en errores estándar; su signo solo indica qué grupo apareció primero. La fórmula supone que los datos tienen forma de campana, así que, con grupos pequeños y sesgados, confía en las permutaciones.

También comprueba si un modelo realmente supera a otro.

challenge icon

Desafío

Intermedio

Un fabricante de pintura cronometró el secado de tres acabados. El código inicial coloca los minutos de cada acabado en times, enumera tres pairs, define permutation_p(a, b) y lee level.

  1. Imprime el valor p de la prueba t para mate frente a satinado junto al de las permutaciones.
  2. Prueba cada par, con el primer acabado primero, e imprime el que tenga el valor p más pequeño.
  3. Cuenta los pares por debajo de level.

Redondea los valores p a 3 decimales. Otro fabricante, nivel 0.05:

matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3

Pruébalo tú mismo

import numpy as np
import pandas as pd
from scipy import stats


# La prueba de permutación de las dos lecciones anteriores: devuelve su valor p para a frente a b
def permutation_p(a, b, shuffles=1000, seed=0):
    rng = np.random.default_rng(seed)
    pooled = np.concatenate([a, b])
    diffs = []
    for i in range(shuffles):
        shuffled = rng.permutation(pooled)
        diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
    real = b.mean() - a.mean()
    return (np.abs(np.array(diffs)) >= np.abs(real)).mean()


paint = pd.read_csv("paint.csv")
times = {
    "matte": paint[paint["finish"] == "matte"]["minutes"],
    "satin": paint[paint["finish"] == "satin"]["minutes"],
    "gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Estadística para ML

Practica por tu cuenta: Compilador de Python online