Qual é o poder do teste F de regressão?

11

O teste F clássico para subconjuntos de variáveis ​​na regressão multilinear tem a forma queSSE(R)é a soma dos erros quadráticos no modelo 'reduzido', que se aninha dentro do modelo 'grande'Bedfsão os graus de liberdade dos dois modelos. Sob a hipótese nula de que as variáveis ​​extras no modelo "grande" não têm poder explicativo linear, a estatística é distribuída como um F comgraus de liberdadedfR-dfBedfB.

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

Qual é a distribuição, no entanto, sob a alternativa? Suponho que seja um F não central (espero não duplamente não central), mas não consigo encontrar nenhuma referência sobre qual é exatamente o parâmetro não central. Acho que depende dos verdadeiros coeficientes de regressão e provavelmente da matriz de design X , mas além disso não tenho tanta certeza.βX

shabbychef
fonte

Respostas:

9

O parâmetro de não centralidade é , a projeção para o modelo restrito é P r , β é o vetor de parâmetros verdadeiros, X é a matriz de design do modelo irrestrito (verdadeiro), | | x | | é a 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

Você deve encontrar isso em Mardia, Kent & Bibby. (1980). Análise multivariada.

caracal
fonte
ótimo! a norma deve ser elevada ao quadrado? Caso contrário, parece que as unidades são importantes? Você afirma que é 'soma de quadrados', então eu acho que é a norma quadrado ..
shabbychef
@shabbychef Claro que você está certo, obrigado por assistir!
Caracal
7

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

CDF empírico do que deveria ser normal

Aqui está o código R (perdoe o estilo, ainda estou aprendendo):

#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
fonte
2
+1 para o acompanhamento com o código. Sempre bom ver isso.
Mvctas