¿Cómo puedo probar si las dos estimaciones de parámetros en el mismo modelo son significativamente diferentes?

12

Tengo el modelo

y=xa×zb+e

donde y es la variable dependiente, x y z son variables explicativas, a y b son los parámetros y e es un término de error. Tengo estimaciones de parámetros de a y b una matriz de covarianza de estas estimaciones. ¿Cómo se prueba que si a y b son significativamente diferentes?

K. Roelofs
fuente

Respuestas:

16

La evaluación de la hipótesis de que a y b son diferentes es equivalente a probar la hipótesis nula ab=0 (en contra de la alternativa de que ab0 ).

Los siguientes presume de análisis es razonable que a estimar ab como

U=a^b^.
También acepta la formulación de su modelo (que a menudo es razonable), que, debido a que los errores son aditivos (e incluso podrían producir valores negativos observados de y ), no nos permite linealizarlo tomando logaritmos de ambos lados.

La varianza de U se puede expresar en términos de la matriz de covarianza (cij) de (a^,b^) como

Var(U)=Var(a^b^)=Var(a^)+Var(b^)2Cov(a^,b^)=c11+c222c122.

Cuando (a^,b^) se calcula con los mínimos cuadrados, por lo general se utiliza un "test t;" es decir, la distribución de

t=U/Var(U)
se aproxima mediante unadistribución t de Studentconn2grados de libertad (dondenes el recuento de datos y2cuenta el número de coeficientes). En cualquier caso,tsuele ser la base de cualquier prueba. Puede realizar una prueba Z (cuandones grande o cuando se ajusta a la máxima verosimilitud) o iniciarla, por ejemplo.

Para ser específicos, el valor p de la prueba t viene dado por

p=2tn2(|t|)

tn2n2|t|.


c1, c2,μ

H0:c1a+c2b=μ

(cij)U=c1a+c2b

t=(c1a^+c2b^μ)/Var(U).

(c1,c2)=(1,1)μ=0.


Rett500n=5ta=b=1/2.

Trama de probabilidad

a, b, σn

Aquí está el código.

#
# Specify the true parameters.
#
set.seed(17)
a <- -1/2
b <- -1/2
sigma <- 0.25 # Variance of the errors
n <- 5        # Sample size
n.sim <- 500  # Simulation size
#
# Specify the hypothesis.
#
H.0 <- c(1, -1) # Coefficients of `a` and `b`.
mu <- 0 
#
# Provide x and z values in terms of their logarithms.
#
log.x <- log(rexp(n))
log.z <- log(rexp(n))
#
# Compute y without error.
#
y.0 <- exp(a * log.x + b * log.z)
#
# Conduct a simulation to estimate the sampling distribution of the t statistic.
#
sim <- replicate(n.sim, {
  #
  # Add the errors.
  #
  e <- rnorm(n, 0, sigma)
  df <- data.frame(log.x=log.x, log.z=log.z, y.0, y=y.0 + e)
  #
  # Guess the solution.
  #
  fit.ols <- lm(log(y) ~ log.x + log.z - 1, subset(df, y > 0))
  start <- coefficients(fit.ols) # Initial values of (a.hat, b.hat)
  #
  # Polish it using nonlinear least squares.
  #
  fit <- nls(y ~ exp(a * log.x + b * log.z), df, list(a=start[1], b=start[2]))
  #
  # Test a hypothesis.
  #
  cc <- vcov(fit)
  s <- sqrt((H.0 %*% cc %*% H.0))
  (crossprod(H.0, coef(fit)) - mu) / s
})
#
# Display the simulation results.
#
summary(lm(sort(sim) ~ 0 + ppoints(length(sim))))
qqplot(qt(ppoints(length(sim)), df=n-2), sim, 
       pch=21, bg="#00000010", col="#00000040",
       xlab="Student t reference value", 
       ylab="Test statistic")
abline(0:1, col="Red", lwd=2)
whuber
fuente
2
Esto es excelente. La respuesta con la teoría, con pasos a seguir para repetir para otras pruebas, con un enfoque numérico para mayor claridad, y con código. Este es el estándar de oro.
SecretAgentMan
1
Encuentro " La hipótesis de que ayb son diferentes" ambiguo en su oración inicial, porque no está claro si esa es una hipótesis nula o alternativa. La pregunta del OP deja en claro que están buscando evidencia de diferencia, y la segunda cláusula de su oración habla de eso. Pedagógicamente, creo que ayuda a las personas más nuevas a las pruebas de hipótesis a ser súper explícitas. (Pero +1 por su respuesta en general :)
Alexis
1
@Alexis gracias, veo lo que estás diciendo. Porque tengo a esas personas en mente, lo aclararé.
whuber