Está en la página 1de 11

PALEONTOLOGÍA 2020-II

LABORATORIO 5
Este laboratorio ha sido tomado y modificado de la guía creada por Mark A. Bell
(Departamento de Ciencias de la Tierra, University College London).
Pruebas estadísticas III - Continuación de los modelos estadísticos
Resumen
Al final de esta segunda práctica de laboratorio relacionada con el modelado estadístico,
se sentirá como en casa trabajando en el entorno R y se sentirá cómodo cargando sus
propios datos y realizando análisis estadísticos básicos que van desde pruebas de una y
dos muestras hasta correlaciones y modelado. Por lo menos, la intención principal hasta
ahora ha sido convencer a cualquiera que haya sido cauteloso acerca de aprender el arte
de la programación de que no es tan complicado o aterrador como alguna vez pensó, y
que no se necesita mucho de trabajo para realizar las tareas más básicas.
Introducción
Previamente en este conjunto de laboratorios enfocados en el uso de R para realizar
pruebas estadísticas se introdujo el tema de modelos estadísticos y cómo aplicar un
modelo lineal simple a dos variables continuas, una regresión lineal. Como se mencionó
anteriormente, el modelado estadístico es un tema amplio que fácilmente podría llenar
los artículos de los próximos dos años. Por lo tanto, este último laboratorio sobre métodos
estadísticos cubrirá otras dos técnicas de modelado estadístico de uso común, la regresión
lineal múltiple y el análisis de varianza (ANOVA).
Regresión lineal múltiple
En el ejemplo de regresión, estábamos interesados en examinar la relación entre nuestra
variable dependiente y una sola variable independiente. Sin embargo, puede haber
ocasiones en las que tenga más de una variable independiente que desee incluir en su
modelo; aquí necesitará una regresión lineal múltiple.
Para ilustrar cómo implementar una regresión lineal múltiple, recurriremos al conjunto de
datos extrínsecos que usamos regularmente a lo largo de esta serie. El primer paso, como
siempre, es cargar el archivo en el entorno R creando la nueva variable extrínseca:

extrinsic <- read.table(file="extrinsic.txt", header=TRUE)

En este caso, queremos saber si existe una relación entre las variables que representan la
cantidad de registro de roca muestreado (Rock.area_sum), la uniformidad del muestreo
ambiental (uniformidad) y las fluctuaciones ambientales (temperatura y CO2) con una
medida de muestra- diversidad corregida. Esta última será la variable dependiente en este
estudio y se ha calculado utilizando el método de submuestreo de quórum de accionistas
(SQS) de Alroy (2010).
Si abre todo el conjunto de datos extrínsecos, verá que faltan entradas en algunos lugares.
Una solución rápida y sencilla para este problema es eliminar el intervalo de tiempo más
reciente, que en este caso es la última fila del conjunto de datos que tiene 51 filas, por lo
que simplemente podemos solicitar las filas 1 a 50 y colocarlo en el nueva variable
extrinsicLM:
extrinsicLM <- extrinsic[c(1:50),]
En este caso, la selección de filas específicas funciona con este conjunto de datos; sin
embargo, es más probable que las lagunas en un conjunto de datos no estén espaciadas
de manera tan uniforme. Afortunadamente, hay una manera rápida de retener todas las
filas con entradas completas para las columnas que le interesan. La función
complete.cases, utilizada de la siguiente manera, devolverá una matriz que detalla qué
filas están completas (marcadas como VERDADERAS) y las que están no (marcado como
FALSO):
complete.cases(extrinsic)

Recuerde que el formato para seleccionar una sección de un marco de datos es con la fila
seguida de la columna, como el marco de datos [fila, columna]. Entonces, para obtener las
filas que están completas, podemos colocar esta declaración lógica en la parte de la fila
del marco de datos:
extrinsicLM <- extrinsic[complete.cases(extrinsic), ]

Para aclarar esta operación: el comando R complete.cases (complete) convierte sus datos
en una matriz que contiene valores que son VERDADEROS o FALSOS, y devuelve solo las
filas marcadas como VERDADERAS. Aparte, si tiene un conjunto de datos mucho más
grande y necesita saber dónde están los datos que faltan y, por lo tanto, desea que R
devuelva las filas de un conjunto de datos donde faltan datos, puede agregar un signo de
exclamación "!" En
delante del comando -! complete.cases - o agregue una declaración condicional lógica
como:
extrinsic[complete.cases(extrinsic) == FALSE,]

