Was ist die Kraft des Regressions-F-Tests?

11

Der klassische F-Test für Teilmengen von Variablen in der multilinearen Regression hat die Form wobei die Summe der quadratischen Fehler unter dem 'reduzierten' Modell ist, das im 'großen' Modell ist , und die Freiheitsgrade der zwei Modelle. Unter der Nullhypothese, dass die zusätzlichen Variablen im 'großen' Modell keine lineare Erklärungskraft haben, wird die Statistik als F mit den Freiheitsgraden und .

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

Wie ist die Verteilung jedoch unter der Alternative? Ich nehme an, es ist ein nicht zentrales F (ich hoffe nicht doppelt nicht zentral), aber ich kann keinen Hinweis darauf finden, was genau der nicht zentrale Parameter ist. Ich werde vermuten, dass es von den wahren Regressionskoeffizienten und wahrscheinlich von der Entwurfsmatrix abhängt , aber darüber hinaus bin ich mir nicht so sicher.βX

shabbychef
quelle

Antworten:

9

Der Nichtzentralitätsparameter ist , die Projektion für das eingeschränkte Modell ist P r , β ist der Vektor der wahren Parameter, X ist die Entwurfsmatrix für das uneingeschränkte (wahre) Modell, | | x | | ist die Norm:δ2PrβX||x||

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

Sie können die Formel folgendermaßen lesen: ist der Vektor der erwarteten Werte, der von der Entwurfsmatrix X abhängig ist . Wenn Sie behandeln X β als empirisches Datenvektor y , dann seine Projektion auf das eingeschränkten Modell Subraum ist , was Ihnen die Vorhersage gibt aus dem eingeschränkten Modell für die „Daten“. Folglich ist analog zu und gibt Ihnen den Fehler dieser Vorhersage. DaherE(y|X)=XβXXβyPrXβy^XβPrXβyy^||XβPrXβ||2gibt die Summe der Quadrate dieses Fehlers an. Wenn das eingeschränkte Modell wahr ist, befindet sich bereits innerhalb des durch und definierten Unterraums , sodass der Nicht-Zentralitätsparameter .XβXrPrXβ=Xβ0

Sie sollten dies in Mardia, Kent & Bibby finden. (1980). Multivariate Analyse.

Karakal
quelle
großartig! sollte die Norm quadriert werden? Ansonsten scheint es, als wären die Einheiten wichtig? Sie
sagen,
@shabbychef Natürlich hast du recht, danke, dass du das verstanden hast!
Caracal
7

Ich bestätigte die Antwort von @ caracal mit einem Monte-Carlo-Experiment. Ich habe zufällige Instanzen aus einem linearen Modell (mit der Größe zufällig) generiert, die F-Statistik berechnet und den p-Wert unter Verwendung des Nicht-Zentralitätsparameters δ 2 = | berechnet | X β 1 - X β 2 | | 2 Dann habe ich das empirische cdf dieser p-Werte aufgetragen. Wenn der Nicht-Zentralitätsparameter (und der Code!) Korrekt sind, sollte ich ein nahezu einheitliches PDF erhalten, was der Fall ist:

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

empirische CDF von dem, was normal sein sollte

Hier ist der R-Code (verzeihen Sie den Stil, den ich noch lerne):

#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
quelle
2
+1 für die Nachverfolgung mit dem Code. Immer gut das zu sehen.
mpiktas