Menu
CoddyTech

Valores p

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

El valor p convierte las permutaciones en un número: la proporción de diferencias ficticias al menos tan grandes como la real, en cualquiera de los dos sentidos.

Las 1000 diferencias permutadas del estudio de fuentes, representadas en un histograma. Las barras en 6,6 segundos o más a ambos lados son rojas: 39 permutaciones, y una etiqueta indica p = 39 / 1000 = 0.039

En el código, para el estudio de fuentes:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # el bucle de la lección anterior
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

Esto imprime 0.039. np.abs cuenta una diferencia de -7 como si fuera de 7: la pregunta es si las fuentes difieren en absoluto.

Por debajo del nivel de significación, a menudo 0.05, el azar es una explicación poco convincente para una mejora de fuente o de modelo. No es una prueba: 4 de cada 100 mezclas aún la produjeron.

challenge icon

Desafío

Intermedio

Una granja riega las fresas por la mañana o por la tarde. El código inicial divide strawberries.csv en morning y evening, enumera columns, lee level y define shuffled_diffs.

  1. Para cada columna, calcula la diferencia real (media de la tarde menos media de la mañana), las diferencias aleatorias (primero la mañana) y el valor p.
  2. Imprime una línea por columna como se muestra a continuación (diferencia con 2 decimales, p con 3): differs cuando p sea menor que level.
  3. Cuenta las que difieren.

Otra granja, nivel 0.05:

berries: difference -5.4, p = 0.009, differs
weight_g: difference 0.2, p = 1.0, could be chance
sweetness_brix: difference 0.46, p = 0.022, differs
leaf_spots: difference 0.6, p = 0.397, could be chance
Columns that differ: 2 of 4

Pruébalo tú mismo

import numpy as np
import pandas as pd


# Devuelve las diferencias mezcladas de una prueba de permutación (el bucle de la lección 43): media simulada de b menos media simulada de a
def shuffled_diffs(a, b, shuffles, rng):
    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())
    return np.array(diffs)


beds = pd.read_csv("strawberries.csv")
morning = beds[beds["watering"] == "morning"]
evening = beds[beds["watering"] == "evening"]
columns = ["berries", "weight_g", "sweetness_brix", "leaf_spots"]
level = float(input())
# No cambies las líneas de abajo
rng = np.random.default_rng(21)
shuffles = 1000

# Escribe tu código abajo
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