Valutare l'ipotesi che un' e B sono diversi equivale a testare l'ipotesi nulla a - b = 0 (contro l'alternativa che a - b ≠ 0 ).
I seguenti presume analisi è ragionevole per voi a stimare a - b come U= a^- b^.
Accetta anche la tua formulazione del modello (che spesso è ragionevole), che - poiché gli errori sono additivi (e potrebbero persino produrre valori negativi osservati di y ) - non ci consente di linearizzarla prendendo logaritmi di entrambi i lati.
La varianza di U può essere espresso in termini della matrice di covarianza ( cio j) di ( a^, b^) come
Var( U) = Var( a^- b^) = Var( a^) + Var( b^) - 2 Cov( a^, b^) = c11+ c22- 2 c212.
Quando ( a^, b^) è stimata con minimi quadrati, di solito si usa un "test t;" cioè, la distribuzione di t = U/ V a r ( U )------√
è approssimato da unadistribuzione t di Studentconn - 2gradi di libertà (dovenè il conteggio dei dati e2conta il numero di coefficienti). Indipendentemente da ciò,tsolito è la base di qualsiasi test. È possibile eseguire un test Z (quandonè grande o quando si adatta con Maximum Likelihood) o avviarlo, ad esempio.
Per essere precisi, il valore p del test t è dato da
p = 2 tn - 2( - | t | )
tn - 2n - 2| t | .
c1, c2,μ
H0:c1a+c2b=μ
(cij)U=c1a+c2b
t=(c1a^+c2b^−μ)/Var(U)−−−−−−√.
Quanto sopra è il caso (c1,c2)=(1,−1) e μ=0.
R
e
tt500n=5ta=b=−1/2.
a, b, σn
Ecco il codice
#
# 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)