Si ejecuta esto, verá que R devolverá las filas con los datos faltantes; en este caso hay tres
filas de este tipo.
De todos modos, volviendo al camino, ahora que estamos seleccionando las filas que
queremos, también podemos usar el cambio para restringir los datos solo a las columnas
que queremos examinar. Esto no es necesario, pero puede ser útil cuando se trabaja con
grandes conjuntos de datos y se grafican. Así que ahora crearemos una nueva variable,
extrinsicLM, que contiene solo las filas y columnas que necesitamos para este análisis,
usando lo siguiente:

extrinsicLM <- extrinsic[complete.cases(extrinsic), c("SQS",

"evenness", "Temperature", "CO2", "Rock.area_sum")]

Como siempre, primero grafique sus datos para tener una idea de cualquier problema con
el conjunto de datos, como valores atípicos, o si hay alguna tendencia dentro del conjunto
de datos. Una función útil para crear múltiples diagramas de dispersión cuando tiene
muchas variables en su conjunto de datos son los pares; esto creará gráficos bivariados
para todos los pares de variables que le interesan:
pairs(extrinsicLM)

Como ya hemos restringido el archivo a las variables que queremos, esto lo convierte en
una cuadrícula de gráficos de dispersión de cinco por cinco fácil de leer (Figura 5.1). De
esto se puede ver que, al comparar nuestro valor de diversidad (primera columna, SQS)
con nuestras otras variables, la variable de uniformidad a primera vista parece mostrar
una relación positiva mientras que otras combinaciones muestran poca relación, como en
el caso de SQS y Temperature. o una relación no lineal como en Temperatura y CO2.
Correcto, pasando al análisis, el objetivo final de una regresión múltiple es determinar qué
combinación de variables independientes se puede utilizar mejor para predecir nuestra
variable dependiente, aquí una medida de diversidad corregida por muestra. Entonces, el
primer paso es incluir todas las variables en las fórmulas del modelo. Aquí podemos usar
la misma función que usamos para la regresión lineal, lm, y para que sea más fácil de
seguir, podemos usar los nombres de columna que deseamos incluir, siempre que le
digamos a R dónde están los datos usando los datos del argumento:

model.lm <- lm(SQS ~ evenness + Temperature + CO2 +

Rock.area_sum, data = extrinsicLM)

El resumen de la función se puede utilizar para obtener una descripción de este modelo:

summary(model.lm)
Call:
Residuals:
Min 1Q
-121.334 -47.620
Coefficients:
Median 3Q Max
-8.036 44.181 182.580

lm(formula = SQS ~ evenness + Temperature + CO2 +


Rock.area_sum,

data = extrinsicLM, na.action = na.exclude)

(Intercept) -1419.7219 369.0615 -3.847 0.000391


***

evenness 2424.6739 535.0964 4.531 4.62e-05

***

Temperature
CO2
Rock.area_sum
---
Estimate Std. Error
-4.9951 7.5796
5.0093 3.1368
-0.1992 0.1074
t value Pr(>|t|)
-0.659 0.513396
1.597 0.117605
-1.854 0.070561 .

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’
1
Residual standard error: 69.95 on 43 degrees of freedom

Multiple R-squared: 0.3717, Adjusted R-squared:

F-statistic: 6.359 on 4 and 43 DF, p-value: 0.0004117

Puede ver en la última línea que el valor p muestra que existe una relación significativa
general entre nuestra variable dependiente y las variables independientes. Sin embargo,
no todas las variables encajan tan bien si examinamos la última columna bajo
“Coeficientes” que muestra que las variables Temperatura y CO2 no son significativas.
Como queremos que solo haya variables significativas en el modelo, podemos eliminarlas
sistemáticamente de una en una, comenzando con la variable menos significativa, la
temperatura en este caso (p = 0,51). Aquí usaremos la misma sintaxis a continuación pero
eliminando la variable relevante:

