You are on page 1of 7

Bioestadística – Laboratorio

MBIO 3203: Laboratorio (1 crédito)


Asistente graduado: Santiago Herrera Álvarez
Profesor del Curso: Andrew J. Crawford, Profesor Asociado
Monitora: María José Páramo
Departamento de Ciencias Biológicas, Universidad de los Andes
Semestre 2017-10

Pruebas de normalidad, transformaciones y pruebas no-paramétricas


Abril 21 de 2017

Todas las pruebas que hemos aprendido hasta ahora para probar hipótesis basadas en medidas de
tendencia central en una población, asumen que la variable numérica con la que estamos trabajando
tiene una distribución normal. Sin embargo, este supuesto no siempre se cumple. Para hacer pruebas
de normalidad de los datos hay dos opciones, una serie de métodos gráficos y una prueba paramétrica
formal.

Uno de los métodos gráficos que podemos usar para verificar si una variable sigue o no una
distribución normal son los histogramas. Como sabemos, la distribución normal es simétrica y tiene
forma de campana, por lo tanto podemos usar un histograma de la distribución de frecuencias para ver
si los datos presentan o no esta forma. Sin embargo, uno no debe esperar una forma de campana
perfecta, pues algunas veces a pesar de que la muestra haya sido tomada de una población con
distribución normal esta forma no se observa.

Veamos un ejemplo:

Creemos seis vectores (a-f) que contengan una muestra al azar de números provenientes de una
distribución normal con media 0 y desviación estándar 1. Además, vamos a escoger diferentes
tamaños de muestra y una réplica para cada tamaño:

a=rnorm(10,0,1)
b=rnorm(10,0,1)
c=rnorm(20,0,1)
d=rnorm(20,0,1)
e=rnorm(50,0,1)
f=rnorm(50,0,1)

Hagamos un histograma para comparar la forma de las distribuciones de estos vectores:

par(mfrow=c(3,2))
hist(a,breaks=8,col="royalblue2",main="n=10")
hist(b,breaks=8,col="royalblue2",main="n=10")
hist(c,breaks=8,col="royalblue2",main="n=20")
hist(d,breaks=8,col="royalblue2",main="n=20")
hist(e,breaks=8,col="royalblue2",main="n=50")
hist(f,breaks=8,col="royalblue2",main="n=50")
n=10 n=10

2.0

3.0
Frequency

Frequency
1.0

1.5
0.0

0.0
-1.5 -1.0 -0.5 0.0 0.5 -2.0 -1.0 0.0 0.5 1.0 1.5

a b

n=20 n=20
0 1 2 3 4

6
Frequency

Frequency

4
2
0
-3 -2 -1 0 1 2 -2 -1 0 1 2

c d

n=50 n=50
12

12
Frequency

Frequency
8

8
4

4
0

-2 -1 0 1 2 -2 -1 0 1 2

e f

Como podemos observar, a pesar de que todas las muestras provienen de una distribución normal,
no siempre observamos la forma de campana. Sin embrago, a medida que aumentamos el tamaño de la
muestra podemos aproximarnos cada vez más a esta forma. Es importante aclarar que lo que buscamos
no es la forma de campana, sino una desviación muy extrema de este patrón.

La otra forma gráfica de ver si una variable es normal son las gráficas de comparación de cuantiles,
también llamados “Q-Q plots” (Normal quantile plots) o “Normal Q-Q plots”. Estos diagramas
comparan cada una de las observaciones con el cuantil en el cual deberían encontrarse según la
desviación estándar del conjunto de datos. En ‘R’ el comando que usaremos para hacer este tipo de
gráficas es qqplot(). Para ver un ejemplo, usemos los vectores que ya creamos:

par(mfrow=c(3,2))
qqnorm(a,col="royalblue2",main="n=10")
qqnorm(b,col="royalblue2",main="n=10")
qqnorm(c,col="royalblue2",main="n=20")
qqnorm(d,col="royalblue2",main="n=20")
qqnorm(e,col="royalblue2",main="n=50")
qqnorm(f,col="royalblue2",main="n=50")
n=10 n=10

Sample Quantiles

Sample Quantiles

1.5
0 1

0.0
-2

-1.5
-1.5 -0.5 0.0 0.5 1.0 1.5 -1.5 -0.5 0.0 0.5 1.0 1.5

Theoretical Quantiles Theoretical Quantiles

n=20 n=20
Sample Quantiles

Sample Quantiles

1.5
-1 0 1 2

-1.5 0.0
-2 -1 0 1 2 -2 -1 0 1 2

Theoretical Quantiles Theoretical Quantiles

