Comment puis-je tester si les deux estimations de paramètres dans le même modèle sont significativement différentes?

12

J'ai le modèle

y=xa×zb+e

où est la variable dépendante, et sont des variables explicatives, et sont les paramètres et est un terme d'erreur. J'ai des estimations de paramètres de et et une matrice de covariance de ces estimations. Comment tester si et sont significativement différents?yxzabeabab

K. Roelofs
la source

Réponses:

16

Évaluer l'hypothèse selon laquelle et sont différents équivaut à tester l'hypothèse nulleabab=0 (contre l'alternative ).ab0

L'analyse suivante suppose qu'il est raisonnable d'estimer comme Il accepte également la formulation de votre modèle (qui est souvent raisonnable), qui - parce que les erreurs sont additives (et pourraient même produire des valeurs observées négatives de ) - ne nous permet pas de le linéariser en prenant des logarithmes des deux côtés.ab

U=a^b^.
yy

La variance de peut être exprimée en termes de matrice de covariance de commeU(cij)(a^,b^)

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

Lorsque est estimé avec le moins de carrés, on utilise généralement un "test t"; c'est-à-dire que la distribution de est approximée par une distribution de Student t avec degrés de liberté (où est le nombre de données et compte le nombre de coefficients ). Quoi qu'il en soit, est généralement la base de tout test. Vous pouvez effectuer un test Z (lorsque est grand ou lors de l'ajustement avec Maximum Lik vraisemblance) ou l'amorcer, par exemple.(a^,b^)t = U /

t=U/Var(U)
n-2n2tnn2n2tn

Pour être précis, la valeur de p du test t est donnée par

p=2tn2(|t|)

où est la fonction de distribution (cumulative) de Student. Il s'agit d'une expression pour la "zone de queue": la probabilité qu'une variable Student t (de degrés de liberté) soit égale ou supérieure à la taille de la statistique de test,tn2n2|t|.


Plus généralement, pour les nombres et vous pouvez utiliser exactement la même approche pour tester toute hypothèsec1, c2,μ

H0:c1a+c2b=μ

contre l'alternative bilatérale. (Cela englobe le cas spécial mais répandu d'un "contraste" .) Utilisez la matrice de variance-covariance estimée pour estimer la variance de et former la statistique(cij)U=c1a+c2b

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

Ce qui précède est le cas et(c1,c2)=(1,1)μ=0.


Pour vérifier que ce conseil est correct, j'ai exécuté le Rcode suivant pour créer des données selon ce modèle (avec des erreurs normalement distribuées e), les ajuster et calculer les valeurs de plusieurs fois. La vérification est que le diagramme de probabilité de (basé sur la distribution de Student supposée) suit de près la diagonale. Voici ce graphique dans une simulation de taille où (un très petit ensemble de données, choisi parce que la distribution est loin d'être normale) ettt500n=5ta=b=1/2.

Tracé de probabilité

Dans cet exemple, au moins, la procédure fonctionne à merveille. Envisagez de relancer la simulation à l'aide des paramètres (l'écart-type d'erreur) et qui reflètent votre situation.a, b, σn

Voici le code.

#
# 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
la source
2
C'est excellent. La réponse avec la théorie, avec les étapes à suivre pour répéter pour d'autres tests, avec une approche numérique pour la clarté et avec le code. Ceci est l'étalon-or.
SecretAgentMan
1
Je trouve « l' hypothèse que a et b sont différents» ambiguë dans votre première phrase, car il n'est pas clair s'il s'agit d'une hypothèse nulle ou alternative. La question du PO indique clairement qu'il cherche des preuves de différence, et la deuxième clause de votre phrase en parle. Pédagogiquement, je pense que cela aide les gens plus récents aux tests d'hypothèses à être super explicites. (Mais +1 pour votre réponse globale :)
Alexis
1
@Alexis merci - je vois ce que vous dites. Parce que j'ai de telles personnes à l'esprit, je vais clarifier.
whuber