Wie kann ich testen, ob die beiden Parameterschätzungen im selben Modell erheblich voneinander abweichen?

12

Ich habe das Modell

y=xein×zb+e

wobei y die abhängige Variable ist, x und z erklärende Variablen sind, a und b die Parameter sind und e ein Fehlerterm ist. Ich habe Parameterschätzungen von a und b und eine Kovarianzmatrix dieser Schätzungen. Wie teste ich, ob a und b sich signifikant unterscheiden?

K. Roelofs
quelle

Antworten:

16

Die Bewertung der Hypothese, dass ein und b unterschiedlich sind, entspricht der Prüfung der Nullhypothese ein-b=0 (gegen die Alternative, dass ein-b0 ).

Die folgende Analyse vermutet es ist sinnvoll für Sie zu schätzen , ein-b als

U=ein^-b^.
Es akzeptiert auch Ihre Modellformulierung (die oft eine vernünftige ist), die - da die Fehler additiv sind (und sogar negative beobachtete Werte von y erzeugen können ) - es uns nicht erlaubt, sie durch Logarithmen beider Seiten zu linearisieren .

Die Varianz von U kann hinsichtlich der Kovarianzmatrix ausgedrückt werden (cichj) von (ein^,b^) als

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

Wenn (a^,b^) wird mit der kleinsten Quadrate geschätzt wird , verwendet man in der Regel einen "t - Test"; das heißt, die Verteilung von

t=U/Var(U)
durch eine angenähert wirdStudenttVerteilungmitn2Freiheitsgraden (wobeindie Daten zählen und2zählt die Anzahl der Koeffizienten). Unabhängig davon isttRegel die Grundlage eines Tests. Sie können beispielsweise einen Z-Test durchführen (wennngroß ist oder mit maximaler Wahrscheinlichkeit passt) oder einen Bootstrap durchführen.

Konkret ist der p-Wert des t-Tests gegeben durch

p=2tn2(|t|)

Dabei ist tn2 die (kumulative) Verteilungsfunktion des Schülers t. Es ist ein Ausdruck für den „Heckbereich:“ Die Chance , dass ein Student t Variable (von n2 Freiheitsgraden) gleich oder größer als die Größe der Teststatistik, |t|.


Im Allgemeinen, mehr für Zahlen c1, c2, und μ können Sie genau die gleiche Methode verwenden , jede Hypothese zu testen ,

H0:c1a+c2b=μ

gegen die zweiseitige Alternative. (Dies schließt den speziellen, aber weit verbreiteten Fall eines "Kontrasts" ein .) Verwenden Sie die geschätzte Varianz-Kovarianz-Matrix (cij) , um die Varianz von U=c1a+c2b zu schätzen und die Statistik zu bilden

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

Das Vorstehende ist der Fall (c1,c2)=(1,1) und μ=0.


Um zu überprüfen, ob dieser Rat richtig ist, habe ich den folgenden RCode ausgeführt, um Daten nach diesem Modell (mit normalverteilten Fehlern e) zu erstellen , anzupassen und die Werte von t viele Male zu berechnen . Die Überprüfung besteht darin, dass das Wahrscheinlichkeitsdiagramm von t (basierend auf der angenommenen Student-t-Verteilung) eng der Diagonale folgt. Hier ist das Grundstück in einer Simulation der Größe 500 , wo n=5 (ein sehr kleiner Datensatz gewählt, weil die t Verteilung weit von Normal ist) und a=b=1/2.

Wahrscheinlichkeitsdiagramm

Zumindest in diesem Beispiel funktioniert die Prozedur sehr gut. Überlegen Sie sich, die Simulation mit den Parametern a, b, σ (Standardabweichung des Fehlers) und n , die Ihre Situation widerspiegeln, erneut auszuführen.

Hier ist der 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
quelle
2
Das ist ausgezeichnet. Die Antwort mit der Theorie, mit Schritten zur Wiederholung für andere Tests, mit einem numerischen Ansatz zur Klarheit und mit Code. Dies ist der Goldstandard.
SecretAgentMan
1
Ich finde " Die Hypothese, dass a und b verschieden sind" in Ihrem Anfangssatz mehrdeutig, weil nicht klar ist, ob dies eine Null- oder eine Alternativhypothese ist. Die Frage des OP macht deutlich, dass sie nach Beweisen für einen Unterschied suchen, und die zweite Klausel Ihres Satzes spricht dafür. Pädagogisch halte ich es für hilfreich, wenn Leute, die neu im Hypothesentest sind, sehr explizit sind. (Aber +1 für Ihre Antwort insgesamt :)
Alexis
1
@ Alexis danke - ich verstehe, was du sagst. Weil ich solche Leute im Sinn habe, werde ich klarstellen.
whuber