model.lm2 <- lm(SQS ~ evenness + CO2 + Rock.area_sum, data =


Si ahora pedimos el mismo resumen (model.lm2), veremos que el modelo se ha vuelto un
poco más significativo en general, pero la variable de CO2 sigue siendo no significativa,
por lo que podemos eliminarlo nuevamente para dejar solo la uniformidad y el Rock.
variables area_sum:

model.lm3 <- lm(SQS ~ evenness + Rock.area_sum, data =

Finalmente, mirando el resumen de este modelo (resumen (model.lm3)) verá que ahora solo
tenemos un modelo con variables significativas, aunque Rock.area_sum solo es
significativo con p <0.1 en lugar de una p <0.05 más aceptable . Sin embargo, si miramos
los valores de R-cuadrado ajustados para estos tres modelos, es model.lm2 el que tiene el
valor más alto, lo que significa que este modelo está explicando más la variación observada
en nuestra variable dependiente, por lo que quizás sea el mejor modelo. en general.
Volveremos a esto en un momento. En resumen, aquí hemos creado tres modelos
(model.lm, model.lm2, model.lm3) cada uno de los cuales representa una única regresión
lineal múltiple. Sin embargo, mediante la eliminación secuencial de los términos menos
significativos, hemos realizado una técnica estadística llamada regresión lineal múltiple
escalonada. Como punto de interés, algunos consideran que este método tiene algunas
dificultades importantes (Whittingham et al. 2006).
Criterio de información de Akaike, un método alternativo para la selección de modelos
Una alternativa al enfoque descrito anteriormente es utilizar el criterio de información de
Akaike (AIC). El AIC es una medida de la "bondad de ajuste" de un modelo y se puede
utilizar para comparar directamente una serie de modelos. Es importante destacar que este
método no debe usarse para comparar modelos en diferentes conjuntos de datos. Podemos
obtener el valor de AIC para cada uno de nuestros modelos usando la función AIC de la
siguiente manera:

AIC(model.lm)
[1]550.7193
AIC(model.lm2)
[1]549.2017
AIC(model.lm3)

[1]549.9476

El valor de AIC se calcula utilizando la siguiente ecuación:


AIC = 2K – 2ln (L)

Aquí L representa la probabilidad del modelo y K es el número de parámetros libres


(variables explicativas) en el modelo. En esencia, el primer parámetro aquí (2K) penaliza a
un modelo por ser más complejo, es decir, tener más variables libres. El mejor modelo es el
que tiene el valor de AIC más bajo, por lo que en el caso de los tres modelos que ya hemos
instalado, puede ver que model.lm tiene el valor más alto y, por lo tanto, el menor ajuste a
los datos en comparación con los otros dos. modelos. De model.lm2 y model.lm3, el
primero tiene un ajuste ligeramente mejor; si recuerda nuestra eliminación gradual de
valores, este es el modelo que también tiene un valor R cuadrado ajustado más alto.
En lugar de eliminar cada variable a su vez, existe una función que automatizará esto y
proporcionará el modelo que mejor se ajuste; se llama paso, y para ello solo se requiere el
modelo con todas las variables incluidas.
model.lm.step <- step(model.lm)

Esto devolverá mucha información al probar varias combinaciones de variables, pero lo que
nos interesa es la salida en la parte inferior. Aquí proporciona la fórmula para el mejor
modelo, que puede notar que es la misma que usamos para model.lm2.
Actualmente, hemos examinado modelos que contienen cuatro, tres y dos variables
independientes eliminando sucesivamente las variables menos significativas. Sin embargo,
si miramos el resumen (model.lm3) que contiene dos variables independientes, podemos
ver que la variable de uniformidad es mucho más significativa que la variable
Rock.area_sum. En este caso, puede valer la pena comprobar si un modelo que contiene la
uniformidad como única variable independiente puede ajustarse mejor que el modelo de
mejor ajuste actual, es decir, model.lm2. Entonces ahora podemos seguir el procedimiento
de antes y crear la variable model.lm4 que contiene el nuevo modelo:
model.lm4 <- lm(SQS ~ evenness, data = extrinsicLM)

Luego use AIC para obtener el valor del criterio de información de Akaike para este nuevo
modelo:
AIC(model.lm4)

[1]551.3252

Con este valor ahora podemos ver que, no solo no es un mejor ajuste que nuestro mejor
modelo actual que tiene un valor AIC de 549.2017, sino que este nuevo modelo es un
ajuste menor que un modelo que incluye todas las variables, modelo. lm.
Cabe señalar que el uso de AIC para comparar modelos no funciona de la misma manera
que probar una hipótesis nula. Por lo tanto, si todos los modelos no se ajustan bien, solo
puede seleccionar el mejor de un grupo malo, por lo que se debe tener cuidado al utilizar
este método.
Análisis de varianza (ANOVA)
El segundo tema que se aborda en esta práctica de laboratorio es el análisis de varianza, o
ANOVA, una familia de pruebas estadísticas que se utilizan cuando sus variables
dependientes son categóricas (los datos se clasifican en grupos, como el género) en lugar
de continuas (mediciones en un escala como la altura o el peso) como sería si estuviera
utilizando un análisis de regresión. Hay varios otros tipos de análisis que están
relacionados con ANOVA que este laboratorio no cubrirá, con acrónimos cada vez más
largos como Análisis de Covarianza (ANCOVA), Análisis de Varianza Multivariante
(MANOVA) y Análisis de Covarianza Multivariante (MANCOVA).
En el caso de ANOVA, supongamos que ha recopilado una serie de medidas en varias
muestras, como diferentes taxones, y desea saber si difieren significativamente; en este
caso, utilizar un ANOVA sería el método adecuado. La hipótesis nula (H0) para un ANOVA
es la siguiente:
H0: todas las muestras se toman de poblaciones con medias iguales
Como ocurre con todas las pruebas estadísticas, hay una serie de supuestos que los datos
deben cumplir para que los resultados de ese análisis se consideren válidos y precisos.
Para ANOVA son los siguientes:
• [i] Los datos deben distribuirse normalmente.
• [ii] Todas las muestras deben tener la misma varianza.
• [iii] Las muestras se seleccionan al azar y al azar de cada
otro.
Hay dos pruebas ANOVA de uso común, ANOVA unidireccional y bidireccional. La
distinción entre estos es que en el ANOVA unidireccional solo hay una variable
independiente, en este caso los diferentes taxones que estamos comparando, mientras
que en el ANOVA bidireccional puede haber múltiples variables independientes. En este
último caso, es posible que desee saber si hay una interacción entre dos variables en su
variable dependiente. Esta práctica de laboratorio se centrará únicamente en el ANOVA
unidireccional. Preguntaremos si existe una diferencia significativa en las distribuciones de
tamaño de cuatro taxones usando el conjunto de datos llamado anova.txt disponible en la
carpeta Class Materials (archivo anova.csv).
Como siempre, el primer paso es cargar el archivo en el entorno R, guardando los datos
como la nueva variable anova (consulte el primer artículo en el Boletín 85 si no está
seguro de cómo hacerlo):
1. anova <- read.table(file="anova.csv",header=TRUE)

Este archivo contiene una matriz de dos columnas que representan el tamaño y el nombre
del taxón, respectivamente, para 200 especímenes individuales.
Solo un recordatorio: puede hacer que R devuelva los nombres de las columnas de la
variable anova:
names(anova)
[1]“size”“taxon”

y si quieres una descripción del contenido de cada una de las variables puedes usar:
summary(anova)

Esto proporcionará el resumen de cinco puntos (es decir, mínimo, primer cuartil, mediana,
tercer cuartil, máximo) más el valor medio de la variable de tamaño y el número de
apariciones de cada nombre de taxón en la variable de taxón; en este caso, puede decir
que hay cincuenta filas para cada uno de los cuatro géneros representados aquí.
Min.
1st Qu.
Median
Mean
3rd Qu.
Max.
size taxon
:10.41 Taxon A:50
:20.26 Taxon B:50
:24.28 Taxon C:50
:24.65 Taxon D:50
:28.52
:39.81

El siguiente paso siempre debe ser trazar sus datos para verificar si hay anomalías, es
decir, valores atípicos. Dado que aquí tenemos una serie de categorías que contienen una
variable continua, un diagrama de caja (o caja y bigote) es la forma más apropiada de
mostrar estos datos. A continuación se muestra el código para producir el diagrama de
caja en la Figura 5.2 que muestra la distribución de tamaños de nuestros cuatro taxones.
Cabe señalar que se puede lograr el mismo resultado si, en lugar de usar la función
boxplot, usa plot en su lugar.

boxplot(anova$size ~ anova$taxon, xlab="Taxon",


ylab="Length",

notch=TRUE)

ANOVA, la prueba t y errores de tipo I


Antes de que el laboratorio pase por la implementación del ANOVA unidireccional, es
necesario explicar con mayor detalle un aspecto del ANOVA. Como se mencionó, la
prueba ANOVA se usa para ver si existen diferencias significativas en los valores medios
entre dos o más poblaciones. Si esto le suena familiar, puede ser porque es la misma
hipótesis probada cuando se usa una prueba t. Por lo tanto, realizar un ANOVA en solo dos
poblaciones es equivalente a usar una prueba t en los mismos datos. Entonces, ¿por qué
no usamos una prueba t en tres pares de conjuntos de datos de anova, por ejemplo, (por
ejemplo, taxón A / taxón B, taxón B / taxón C, taxón A / taxón C) y eso debería
proporcionar el mismo resultado, ¿no debería? La razón por la que no lo hará es que, al
realizar pruebas t separadas, corremos el riesgo de inflar las probabilidades de cometer un
error de tipo I. Esto, en términos simples, es cuando se determina que los resultados son
significativos cuando en realidad no lo son. Esto se opone a un error de Tipo II, por el cual
se rechaza un efecto genuino cuando no debería haber sido.
Volviendo a nuestro problema de tres poblaciones, si usamos un valor de significancia (o
alfa) de 0.05 (es decir, los valores p <0.05 se consideran significativos), en cada caso la
probabilidad de no cometer un error de Tipo I es de 0.95. Como tenemos tres
comparaciones, en este caso multiplicamos las probabilidades juntas, es decir, 0,95 * 0,95
* 0,95, lo que equivale a 0,857. Entonces, para obtener la probabilidad de cometer un
error de Tipo I, restamos este valor de 1, lo que da un nuevo valor alfa de 0.143 o 14.3%.
Esto es mucho más alto de lo que requerirían la mayoría de los científicos para obtener un
resultado aceptable. Sin embargo, cuando se usa la función ANOVA en R, controla este
efecto y mantiene el valor alfa en 0.05. Es importante decir aquí que, si bien nunca puede
eliminar por completo las posibilidades de cometer un error de Tipo I, puede tener cierto
control sobre la probabilidad de que ocurra y, por lo tanto, controlar que sus resultados
no sean simplemente fruto del azar.

Volver a ANOVA
Ahora, volvamos a ejecutar nuestro análisis ANOVA en los cuatro taxones. Las fórmulas
del modelo son las mismas que para la regresión lineal con la variable dependiente
primero, en este caso el tamaño, seguida de las variables independientes, aquí taxón.
aov.mod <- lm(anova$size ~ anova$taxon)

Puede utilizar la función aov para el mismo efecto:


aov.mod <- aov(anova$size ~ anova$taxon)

También podemos ejecutar el mismo modelo usando solo los nombres de las variables,
siempre que le digamos a aov el nombre del conjunto de datos:
aov.mod <- lm(size ~ taxon, data=anova)

El siguiente paso es usar la función anova para obtener la tabla ANOVA que produce todas
las estadísticas de prueba:
anova(aov.mod)

Analysis of Variance Table

Df Sum Sq Mean Sq F value Pr(>F)

Taxon 3 3151.9 1050.64 37.531 <

2.2e-16 ***

Residuals 196 5486.8 27.99

---

Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1

Los dos números importantes aquí son el estadístico de prueba (valor F) y el valor p.
Puede ver en este resultado, con un valor de p <0.05, que en el conjunto de datos de
anova hay diferencias significativas entre los cuatro taxones. Obviamente, esto no le dice
si todos los pares de géneros son significativamente diferentes, por lo que podemos
aplicar la prueba de diferencia honestamente significativa (HSD) de Tukey usando la
función TukeyHSD:
TukeyHSD(aov(aov.mod))
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = aov.mod)

$taxon

diff lwr upr p adj

Taxon B-Taxon A 4.350773 1.608800 7.092745

0.0003348

Taxon C-Taxon A 5.642761 2.900789 8.384733

0.0000016

Taxon D-Taxon A 11.125072 8.383100 13.867045

0.0000000

Taxon C-Taxon B 1.291988 -1.449984 4.033961

0.6143048

Taxon D-Taxon B 6.774300 4.032327 9.516272

0.0000000

Taxon D-Taxon C 5.482311 2.740339 8.224284

0.0000033

Esto imprimirá una lista de todos los diferentes pares de taxones junto con los valores p
corregidos (p adj) en cada caso. Según este resultado, todos los diferentes pares de
taxones son significativamente diferentes con la excepción del Taxón B y el Taxón C. Si
miramos nuevamente la Figura 5.2, cualquier falta de superposición en las muescas que se
colocan en la mediana significa una diferencia significativa. El taxón B y el taxón C
muestran mucha superposición en las muescas, mientras que esto no es cierto para todos
los demás pares de taxones.
Al igual que con el análisis de regresión, también debemos verificar que el resultado no
viole los supuestos del modelo (Figura 5.3). ¿Es este el mejor modelo para usar con estos
datos?
par(mfrow=c(2,2))
plot(aov.mod)

También podría gustarte