n=50 n=50
Sample Quantiles

Sample Quantiles

2
1

0
-1

-2
-3

-3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3

Theoretical Quantiles Theoretical Quantiles



En este caso, esperaremos que para una variable normal las líneas sigan una línea recta. Al igual
que en el ejemplo anterior, incluso cuando las muestras son obtenidas a partir de una distribución
normal, no se puede esperar una línea perfecta. De la misma forma, lo que buscamos es desviaciones
muy extremas del patrón como saltos muy grandes en la distribución de los puntos, o líneas curvas. Sí
por ejemplo tomamos una muestra aleatoria de números de una distribución exponencial y realizamos
una gráfica de comparación de cuantiles, observaríamos lo siguiente:

exp=rexp(50,1)
qqnorm(exp,col="royalblue2")

Normal Q-Q Plot


3.0
2.5
2.0
Sample Quantiles

1.5
1.0
0.5
0.0

-2 -1 0 1 2

Theoretical Quantiles

Otra opción que tenemos, es hacer una prueba formal con la cual podemos probar nuestra hipótesis
de normalidad. La prueba que nos permite hacer esto es la prueba de Shapiro-Wilk cuyo comando en
‘R’ es shapiro.test() en el que debemos especificar el conjunto de datos al cual queremos
aplicar la prueba. Primero, como siempre debemos plantear las hipótesis:

H0 Los datos fueron muestreados de una población que tiene una distribución normal.
Los datos siguen una distribución normal.

Ha Los datos fueron muestreados de una población que no tiene una distribución normal.
Los datos no siguen una distribución normal.

Si probamos la normalidad para una muestra que sabemos que es normal (vector “a”) tenemos que:

shapiro.test(a)

Shapiro-Wilk normality test

data: a
W = 0.9625, p-value = 0.8142

Como podemos ver, nuestro Valor-P > 0.05, por lo tanto no rechazamos la hipótesis nula y
concluimos que nuestros datos siguen una distribución normal.

Sí por el contrario aplicamos la prueba a los datos que fueron obtenidos a partir de la distribución
exponencial (vector “exp”) tenemos que:

shapiro.test(exp)

Shapiro-Wilk normality test

data: exp
W = 0.8094, p-value = 1.45e-06

En este caso, como era de esperarse el Valor-P < 0.05, por lo tanto rechazamos la hipótesis nula y
concluimos que nuestros datos no siguen una distribución normal.

Ahora bien, cuando ya hemos probado que los datos no son normales tenemos tres opciones como
hemos visto anteriormente:

1. Ignorar los supuestos:

En algunas situaciones los supuestos de las pruebas se pueden ignorar y el resultado va a depender
de que tan robusta sea la prueba a estos supuestos. Como vimos con el ejercicio de simulación de la
clase pasada, una prueba estadística es robusta cuando “la respuesta” no es sensible a la violación de
los supuestos.

Tal como lo probamos, la prueba t es bastante robusta y por lo tanto podremos aplicarla incluso
cuando nuestra variable de análisis no sigue una distribución normal. Sin embrago, podemos disminuir
el error con tamaños muestréales grandes, en los que la distribución de frecuencias comienza a
parecerse a una distribución normal.

No hay un tamaño de muestra establecido a partir del cual se pueda ignorar este supuesto. Lo que
se puede hacer es observar la similaridad en la forma de las dos distribuciones que estemos
comparando. Entre más parecidas sean las distribuciones, incluso cuando se desvían un poco de la
distribución normal, vamos a tener un menor error en la respuesta de la prueba. Mientras que si las dos
distribuciones tienen una forma muy diferente, la prueba empieza a ser mucho más sensible.

2. Transformar los datos:

Otra de las opciones que tenemos cuando nuestros datos no siguen una distribución normal es usar
algún tipo de transformación, con el fin de hacerlos normales y así poder usar las pruebas paramétricas
que ya hemos aprendido. Existen diferentes tipos de transformaciones pero algunas de las más
comunes son:

Transformación logarítmica, es la transformación más común en biología y consiste en convertir


los datos sacando el logaritmo natural (ln) de cada una de las medidas. Otras transformaciones son
Transformación arcoseno y Transformación raíz cuadrada.

En la línea de comandos de ‘R’ hubiéramos podido usar el comando ‘log’ para crear la nueva
variable con la transformación, de la siguiente manera:

