¿Cuál es el poder de la prueba de regresión F?

11

La prueba F clásica para subconjuntos de variables en regresión multilineal tiene la forma dondeSSE(R)es la suma de los errores al cuadrado bajo el modelo 'reducido', que anida dentro del modelo 'grande'B, ydfson los grados de libertad de los dos modelos. Bajo la hipótesis nula de que las variables adicionales en el modelo 'grande' no tienen poder explicativo lineal, la estadística se distribuye como una F condfR-dfBydfBgrados de libertad.

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

¿Cuál es la distribución, sin embargo, bajo la alternativa? Supongo que es una F no central (espero que no sea doblemente no central), pero no puedo encontrar ninguna referencia sobre cuál es exactamente el parámetro de no centralidad. Supongo que depende de los verdaderos coeficientes de regresión , y probablemente de la matriz de diseño X , pero más allá de eso no estoy tan seguro.βX

shabbychef
fuente

Respuestas:

9

El parámetro de no centralidad es , la proyección para el modelo restringido es P r , β es el vector de parámetros verdaderos, X es la matriz de diseño para el modelo sin restricciones (verdadero), | El | x | El | es la normaδ2PrβX||x||

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

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

Deberías encontrar esto en Mardia, Kent y Bibby. (1980) Analisis multivariable.

lince
fuente
¡Excelente! ¿Debería la norma ser cuadrada? De lo contrario, parece que las unidades importan? Usted afirma que es 'suma de cuadrados', así que creo que es la norma al cuadrado ..
shabbychef
@shabbychef Por supuesto que tienes razón, ¡gracias por entender eso!
caracal
7

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

CDF empírico de lo que debería ser normal

Aquí está el código R (perdón por el estilo, todavía estoy aprendiendo):

#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
fuente
2
+1 para el seguimiento con el código. Siempre es bueno ver eso.
mpiktas