Prueba F en Python

Preet Sanghavi 21 junio 2023
  1. Estadísticas F y valores P
  2. Valor F en ANOVA
Prueba F en Python

Este tutorial trata sobre estadísticas F, distribución F y cómo realizar pruebas F en sus datos usando Python.

Una estadística F es un número obtenido después de una prueba ANOVA o un análisis de regresión para determinar si las medias de dos poblaciones difieren sustancialmente. Es comparable a una estadística T de una prueba T, y realizar una prueba T le dirá si una sola variable es estadísticamente significativa, pero una prueba F le dirá si un conjunto de variables es estadísticamente significativa.

¿Qué significa estadísticamente significativo?

Si tiene un resultado sustancial, probablemente no haya sido una coincidencia que haya obtenido esos resultados. Si los resultados de su prueba no son estadísticamente significativos, debe descartarlos porque no son efectivos y no puede rechazar la hipótesis nula.

Estadísticas F y valores P

Debe considerar la estadística F y el valor p al determinar si sus resultados generales son significativos.

¿Por qué? Un resultado significativo no implica necesariamente que todas sus variables también sean significativas. En pocas palabras, la estadística implica comparar el efecto combinado de todas las variables.

Valor F en ANOVA

Una prueba ANOVA es un método de análisis estadístico que evalúa las diferencias medias basadas en la varianza para ver si hay una diferencia estadísticamente importante entre dos o más grupos categóricos.

ANOVA divide la variable independiente en dos o más grupos, otro componente importante. Por ejemplo, se puede predecir que uno o más grupos tendrán un impacto en la variable dependiente, mientras que otro grupo podría emplearse como grupo de control y no se prevé que tenga un impacto.

De una manera, en ANOVA, el valor F actúa como una herramienta que ayuda a responder la pregunta de si la varianza entre las medias de dos estadísticas o poblaciones es significativamente diferente. El valor de P, que es la probabilidad de obtener un resultado al menos tan extremo como el observado, dado que la hipótesis nula es cierta, está igualmente determinado por el valor de F en la prueba ANOVA.

La estadística de prueba conocida como relación f se puede calcular de la siguiente manera:

$$ F = \frac{Var(X)}{Var(Y)} $$

Para realizar la siguiente prueba usando Python, podemos usar el módulo SciPy en Python.

SciPy ofrece algoritmos para muchos tipos de problemas, que incluyen optimización, integración, interpolación, problemas de valores propios, ecuaciones algebraicas, ecuaciones diferenciales, estadísticas y muchos otros.

Para instalar scipy, ejecute este comando:

pip install scipy

Puede usar la siguiente clase en el módulo scipy.stats. La clase stats en scipy contiene todas las funciones y clases necesarias para realizar operaciones estadísticas.

>>> from scipy.stats import f

El <span style="color: blue;">scipy.stats.f</span> tiene un método CDF (función de distribución acumulativa). El uso del valor p se puede calcular para las estadísticas dadas.

Por lo tanto, puede determinar si rechaza o acepta la hipótesis NULA para el nivel alfa dado.

Considere el siguiente ejemplo:

Importación de los módulos y creación de variables.

from scipy.stats import f
import numpy as np

a = np.array([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
b = np.array([1, 3, -1, 2, 1, 5, -1, 6, -1, 2])
alpha = 0.05  # you can set to level.

La fórmula para calcular el valor de F es Var(X)/Var(Y).

# calculating F value.
F = a.var() / b.var()

Como F es una distribución:

df1 = len(a) - 1
df2 = len(b) - 1

La clase scipy.stats.f contiene la función que podemos usar para calcular el valor p y los valores críticos para las estadísticas dadas.

# Fetching p-value.
p_value = f.cdf(F, df1, df2)
p_value > alpha

Del código anterior, podemos obtener el valor p calculado usando estadísticas F; rechazaremos la hipótesis NULA, que es que la varianza de a es igual a la varianza de b.

Nota: la prueba F es bastante sensible a la no normalidad de las estadísticas dadas.

Suponga que no está seguro de que los datos proporcionados reflejen la normalidad. Una alternativa más robusta a la prueba F es la prueba de Bartlett o la prueba de Levene.

Scipy también proporciona la posibilidad de realizar estas pruebas.

Prueba de Bartlett:

>>> from scipy.stats import bartlett
>>> x = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99]
>>> y = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05]
>>> z = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98]
>>> stat, p = bartlett(x, y, z)
>>> p
1.1254782518834628e-05

El valor p es muy pequeño; podemos decir que la población dada no tiene la misma varianza.

Esto se debe a la diferencia en las varianzas.

>>> [np.var(x, ddof=1) for x in [x, y, z]]
[0.007054444444444413, 0.13073888888888888, 0.008890000000000002]

Prueba de Levene:

>>> from scipy.stats import levene
>>> x = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99]
>>> y = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05]
>>> z = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98]
>>> stat, p = levene(x, y, z)
>>> p
0.002431505967249681

El valor p es muy pequeño; podemos decir que la población dada no tiene la misma varianza.

>>> [np.var(x, ddof=1) for x in [x, y, z]]
[0.007054444444444413, 0.13073888888888888, 0.008890000000000002]
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - Python Statistics