Datos$Trans1<-log(Datos$Sp1)
> Datos
Sp1 Sp2 Sp3 Trans1
1 0.25 0.47 1.25 -1.3862944
2 0.22 0.44 2.26 -1.5141277
3 0.19 0.42 1.48 -1.6607312
4 0.24 0.68 1.11 -1.4271164
5 1.80 0.47 1.08 0.5877867
6 0.27 0.98 0.99 -1.3093333
7 0.25 1.55 1.15 -1.3862944
8 0.18 2.47 0.88 -1.7147984
9 0.10 1.22 1.07 -2.3025851

Los comandos que usamos en ‘R’ para hacer las transformaciones vistas son:

Logarítmica log
Arcoseno asin
Raíz cuadrada sqrt

Una vez realizadas las transformaciones debemos probar de nuevo la normalidad para las nuevas
variables calculadas. No olviden que lo que hacemos con la transformación es buscar que nuestra
variable se ajuste a una distribución normal y así poder aplicar una prueba paramétrica.

3. Realizar una prueba no paramétrica

Sí después de realizar todas las transformaciones no logramos que nuestra variable se ajuste a una
distribución normal y por lo tanto no cumplimos con los supuestos para una prueba paramétrica, la
última opción es realizar una prueba no paramétrica. Las pruebas no paramétricas son métodos que
permiten hacer inferencias y probar hipótesis que no asumen normalidad, sin embargo deben ser
consideradas como la última opción debido a que las pruebas paramétricas son siempre más robustas.

La prueba no paramétrica que nos permite comparar medias es la prueba de Wilcoxon Signed
Rank. Al igual que la prueba paramétrica (prueba t), esta prueba será diferente si tenemos datos
pareados o independientes.

Como ejemplo, supongamos que queremos probar si las concentraciones de epinefrina son iguales
en la especie 1 y la especie 2. En este caso
Recuerden que se debe probar la normalidad para las dos muestras por separado y en el caso de que
haya que hacer transformaciones, se debe aplicar la misma transformación en ambas muestras.

H0 La concentración de epinefrina es igual en ambas especies


µconcentración en sp1 = µconcentración en sp2

Ha La concentración de epinefrina no es igual en ambas especies


µconcentración en sp1 ≠ µconcentración en sp2

Recuerden que el diseño independiente quiere decir que las muestras son independientes entre sí y
por lo tanto es muy importante que cada variable este en una columna del marco de datos. Es decir que
hay que hacer modificaciones en la tabla de datos que teníamos de modo que quede de la siguiente
forma:

Concentración Especie
0.25 sp1
0.22 sp1
0.19 sp1
0.24 sp1
1.8 sp1
0.27 sp1
0.25 sp1
0.18 sp1
0.1 sp1
0.47 sp2
0.44 sp2
0.42 sp2
0.68 sp2
0.47 sp2
0.98 sp2
1.55 sp2
2.47 sp2
1.22 sp2

Una vez tenemos el marco de datos, usamos el siguiente comando:

wilcox.test(data=datos2,concentracion~especie,
alternative="two.sided")

Wilcoxon rank sum test with continuity correction

data: concentracion by especie


W = 8, p-value = 0.004675
alternative hypothesis: true location shift is not equal to
0

Como el Valor-P < 0.05 rechazamos nuestra hipótesis nula y podemos decir que hay diferencias
en la concentración de epinefrina entre las especies 1 y 2.

Si por el contrario, lo que queremos probar es que la concentración de los individuos de una misma
especie cambia a medida que estos van madurando “Datos_normalidad3.txt” vamos a tener un diseño
pareado ya que cada variable fue medida en el mismo individuo.

Recuerde que si estuviéramos siguiendo todos los pasos en ese ejemplo deberíamos probar
normalidad. En el caso de un diseño pareado, la normalidad se prueba para la diferencia de las dos
muestras. Sin embrago, las transformaciones se hacen sobre las variables originales y para el comando
en ‘R’ se introducen las dos variables por separado.

Como se pueden dar cuenta en este caso la tabla es diferente, pues cada medida es una variable
diferente. Nuestras hipótesis son:

H0 La concentración de epinefrina es igual en juveniles y adultos


µjuveniles = µadultos

Ha La concentración de epinefrina no es igual en juveniles y adultos


µjuveniles ≠ µadultos

El comando que usaríamos en este caso:

wilcox.test(Datos_pareada$juveniles,Datos_pareda$adultos,paired=T)

Wilcoxon signed rank test with continuity correction

data: datos3$juveniles and datos3$adultos


V = 42.5, p-value = 0.02077
alternative hypothesis: true location shift is not equal to 0

Como el Valor-P < 0.05 rechazamos la hipótesis nula y podemos decir que la concentración de
epinefrina en esta especie cambia en los diferentes estadios de la vida del individuo.