Évaluer l'hypothèse selon laquelle et sont différents équivaut à tester l'hypothèse nulleuneba - b = 0 (contre l'alternative ).a - b ≠ 0
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.a−bU=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+c22−2c212.
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-2n2tnn−2n2tn
Pour être précis, la valeur de p du test t est donnée par
p=2tn−2(−|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,tn−2n−2|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 R
code 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.
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)