Apa kekuatan uji F regresi?

11

Uji-F klasik untuk subset variabel dalam regresi multilinear memiliki bentuk di manaSSE(R)adalah jumlah kesalahan kuadrat di bawah 'berkurang' model, yang sarang di dalam 'besar' modelB, dandfadalah derajat kebebasan dari dua model. Di bawah hipotesis nol bahwa variabel tambahan dalam model 'besar' tidak memiliki kekuatan penjelas linear, statistik didistribusikan sebagai F dengandfR-dfBdandfBderajat kebebasan.

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

Apa distribusi, di bawah alternatif? Saya menganggap itu adalah F non-sentral (saya harap tidak ganda non-sentral), tetapi saya tidak dapat menemukan referensi tentang apa sebenarnya parameter non-sentralitas. Saya akan menebak itu tergantung pada koefisien regresi , dan mungkin pada desain matriks X , tetapi di luar itu saya tidak begitu yakin.βX

shabbychef
sumber

Jawaban:

9

Parameter noncentrality adalah , proyeksi untuk model terbatas adalah P r , β adalah vektor dari parameter true, X adalah matriks desain untuk model (true) tidak terbatas, | | x | | adalah normanya:δ2PrβX||x||

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

E(y|X)=XβXXβyPrXβy^XβPrXβyy^||XβPrXβ||2XβXrPrXβ=Xβ0

Anda harus menemukannya di Mardia, Kent & Bibby. (1980). Analisis Multivariat.

caracal
sumber
Bagus! haruskah norma itu dikuadratkan? Kalau tidak, sepertinya unit itu penting? Anda menyatakan itu adalah 'jumlah kuadrat', jadi saya pikir itu adalah norma kuadrat ..
shabbychef
@shabbychef Tentu saja Anda benar, terima kasih sudah menangkapnya!
caracal
7

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

CDF empiris dari apa yang seharusnya normal

Berikut adalah kode R (maafkan gaya, saya masih belajar):

#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))
shabbychef
sumber
2
+1 untuk tindak lanjut dengan kode. Selalu senang melihatnya.
mpiktas