比较均值太弱:相反,比较分布。
还有一个问题是,是否更需要比较残差的大小(如上所述)或比较残差本身。因此,我对两者都进行了评估。
为了具体说明其含义,这是一些R
代码,通过对x上的y进行回归,比较残差数据(以并行数组和给出),将残差分为三组,方法是将残差切成低于分位数q 0并高于分位数q 1 > q 0,并(通过qq图)比较与这两个组关联的x值的分布。(x,y)x
y
yxq0q1>q0x
test <- function(y, x, q0, q1, abs0=abs, ...) {
y.res <- abs0(residuals(lm(y~x)))
y.groups <- cut(y.res, quantile(y.res, c(0,q0,q1,1)))
x.groups <- split(x, y.groups)
xy <- qqplot(x.groups[[1]], x.groups[[3]], plot.it=FALSE)
lines(xy, xlab="Low residual", ylab="High residual", ...)
}
此函数的第五个参数abs0
,默认情况下,使用残差的大小(绝对值)来形成组。稍后,我们可以将其替换为使用残差本身的函数。
残差用于检测许多东西:异常值,与外生变量的可能相关性,拟合优度和均方差。离群值,就其性质而言,应该很少而且是孤立的,因此在这里将不会发挥有意义的作用。为了使此分析简单,让我们探索最后两个:拟合优度(即 - y关系的线性)和均方差(即残差大小的恒定性)。我们可以通过仿真来做到这一点:xy
simulate <- function(n, beta0=0, beta1=1, beta2=0, sd=1, q0=1/3, q1=2/3, abs0=abs,
n.trials=99, ...) {
x <- 1:n - (n+1)/2
y <- beta0 + beta1 * x + beta2 * x^2 + rnorm(n, sd=sd)
plot(x,y, ylab="y", cex=0.8, pch=19, ...)
plot(x, res <- residuals(lm(y ~ x)), cex=0.8, col="Gray", ylab="", main="Residuals")
res.abs <- abs0(res)
r0 <- quantile(res.abs, q0); r1 <- quantile(res.abs, q1)
points(x[res.abs < r0], res[res.abs < r0], col="Blue")
points(x[res.abs > r1], res[res.abs > r1], col="Red")
plot(x,x, main="QQ Plot of X",
xlab="Low residual", ylab="High residual",
type="n")
abline(0,1, col="Red", lwd=2)
temp <- replicate(n.trials, test(beta0 + beta1 * x + beta2 * x^2 + rnorm(n, sd=sd),
x, q0=q0, q1=q1, abs0=abs0, lwd=1.25, lty=3, col="Gray"))
test(y, x, q0=q0, q1=q1, abs0=abs0, lwd=2, col="Black")
}
此代码接受参数确定线性模型:其系数,误差项的标准偏差,分位数q 0和q 1,尺寸功能,以及独立的数模拟中的试验。第一个参数是每个试验中要模拟的数据量。它产生了一系列的图- (x ,y )y∼β0+β1x+β2x2sd
q0q1abs0
n.trials
n
(x,y)数据,残差的数据以及多次试验的qq图-帮助我们了解建议的试验如何在给定模型(由n
beta,s和确定sd
)上工作。这些图的示例如下所示。
现在让我们使用这些工具,使用残差的绝对值来探索非线性和异方差性的一些现实组合:
n <- 100
beta0 <- 1
beta1 <- -1/n
sigma <- 1/n
size <- function(x) abs(x)
set.seed(17)
par(mfcol=c(3,4))
simulate(n, beta0, beta1, 0, sigma*sqrt(n), abs0=size, main="Linear Homoscedastic")
simulate(n, beta0, beta1, 0, 0.5*sigma*(n:1), abs0=size, main="Linear Heteroscedastic")
simulate(n, beta0, beta1, 1/n^2, sigma*sqrt(n), abs0=size, main="Quadratic Homoscedastic")
simulate(n, beta0, beta1, 1/n^2, 5*sigma*sqrt(1:n), abs0=size, main="Quadratic Heteroscedastic")
xxx与低残差相关联的值; 经过多次试验,出现了可能的qq图的灰色信封。我们对这些包络线如何以及在多大程度上随基本线性模型的变化而感兴趣:强烈的变化意味着良好的区分度。
xxx值。
让我们使用完全相同的数据执行相同的操作,但是自己分析残差。为此,在进行此修改后,重新运行了先前的代码块:
size <- function(x) x
x
也许结合 将这两种技术是可行的。这些模拟(及其变化,有兴趣的读者可以随意进行)表明这些技术并非没有优点。
x(x,y^−x)我们可以预期,所提出的测试不如像Breusch-Pagan这样的基于回归的测试那么强大。
IV
s吗?如果是这样,我看不到这一点,因为剩余拆分已经在使用该信息。您能举一个例子,看看对我来说是新的吗?