残差范数与什么是“好的”残差范数之间的区别

机器算法验证 回归 残差
2022-03-29 14:39:13

我正在做一些基本的数据拟合并探索不同的拟合。我知道残差是样本与估计函数值之间的差异。残差的范数是相关性和数据之间偏差的度量。较低的规范表示更好的拟合。

假设三次拟合的残差范数为 0.85655,线性拟合的残差范数为 0.89182。如果规范是 0.17113 和 0.24916 怎么办?这两者之间的区别是否显着?残差小于 1 的规范是否被认为是好的?如果不是通常被视为“可接受”的剩余规范。

1个回答

因此,我建议使用标准方法来比较嵌套模型。在您的情况下,您考虑两种替代模型,三次拟合是更“复杂”的一种。F 或检验告诉您在添加更多项时,残差平方和或偏差是否显着降低。这很像比较一个仅包含截距的模型(在这种情况下,您只有残差方差)与另一个包含一个有意义的预测变量的模型:这个添加的预测变量是否占响应方差的足够部分?在您的情况下,这相当于说:对 X 和 Y 之间的三次关系进行建模会减少无法解释的方差(等效地,会增加),因此与线性拟合相比,可以更好地拟合数据。χ2R2

它通常被用作响应变量和预测变量之间线性关系的检验,这就是为什么 Frank Harrell 提倡使用受限三次样条而不是假设 Y 和连续 Xs(例如年龄)之间的严格线性关系的原因。

以下示例来自几个月前我正在阅读的一本书(癌症研究中的高维数据分析,第 3 章,第 45 页),但它可以很好地用作说明。这个想法只是将不同类型的模型拟合到模拟数据集,这清楚地突出了响应变量和预测变量之间的非线性关系。真正的生成模型以黑色显示。其他颜色用于不同的模型(受限三次样条、靠近您的 B 样条和 CV 平滑样条)。

library(rms)
library(splines)
set.seed(101)
f <- function(x) sin(sqrt(2*pi*x))
n <- 1000
x <- runif(n, 0, 2*pi)
sigma <- rnorm(n, 0, 0.25)
y <- f(x) + sigma
plot(x, y, cex=.4)
curve(f, 0, 6, lty=2, add=TRUE)
# linear fit
lm00 <- lm(y~x)
# restricted cubic spline, 3 knots (2 Df)
lm0 <- lm(y~rcs(x,3))
lines(seq(0,6,length=1000), 
      predict(lm0,data.frame(x=seq(0,6,length=1000))),
      col="red")
# use B-spline and a single knot at x=1.13 (4 Df)
lm1 <- lm(y~bs(x, knots=1.13))
lines(seq(0,6,length=1000),
      predict(lm1,data.frame(x=seq(0,6,length=1000))), 
      col="green")
# cross-validated smoothed spline (approx. 20 Df)
xy.spl <- smooth.spline(x, y, cv=TRUE)
lines(xy.spl, col="blue")
legend("bottomleft", c("f(x)","RCS {rms}","BS {splines}","SS {stats}"), 
       col=1:4, lty=c(2,rep(1,3)),bty="n", cex=.6)

示例

现在,假设您想比较线性拟合lm00lm1

> anova(lm00, lm1)
Analysis of Variance Table

Model 1: y ~ x
Model 2: y ~ bs(x, knots = 1.13)
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
1    998 309.248                                  
2    995  63.926  3    245.32 1272.8 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

测试的结果将GLMGAM进行比较是很常见的χ2