동일한 모형에서 두 모수 추정치가 크게 다른지 어떻게 테스트 할 수 있습니까?


12

나는 모델이있다

y=xa×zb+e

여기서 는 종속 변수이고, 와 는 설명 변수이고, 와 는 매개 변수이며 는 오류 항입니다. 와 의 모수 추정치 와 이러한 추정치의 공분산 행렬이 있습니다. 와 가 크게 다른지 어떻게 테스트 합니까?yxzabeabab

답변:


16

와 가 다르다는 가설을 평가하는 것은 귀무 가설 을 테스트하는 것과 같습니다abab=0 ( 대안 ).ab0

다음 분석은 를 추정하는 것이 합리적이라고 가정합니다 오류가 있기 때문에 - 또한, (종종 합리적이다) 모델 정립 받아 첨가제 (심지어 부정적 관찰 된 값을 생산할 수있는 ) - 우리를 허용하지 않습니다 를 선형화 양쪽의 대수를 취함으로써를.ab

U=a^b^.
와이y

의 분산 공분산 행렬로 표현 될 수있다 의 로서U(cij)(a^,b^)

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

경우 되는 최소 제곱 추정, 하나는 보통 "t 테스트를 「사용 즉, 분포 는 자유도를 갖는 Student t 분포에 의해 근사됩니다 (여기서 은 데이터 수이고 는 계수 수를 나타냄) ). 어쨌든, 일반적으로 모든 테스트의 기초입니다. 예를 들어 Z 테스트 ( 이 크거나 Maximum Likelihood에 적합 할 때)를 수행하거나 부트 스트랩 할 수 있습니다.(a^,b^)

t=U/Var(U)
n2n2tn

구체적으로, t 검정의 p- 값은

p=2tn2(|t|)

여기서 는 학생 t (누적) 분포 함수입니다. 이것은 "꼬리 영역"에 대한 하나의 표현입니다. ( 자유도의 Student t 변수 )가 검정 통계량의 크기와 같거나이를 초과 할 확률 ,tn2n2|t|.


더 일반적으로, 숫자 및 경우 가설을 검정하기 위해 정확히 동일한 접근법을 사용할 수 있습니다c1, c2,μ

H0:c1a+c2b=μ

양면 대안에 반대합니다. (이것은 "콘트라스트" 의 특수하지만 널리 퍼져있는 경우를 포함합니다 .) 추정 분산 공분산 행렬 을 사용하여 의 분산을 추정 하고 통계량을 형성하십시오.(cij)U=c1a+c2b

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

위의 경우는 및(c1,c2)=(1,1)μ=0.


이 조언이 올바른지 확인R 하기 위해 다음 코드를 실행 하여이 모델에 따라 데이터를 생성하고 (정규 분포 오류 포함 e) 적합하게 만들고 값을 여러 번 계산했습니다 . 확인 된 의 확률도 (가정 된 학생 t 분포에 기초한)는 대각선에 가깝습니다. 다음은 크기 의 시뮬레이션 에서 ( 분포가 법선과 거리가 멀기 때문에 선택되는 매우 작은 데이터 세트 ) 및 플롯입니다tt500n=5t= B = - 1 / 2.a=b=1/2.

확률도

이 예에서는 적어도 절차가 아름답게 작동합니다. 상황을 반영 하는 매개 변수 (오류 표준 편차) 및 을 사용하여 시뮬레이션을 다시 실행하는 것이 좋습니다.a, b, σn

코드는 다음과 같습니다.

#
# 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)

2
이것은 우수하다. 이론에 대한 답, 명확성을위한 수치 적 접근 및 코드를 사용하여 다른 테스트를 반복하기 위해 따라야 할 단계. 이것이 금본위 제입니다.
SecretAgentMan

1
나는 "찾을 은 그 null 또는 대립 가설인지 명확하지 않기 때문에, 당신의 오프닝 문장 모호한 a와 b가 서로 다른 것을 가설을". OP의 질문은 그들이 차이점의 증거를 찾고 있음을 분명히하며, 문장의 두 번째 조항이 그에 대해 이야기합니다. 교육적으로 나는 그것이 가설 테스트를 처음 접하는 사람들이 매우 명시 적으로하는 데 도움이된다고 생각합니다. (그러나 전반적인 답변을 위해 +1 :)
Alexis

1
@Alexis 감사합니다. 당신이하는 말을 봅니다. 나는 그런 사람들을 염두에두고 있기 때문에 명확히 할 것이다.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.