Como posso testar se as duas estimativas de parâmetros no mesmo modelo são significativamente diferentes?

12

Eu tenho o modelo

y=xa×zb+e

onde é a variável dependente, e são variáveis ​​explicativas, e são os parâmetros e é um termo de erro. Eu tenho as estimativas dos parâmetros de e e uma matriz de covariância dessas estimativas. Como faço para testar se e são significativamente diferentes?yxzabeabab

K. Roelofs
fonte

Respostas:

16

Avaliar a hipótese de que a e b são diferentes equivale a testar a hipótese nula ab=0 (contra a alternativa que ab0 ).

Os seguintes presume análise é razoável para que você possa estimar ab como

U=a^b^.
Também aceita a formulação do seu modelo (que geralmente é razoável), que - porque os erros são aditivos (e podem até produzir valores negativos observados de y ) - não nos permite linearizá-lo usando logaritmos de ambos os lados.

A variância de U pode ser expressa em termos da matriz de covariância (cij) de como(a^,b^)

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

Quando é estimado com menos quadrados, geralmente se usa um "teste t"; isto é, a distribuição de é aproximada por uma distribuição t de Student com graus de liberdade (onde é a contagem de dados e conta o número de coeficientes ) Independentemente disso, geralmente é a base de qualquer teste. Você pode executar um teste Z (quando é grande ou ao ajustar com Máxima Verossimilhança) ou inicializá-lo, por exemplo.(a^,b^)

t=U/Var(U)
n2n2tn

Para ser específico, o valor p do teste t é dado por

p=2tn2(|t|)

onde é a função de distribuição t (cumulativa) de Student. É uma expressão para a "área da cauda": a chance de uma variável t de Student (de graus de liberdade) ser igual ou superior ao tamanho da estatística de teste,tn2n2|t|.


De maneira mais geral, para os números e você pode usar exatamente a mesma abordagem para testar qualquer hipótesec1, c2,μ

H0:c1a+c2b=μ

contra a alternativa bilateral. (Isso abrange o caso especial, mas generalizado, de um "contraste" .) Use a matriz de variância-covariância estimada (cij) para estimar a variação de U=c1a+c2b e formar a estatística

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

O precedente é o caso (c1,c2)=(1,1) e μ=0.


Para verificar se esse conselho está correto, executei o Rcódigo a seguir para criar dados de acordo com este modelo (com erros normalmente distribuídos e), ajustá-los e calcular os valores de t várias vezes. A verificação é de que o gráfico de probabilidade de t (com base na distribuição t assumida de Student) segue de perto a diagonal. Aqui é que a trama numa simulação de tamanho 500 , onde n=5 (um conjunto de dados muito pequeno, escolhido porque o t distribuição está longe de ser normal) e a=b=1/2.

Gráfico de probabilidade

Neste exemplo, pelo menos, o procedimento funciona perfeitamente. Considere executar novamente a simulação usando os parâmetros a, b, σ (desvio padrão do erro) n que refletem sua situação.

Aqui está o 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
fonte
2
Isto e excelente. A resposta com a teoria, com etapas a serem seguidas para repetir para outros testes, com uma abordagem numérica para maior clareza e com código. Este é o padrão ouro.
SecretAgentMan
1
Acho que " a hipótese de que aeb são diferentes" é ambígua em sua sentença inicial, porque não está claro se essa é uma hipótese nula ou alternativa. A pergunta do OP deixa claro que eles estão procurando evidências de diferença, e a segunda cláusula da sua frase fala disso. Pedagogicamente, acho que ajuda as pessoas mais novas ao teste de hipóteses a serem super explícitas. (Mas +1 pela sua resposta geral :)
Alexis
1
@ Alexis obrigado - vejo o que você está dizendo. Porque eu tenho essas pessoas em mente, vou esclarecer.
whuber