回归F检验的功效是什么?


11

多线性回归中变量子集的经典F检验的形式为 其中是“减少”模型下的平方误差总和,嵌套在“大”模型,而是模型的自由度。两种模式。在“大”模型中的额外变量没有线性解释能力的零假设下,统计量以为和的F分布。SSERBdfdfR-dfBdfB

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

但是,替代方案下的分布是什么?我假设它是一个非中心F(我希望不是双重非中心),但是我找不到关于非中心性参数确切含义的任何参考。我想这取决于真实的回归系数,并且可能取决于设计矩阵,但是除此之外,我不确定。XβX

Answers:


9

非中心参数是,受限模型的投影为,是真实参数的向量,是非受限(true)模型的设计矩阵,是规范: P - [R β X | | x | |δ2PrβX||x||

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

您可以这样读取公式:是在设计矩阵上有条件的期望值的向量。如果将视为经验数据向量,则其在受限模型子空间上的投影为,这将为您提供针对该“数据”的受限模型的预测。因此,与类似,并为您提供该预测的误差。因此给出该误差的平方和。如果受限模型为真,则X X β ý P - [R X β ý X β - P - [R X β ÿ - ÿ | | X β - P - [R X β | | 2 X β X - [R P - [R X β = X β 0E(y|X)=XβXXβyPrXβy^XβPrXβyy^||XβPrXβ||2Xβ已经在和定义的子空间内,因此noncentrality参数为。XrPrXβ=Xβ0

您应该在Mardia,Kent和Bibby中找到它。(1980)。多元分析。


大!规范应该平方吗?否则似乎单位很重要?幽州是“平方和”,所以我认为这是正常的平方..
shabbychef

@shabbychef当然您是对的,感谢您抓住了它!
caracal

7

我通过蒙特卡洛实验证实了@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 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.