Al construir un modelo lineal generalizado para explicar la media (\(\mu\)) de una variable respuesta (\(Y\)), es posible que nos encontremos con la duda que se muestra en la siguiente figura.
¿Cómo se puede proceder en estos casos?
Una de las formas es utilizar la prueba de Wald para responder la pregunta, y en la siguiente sección se muestra como realizar la prueba.
Supongamos que se ajustó un modelo glm para explicar \(\mu\) en función de \(k\) covariables así:
\[ g(\mu) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_{k} x_{k} \] La hipótesis nula en la prueba de Wald es
\[H_0: \underset{q \times (k+1)}{\bf{L}} \underset{(k+1) \times 1}{\boldsymbol{\beta}} = \underset{q \times 1}{\bf{C}},\] donde \(\bf{L}\) es una matriz de ceros y unos para extraer los elementos de interés del vector \(\boldsymbol{\beta}\), la matriz \(\bf{C}\) contiene los valores de referencia de cada uno de los \(\beta\)’s.
La hipótesis alterna en esta prueba es
\[H_1: \underset{q \times (k+1)}{\bf{L}} \underset{(k+1) \times 1}{\boldsymbol{\beta}} \neq \underset{q \times 1}{\bf{C}},\]
Recordemos que los glm Poisson y binomial tienen \(\phi=1\). En este caso el estadístico está dado por:
\[Z_0^2 = \left( \bf{L} \hat{\boldsymbol{\beta}} - \bf{C} \right)^{\top} \left( \bf{L} \widehat{Var}(\hat{\boldsymbol{\beta}}) \bf{L}^{\top} \right)^{-1} \left( \bf{L} \hat{\boldsymbol{\beta}} - \bf{C} \right),\] y suponiendo que \(H_0\) es verdadera, el estadístico \(Z_0^2\) tendrá una distribución \(\chi^2_{q}\) (Fox (2015), sección 15.3.3).
Recordemos que los glm normal, gamma y inversa gaussian tienen parámetro de dispersión \(\phi\) que se puede estimar de 4 formas diferentes. En este caso el estadístico está dado por:
\[F_0 = \frac{\left( \bf{L} \hat{\boldsymbol{\beta}} - \bf{C} \right)^{\top} \left( \bf{L} \widehat{Var}(\hat{\boldsymbol{\beta}}) \bf{L}^{\top} \right)^{-1} \left( \bf{L} \hat{\boldsymbol{\beta}} - \bf{C} \right)}{q},\] y suponiendo que \(H_0\) es verdadera, el estadístico \(F_0\) tendrá una distribución \(F_{q, n-k-1}\) (Fox (2015), sección 15.3.3). El valor de \(n\) corresponde al número de observaciones usadas en el modelo.
En este ejemplo se desea modelar la variable \(Y\) que representa el número de cangrejos satelites (machos) pegados al caparazón de las hembras en funcion de las covariables weight, color, width y spine.
Se va a ajustar un modelo Poisson(log) y se desea estudiar las siguientes hipótesis.
\[\begin{align} H_0 &: (\beta_{weight}, \beta_{width})^\top = (0, 0)^\top \\ H_1 &: (\beta_{weight}, \beta_{width})^\top \neq (0, 0)^\top \end{align}\]
Lo primero que se debe hacer es ajustar el modelo de la siguiente manera.
url <- "http://users.stat.ufl.edu/~aa/glm/data/Crabs.dat"
Crabs <- read.table(url, header=TRUE)
Crabs$color <- as.factor(Crabs$color)
Crabs$spine <- as.factor(Crabs$spine)
fit <- glm(y ~ weight + color + width + spine,
family=poisson(link=log), data=Crabs)
El vector con los \(\beta\)’s estimados se obtiene así:
beta_hat <- matrix(coef(fit), ncol=1,
dimnames=list(names(coef(fit)), NULL))
beta_hat
## [,1]
## (Intercept) -0.36180032
## weight 0.49647004
## color2 -0.26485119
## color3 -0.51370507
## color4 -0.53086011
## width 0.01674870
## spine2 -0.15037184
## spine3 0.08728258
Como la hipótesis nula involucra sólo \(\beta_{weight}\) y \(\beta_{width}\) entonces la matriz \(\bf{L}\) debe ser la siguiente.
L <- matrix(c(0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0), ncol=8, byrow=TRUE)
L
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 0 1 0 0 0 0 0 0
## [2,] 0 0 0 0 0 1 0 0
Para verificar si la matriz \(\bf{L}\) anterior es la correcta se debe multiplicar por \(\hat{\boldsymbol{\beta}}\) para obtener solo los \(\beta\)’s involucrados en la hipótesis nula.
L %*% beta_hat # subvector con los betas en H0
## [,1]
## [1,] 0.4964700
## [2,] 0.0167487
El vector anterior de dimensión \(2 \times 1\) si contiene la información de los \(\beta\)’s involucrados en la hipótesis nula.
La matriz \(\bf{C}\) con los lados derechos de la hipótesis nula es la siguiente.
C <- matrix(c(0, 0), ncol=1, byrow=TRUE)
C
## [,1]
## [1,] 0
## [2,] 0
Para realizar la prueba Wald se puede usar el siguiente código.
aux <- L %*% beta_hat - C
z2 <- t(aux) %*% solve(L %*% vcov(fit) %*% t(L)) %*% aux
z2 <- as.numeric(z2)
z2
## [1] 55.86176
pchisq(q=z2, df=2, lower.tail=FALSE) # valor-P
## [1] 7.409242e-13
De la salida anterior vemos que el valor-P es 7.409242e-13, lo cual es menor que cualquier nivel de significancia, por lo tanto podemos decir que hay evidencias para afirmar que el vector \((\beta_{weight}, \beta_{width})^\top\) no es igual al vector nulo, en otras palabras, que al menos uno de los \(\beta\)’s involucrados es diferente de cero.
En este ejemplo se desea modelar la variable \(Y\) que representa el precio de venta de unas casas en funcion de las covariables size, new y beds.
Se va a ajustar un modelo Gamma(inv) y se desea estudiar las siguientes hipótesis.
\[\begin{align} H_0 &: (\beta_{new}, \beta_{beds})^\top = (0, 0)^\top \\ H_1 &: (\beta_{new}, \beta_{beds})^\top \neq (0, 0)^\top \end{align}\]
Suponga que vamos a usar como estimador de \(\phi\) el Maximum Likelihood estimator.
Lo primero que se debe hacer es ajustar el modelo de la siguiente manera.
url <- 'http://users.stat.ufl.edu/~aa/glm/data/Houses.dat'
datos <- read.table(url, header=TRUE)
fit <- glm(price ~ size + new + beds,
data=datos, family=Gamma(link=inverse))
El vector con los \(\beta\)’s estimados se obtiene así:
beta_hat <- matrix(coef(fit), ncol=1,
dimnames=list(names(coef(fit)), NULL))
beta_hat
## [,1]
## (Intercept) 1.182760e-02
## size -2.179041e-06
## new -1.228912e-03
## beds -2.540445e-04
Como la hipótesis nula involucra sólo \(\beta_{new}\) y \(\beta_{beds}\) entonces la matriz \(\bf{L}\) debe ser la siguiente.
L <- matrix(c(0, 0, 1, 0,
0, 0, 0, 1), ncol=4, byrow=TRUE)
L
## [,1] [,2] [,3] [,4]
## [1,] 0 0 1 0
## [2,] 0 0 0 1
Para verificar si la matriz \(\bf{L}\) anterior es la correcta se debe multiplicar por \(\hat{\boldsymbol{\beta}}\) para obtener solo los \(\beta\)’s involucrados en la hipótesis nula.
L %*% beta_hat # subvector con los betas en H0
## [,1]
## [1,] -0.0012289122
## [2,] -0.0002540445
El vector anterior de dimensión \(2 \times 1\) si contiene la información de los \(\beta\)’s involucrados en la hipótesis nula.
La matriz \(\bf{C}\) con los lados derechos de la hipótesis nula es la siguiente.
C <- matrix(c(0, 0), ncol=1, byrow=TRUE)
C
## [,1]
## [1,] 0
## [2,] 0
Para obtener el Maximum Likelihood estimator de \(\phi\) se usa lo siguiente.
MASS::gamma.dispersion(fit)
## [1] 0.1328696
La matriz \(\widehat{Var}(\hat{\boldsymbol{\beta}})\) se debe actualizar usando el \(\hat{\phi}\) obtenido antes.
var_cov_hat <- vcov(summary(fit, dispersion=0.1328696))
var_cov_hat
## (Intercept) size new beds
## (Intercept) 8.813446e-07 5.156914e-11 -4.086979e-08 -2.761805e-07
## size 5.156914e-11 7.177816e-14 -7.109259e-11 -6.263171e-11
## new -4.086979e-08 -7.109259e-11 2.286833e-07 3.935481e-08
## beds -2.761805e-07 -6.263171e-11 3.935481e-08 1.233321e-07
Para realizar la prueba Wald se puede usar el siguiente código.
aux <- L %*% beta_hat - C
F0 <- t(aux) %*% solve(L %*% var_cov_hat %*% t(L)) %*% aux
F0 <- as.numeric(F0) / 2
F0
## [1] 3.309771
pf(q=F0, df1=2, df2=100-4, lower.tail=FALSE) # valor-P
## [1] 0.04073577
De la salida anterior vemos que el valor-P es 0.04073577, un poco menor que el nivel de significancia usual de 5%, por lo tanto podemos decir que hay evidencias para afirmar que el vector \((\beta_{new}, \beta_{beds})^\top\) no es igual al vector nulo, en otras palabras, que al menos uno de los \(\beta\)’s involucrados es diferente de cero.
Nota: Para conocer otras publicaciones relacionadas con glm visite este enlace.
Fox, John. 2015. Applied Regression Analysis and Generalized Linear Models. Sage Publications.