check_model

Autor/a

Guillermo Correa-Londoño

Evalúa el cumplimiento de los supuestos de un modelo de ANOVA y el efecto de diferentes transformaciones de la variable respuesta.

Uso

check_model(model, rand = 0, data = NULL, plotit = FALSE, ang = FALSE)

Argumentos

model Modelo de análisis de varianza.
rand Número de efectos aleatorios (def: 0).
data Data frame (o tibble) con los datos. Por defecto, data.
plotit Incluir gráfico para la transformación log(Y + c) (def: FALSE).
ang Incluir la transformación angular (def: FALSE).

Detalles

A partir de un modelo especificado mediante model, la función check_model evalúa la satisfacción de supuestos del modelo, así como el efecto de varias transformaciones sobre la normalidad y la homocedasticidad.

Para la especificación del modelo puede usarse una fórmula (objeto de la clase formula) o un objeto de clase aov o lm con el modelo ajustado.

Cuando el argumento model es de clase aov o lm, no se agrega el data frame con los datos, pues estos son recuperados desde dicho objeto.

Cuando el valor del argumento model es de la clase formula, la información se lee desde el data frame especificado mediante el argumento data (def: data).

Cuando el valor del argumento plotit es TRUE, se genera un gráfico basado en la transformación tr2, en el que se observan el valor p y el estadístico \(W\) de la prueba de Shapiro-Wilk en función de \(c.\)

En este mismo gráfico también aparecen los correspondientes valores de tr1 (cuando sea viable) y tr0.

Para realizar la transformación angular, debe asignarse el valor TRUE al argumento ang. En este caso, todos los valores de la variable respuesta deben estar en el rango entre 0 y 1.

Antes de evaluar las transformaciones, la función elimina los datos perdidos y, de ser necesario, incorpora una constante de desplazamiento inicial calculada como \(-(\text{mín}(Y)) + 0.01.\)

Resultados

  • Una tabla resumen con los siguientes elementos:

    • Valores óptimos de los parámetros de cada transformación:

      • \(\lambda\): Valor del parámetro para las transformaciones de Box-Cox y de potencia
      • \(c\): Constante de desplazamiento.
    • Valor p de la prueba Shapiro-Wilk aplicada sobre los residuales del modelo

    • Valor p de la prueba de homocedasticidad:

      • En diseños completamente al azar (DCA), corresponde al valor p de la prueba de Brown-Forsythe (Levene centrada en la mediana).

      • En modelos con efectos aleatorios, corresponde al menor valor p obtenido a partir de la prueba de Levene generalizada (O’Neill y Mathews, 2002), considerando los distintos efectos del diseño.

Mantenga disponible leveneGBTD.R

El cálculo de la prueba de Levene generalizada se realiza mediante la función leveneGBTD, invocada internamente desde check_model.

En consecuencia, siempre que se ejecute check_model, el archivo leveneGBTD.R debe estar disponible en la ruta de trabajo.

  • Verificación de monotonicidad.

  • Gráfico para la transformación \(\ln(Y + c)\).

  • Una lista, cuando los resultados de la función se asignan a un objeto.

Transformaciones

En Métodos Estadísticos para la Investigación se describen en detalle las transformaciones consideradas, los criterios para la obtención de los valores de los parámetros y se ofrecen recomendaciones adicionales.

La función check_model no realiza una selección automática de la transformación “óptima”, sino que proporciona elementos que le permiten al usuario tomar decisiones informadas, en concordancia con los criterios discutidos en el capítulo correspondiente.

Ejemplos

Ejempo 1. DBA

Este ejemplo ilustra el uso de la función check_model sobre un modelo de análisis de varianza con una estructura unifactorial de tratamientos y un esquema de aleatorización en bloques completos al azar.

Los fragmentos código 1 y código 2 generan los mismos resultados. En el presente ejemplo se comentan ambas opciones, pero solo se muestran los resultados generados por el fragmento de código 2, que constituye la opción recomendada.

Código 1
source("check_model.R")
data <- readxl::read_excel("Ejemplos.xlsx")
check_model(Y ~ bloque + tto, rand = 1, plotit = T)

La línea 1 carga en memoria la función check_model.

