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.
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.
Desafío
IntermedioUna 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.
- 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.
- Imprime una línea por columna como se muestra a continuación (diferencia con 2 decimales, p con 3):
differscuando p sea menor quelevel. - 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 4Prué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
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
1Centro y dispersión
Media y medianaPercentiles y cuartilesVarianza y desviación estándar¿Muestra o población?El valor más frecuenteRepaso: tiempos de entrega4Muestras y poblaciones
Población y muestraLas medias muestrales varíanLa distribución muestralMuestras más grandes, menos ruidoRepaso: Encuestar a un pueblo7Líneas de tendencia
ResiduosAjuste por mínimos cuadradosTrazar el ajustePredecir con una línea¿Qué tan bueno es el ajuste?Repaso: horas de práctica10Codificación de categorías
Categorías como númerosCodificación one-hotAgrupación de números en intervalosRepaso: anuncios de autos2Distribuciones
Histogramas de densidadFormas de los datosCurva normalRegla del 68-95-99,7Puntuaciones zRepaso: duración de la batería5Valores atípicos
Diagramas de cajaLa regla del RICLa regla del valor ZTratamiento de valores atípicosRepaso: fallos de los sensores8Comparación de grupos
Diagramas de caja por grupoDiferencia de medias¿Podría ser azar?Valores pLa prueba tRepaso: prueba A/B3Probabilidad mediante simulación
La probabilidad como frecuenciaLa ley de los grandes númerosSuma de dadosValor esperadoProbabilidad condicionalRepaso: probabilidades del puesto de dados6Relaciones
Lectura de diagramas de dispersiónCorrelaciónMatriz de correlaciónMapas de calor de correlaciónCorrelación no es causalidadRepaso: helado y sol9Escalado de características
Por qué escalar las característicasEscalado mín-máxEstandarizaciónStandardScalerRepaso: compañeros de escaladaPractica por tu cuenta: Compilador de Python online