회귀 F 검정의 힘은 무엇입니까?


11

다중 선형 회귀 분석에서 변수 하위 집합에 대한 고전적인 F- 검정의 형식은 여기서 는 '큰'모델 안에 중첩 된 '축소 된'모델에서 제곱 오차의 합 이고 는 자유도입니다. 두 가지 모델. '큰'모형의 추가 변수에 선형 설명력이 없다는 귀무 가설 하에서 통계량은 및 자유도를 가진 F로 분포됩니다 .

F=(SSE(R)SSE(B))/(dfRdfB)SSE(B)/dfB,
SSE(R)BdfdfRdfBdfB

그러나 대안에 따른 분포는 무엇입니까? 나는 그것이 중심이 아닌 F라고 가정하지만 (중앙이 아닌 중심이 아니길 바랍니다) 정확하게 중심이 아닌 매개 변수가 무엇인지에 대한 참조를 찾을 수 없습니다. 실제 회귀 계수 및 아마도 디자인 행렬 에 달려 있다고 생각 하지만 그 이상은 확실하지 않습니다.βX

답변:


9

비 중심 모수는 이고 제한된 모형의 투영은 이고 는 참 모수의 벡터이며 는 무제한 (true) 모형의 설계 행렬입니다.표준입니다 :δ2PrβX||x||

δ2=||XβPrXβ||2σ2

다음과 같은 공식을 읽을 수 있습니다. 는 설계 행렬 에 조건부로 예상되는 값의 벡터입니다 . 를 경험적 데이터 벡터 로 취급 하면 제한된 모델 부분 공간에 대한 투영은 이며,이 "데이터"에 대한 제한된 모델로부터 예측을 제공합니다 . 결과적으로 는 와 유사하며 해당 예측의 오류를 제공합니다. 따라서 는 해당 오류의 제곱의 합을 나타냅니다. 제한된 모델이 참이면E(y|X)=XβXXβyPrXβy^XβPrXβyy^||XβPrXβ||2Xβ이미 및 의해 정의 된 서브 스페이스 내에 있으므로 비중 심성 매개 변수가 입니다.XrPrXβ=Xβ0

Mardia, Kent & Bibby에 있습니다. (1980). 다변량 분석.


큰! 규범을 제곱해야합니까? 그렇지 않으면 단위가 중요한 것 같습니다. 당신은 그것이 '제곱의 합'이라고
말하며

@shabbychef 물론 당신이 맞아, 그것을 잡아 주셔서 감사합니다!
caracal

7

Monte Carlo 실험을 통해 @caracal의 답변을 확인했습니다. 선형 모델 (임의의 랜덤 크기)에서 랜덤 인스턴스를 생성하고 F- 통계량을 계산하고 매개 변수 사용하여 p- 값을 계산했습니다. 그런 다음이 p- 값의 경험적 cdf를 플로팅했습니다. 비 중심 매개 변수 (및 코드!)가 정확하면 거의 균일 한 cdf를 가져와야합니다.

δ2=||Xβ1Xβ2||2σ2,

정상적인 것의 경험적 CDF

다음은 R 코드입니다 (스타일을 용서하십시오. 여전히 배우고 있습니다).

#sum of squares
sum2 <- function(x) { return(sum(x * x)) }
#random integer between n and 2n
rint <- function(n) { return(ceiling(runif(1,min=n,max=2*n))) }
#generate random instance from linear model plus noise.
#n observations of p2 vector
#regress against all variables and against a subset of p1 of them
#compute the F-statistic for the test of the p2-p1 marginal variables
#compute the p-value under the putative non-centrality parameter
gend <- function(n,p1,p2,sig = 1) {
 beta2 <- matrix(rnorm(p2,sd=0.1),nrow=p2)
 beta1 <- matrix(beta2[1:p1],nrow=p1)
 X <- matrix(rnorm(n*p2),nrow=n,ncol=p2)
 yt1 <- X[,1:p1] %*% beta1
 yt2 <- X %*% beta2
 y <- yt2 + matrix(rnorm(n,mean=0,sd=sig),nrow=n)
 ncp <- (sum2(yt2 - yt1)) / (sig ** 2)
 bhat2 <- lm(y ~ X - 1)
 bhat1 <- lm(y ~ X[,1:p1] - 1)
 SSE1 <- sum2(bhat1$residual)
 SSE2 <- sum2(bhat2$residual)
 df1 <- bhat1$df.residual
 df2 <- bhat2$df.residual
 Fstat <- ((SSE1 - SSE2) / (df1 - df2)) / (SSE2 / bhat2$df.residual)
 pval <- pf(Fstat,df=df1-df2,df2=df2,ncp=ncp)
 return(pval)
}
#call the above function, but randomize the problem size (within reason)
genr <- function(n,p1,p2,sig=1) {
 use.p1 <- rint(p1)
 use.p2 <- use.p1 + rint(p2 - p1)
 return(gend(n=rint(n),p1=use.p1,p2=use.p2,sig=sig+runif(1)))
}
ntrial <- 4096
ssize <- 256
z <- replicate(ntrial,genr(ssize,p1=4,p2=10))
plot(ecdf(z))

2
코드의 후속 조치는 +1입니다. 항상 반갑습니다.
mpiktas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.