La línea 2 importa desde Excel los datos que se usan para ajustar el modelo.

La línea 3 invoca la función check_model especificando el valor del argumento model mediante una fórmula.

Puesto que el modelo incluye el componente bloque, se debe especificar que el modelo incluye un efecto aleatorio (rand = 1).

En estos casos, cuando el valor del argumento model es una fórmula (objeto de clase formula), es necesario tener disponible el data frame con los datos. Los datos se buscan por defecto en el data frame data; es por ello que, en el presente ejemplo, no se especifican explícitamente al invocar la función.


El fragmento de código 2 genera los mismos resultados que el fragmento de código 1.

En el fragmento de código 2, las líneas 1 y 2 desempeñan el mismo rol que las correspondientes líneas en el código 1: cargan la función check_model en memoria e importan los datos.

La línea 3 ajusta el modelo de análisis de varianza y guarda el resultado en el objeto anova, el cual es de las clases aov y lm.

Mediante la instrucción de la línea 4 se invoca la función check_model, usando la información contenida en el objeto anova como valor del argumento model. En este caso, el data frame con los datos también se recupera desde dicho objeto.

El fragmento de código 2 resulta más conveniente en la práctica cuando se viene realizando un análisis, pues basta con invocar la función check_model usando como argumento el objeto con el modelo ajustado, sin que sea necesario volver a escribir la fórmula correspondiente al modelo.

Código 2
source("check_model.R")
data <- readxl::read_excel("Ejemplos.xlsx")
anova <- aov(Y ~ bloque + tto, data)
check_model(anova, , rand = 1, plotit = T)
Resumen de modelos 
 
          transformación  p (S-W) p (Levene) monótona
tr0:                   Y 0.002597   0.001911       sí
tr1:              log(Y) 0.031387   0.031054       sí
tr2:       log(Y + 2.04) 0.128609   0.025790       sí
tr3:           (Y) ^ 0.5 0.041108   0.025130       sí
tr4:    (Y + 2.04) ^ 0.4 0.040105   0.023467       sí
tr5: (Y + 13.26) ^ -1.07 0.172966   0.011581       sí

La tabla resumen indica que todas las transformaciones evaluadas satisfacen el criterio de monotonicidad. Para este ejemplo, puesto que no hay datos negativos ni ceros, pueden evaluarse todas las transformaciones (excepto la angular, por no tratarse de proporciones binomiales).

Resulta notoria la mejora en la convergencia a la normal de la transformación logarítmica si se agrega una constante de 2.04 antes de extraer el logaritmo.

Ejemplo 2. DCA

Este ejemplo ilustra el uso de la función check_model sobre un modelo de análisis de varianza con una estructura unifactorial de tratamientos y un esquema de aleatorización completamente al azar.

La particularidad de este ejemplo radica en el hecho de que algunos de los valores de la variable respuesta son negativos, lo que impide el cálculo de las transformaciones tr1 y tr3.

Esta situación es gestionada automáticamente por la función check_model, sin que se requiera ninguna adaptación inicial por parte del usuario. Los resultados generados informan sobre la presencia de valores negativos en la variable respuesta.

source("check_model.R")
data <- readxl::read_excel("Ejemplos.xlsx", sheet = 2)
anova <- aov(AE ~ tto, data)
check_model(anova, plotit = T)
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Resumen de modelos 
 
         transformación  p (S-W) p (Levene) monótona
tr0:                 AE 0.005633     0.4327       sí
tr1:               <NA>       NA         NA     <NA>
tr2:     log(AE + 0.01) 0.028999     0.4626       sí
tr3:               <NA>       NA         NA     <NA>
tr4: (AE + 0.01) ^ -3.3 0.099524     0.5173       sí
tr5: (AE + 0.02) ^ -3.3 0.116394     0.5068       sí


* Las transformaciones sin suma de constante (tr1 y tr3) no son viables,
porque el mínimo de AE es -0.00106305806451613

Referencias Bibliográficas

O’Neill, M. E. y Mathews, K. L. (2002). Levene Tests of Homegeneity of Variance for General Block and Treatment Designs. Biometrics, 58(1), 216-224.