统计检验以确定关系是否是线性的?

机器算法验证 假设检验 线性模型 指定错误
2022-04-14 15:13:14

如果我测量 X 的特定值的(例如 pH 值),例如(例如温度)并且我想测试天气之间的关系是线性的吗?(即 :之间的关系是线性的,之间的关系不是线性的)。YXX=0,10,20,30,...,100XYH0XYH1XY

我的想法

我正在考虑 Pearson 等级测试,但是在进一步阅读时,这似乎实际上不能用于测试线性或模型错误指定测试,但我认为数据集太小,无法通过这样的方法取得任何合理的进展测试。

3个回答

任何等级测试都只会测试单调性,高度非线性的关系当然可以是单调的。所以任何基于等级的测试都没有帮助。

我建议您拟合线性和非线性模型,并评估非线性模型是否通过 ANOVA 解释了大量的方差。这是R中的一个小例子:

set.seed(1)
xx <- runif(100)
yy <- xx^2+rnorm(100,0,0.1)
plot(xx,yy)

线性度

model.linear <- lm(yy~xx)
model.squared <- lm(yy~poly(xx,2))
anova(model.linear,model.squared)

Analysis of Variance Table

Model 1: yy ~ xx
Model 2: yy ~ poly(xx, 2)
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
1     98 1.27901                                  
2     97 0.86772  1   0.41129 45.977 9.396e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

在这种特殊情况下,ANOVA 可以正确识别非线性。

当然,您也可以查看比正方形更高的订单。或使用而不是无限制的多项式。或谐波。这实际上取决于您想到的具体替代方案,而这又取决于您的具体用例。

我非常喜欢 Stephan Kolassa 的基于方差分析的答案。但是,我也想提供一个稍微不同的观点。

首先,考虑您要测试非线性的原因。如果要检验普通最小二乘的假设来估计简单的线性回归模型,请注意,如果您随后要使用估计的模型进行其他检验(例如,检验XY具有统计显着性),由此产生的测试将是一个复合测试,其类型 I 和类型 II 错误率不会是名义错误率。这是多个原因之一,而不是正式测试线性回归的假设,您可能希望使用绘图来了解这些假设是否合理。另一个原因是您执行的测试越多,即使 null 为真,您就越有可能获得显着的测试结果(毕竟,之间关系的线性并不是简单线性回归模型的唯一假设),与这个原因密切相关的事实是假设测试有自己的假设!XY

例如,按照 Stephan Kolassa 的例子,让我们建立一个简单的回归模型:

set.seed(1)
xx <- runif(100)
yy <- xx^2+rnorm(100,0,0.1)
plot(xx,yy)
linear.model <- lm(yy ~ xx)

线性模型的plot函​​数显示了许多图,其目的正是让您了解线性模型和 OLS 估计方法背后的假设的有效性。和响应之间的线性关系假设是否存在偏差XY

plot(linear.model)

在此处输入图像描述

您可以清楚地看到拟合值和残差之间存在二次趋势,因此的线性函数的假设是有问题的。YX

但是,如果您决定使用统计检验来验证线性假设,那么您将面临一个问题,正如 Stephan Kolassa 所指出的,非线性的可能形式有无数种,因此您不可能设计出一个对所有人进行一次测试。你需要决定你的替代方案,然后你可以测试它们。现在,如果您所有的选择都是polynomials,那么您甚至不需要 ANOVA,因为默认情况下R计算正交多项式。让我们测试 4 个备选方案,即线性多项式、二次项、三次项和四次项。当然,查看残差与拟合图,这里没有高于 2 阶模型的证据。但是,我们包括更高程度的模型来展示如何在更一般的情况下进行操作。我们只需要一个拟合来比较所有四种模型:

quartic.model <- lm(yy ~ poly(xx,4))
summary(quartic.model)
Call:
lm(formula = yy ~ poly(xx, 4))

Residuals:
      Min        1Q    Median        3Q       Max 
-0.175678 -0.061429 -0.007403  0.056324  0.264612 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.33729    0.00947  35.617  < 2e-16 ***
poly(xx, 4)1  2.78089    0.09470  29.365  < 2e-16 ***
poly(xx, 4)2  0.64132    0.09470   6.772 1.05e-09 ***
poly(xx, 4)3  0.04490    0.09470   0.474    0.636    
poly(xx, 4)4  0.11722    0.09470   1.238    0.219    

如您所见,一阶和二阶项的p值极低,这意味着线性拟合不足,但三阶和四阶项的p值要大得多,这意味着三阶或更高阶模型没有道理。因此,我们选择二度模型。请注意,这仅是有效的,因为R它正在拟合正交多项式(在拟合原始多项式时不要尝试这样做!)。如果我们使用 ANOVA,结果将是相同的。事实上,这里t统计量的平方等于ANOVA 检验的F统计量:

linear.model <- lm(yy ~ poly(xx,1))
quadratic.model <- lm(yy ~ poly(xx,2))
cubic.model <- lm(yy ~ poly(xx,3))
anova(linear.model, quadratic.model, cubic.model, quartic.model)
Analysis of Variance Table

Model 1: yy ~ poly(xx, 1)
Model 2: yy ~ poly(xx, 2)
Model 3: yy ~ poly(xx, 3)
Model 4: yy ~ poly(xx, 4)
  Res.Df     RSS Df Sum of Sq       F    Pr(>F)    
1     98 1.27901                                   
2     97 0.86772  1   0.41129 45.8622 1.049e-09 ***
3     96 0.86570  1   0.00202  0.2248    0.6365    
4     95 0.85196  1   0.01374  1.5322    0.2188   

例如,6.772^2 = 45.85998,考虑到数值误差,这并不完全是 45.8622,但非常接近。

当您想要探索非多项式模型时,ANOVA 测试的优势就会发挥作用,只要它们都是嵌套的。对于每个的预测变量的子集,则两个或多个模型是嵌套的例如,让我们考虑一个三次样条模型,其中 1 个内部节点位于 xx 的中位数。三次样条基包括线性、二次和三次多项式,因此都是以下 的嵌套模型M1,,MNMiMi+1ilinear.modelquadratic.modelcubic.modelspline.model

spline.model <- lm(yy ~ bs(xx,knots = quantile(xx,prob=0.5)))

quartic.model不是 的嵌套模型spline.model反之亦然),因此我们必须将其排除在 ANOVA 测试之外:

anova(linear.model, quadratic.model,cubic.model,spline.model)
Analysis of Variance Table

Model 1: yy ~ poly(xx, 1)
Model 2: yy ~ poly(xx, 2)
Model 3: yy ~ poly(xx, 3)
Model 4: yy ~ bs(xx, knots = quantile(xx, prob = 0.5))
  Res.Df     RSS Df Sum of Sq       F    Pr(>F)    
1     98 1.27901                                   
2     97 0.86772  1   0.41129 46.1651 9.455e-10 ***
3     96 0.86570  1   0.00202  0.2263    0.6354    
4     95 0.84637  1   0.01933  2.1699    0.1440   

同样,我们看到二次拟合是合理的,但我们没有理由拒绝二次模型的假设,而支持三次拟合或样条拟合替代方案。

最后,如果您还想测试非嵌套模型(例如,您想测试线性模型、样条模型和非线性模型,例如高斯过程),那么我认为没有假设检验为了那个原因。在这种情况下,您最好的选择是交叉验证。

按照@Kolassa 所说的,我建议将非参数模型(类似于三次样条平滑器)拟合到您的数据中,并查看拟合的改进是否显着。

如果我记得很清楚,Hastie 和 Tibshirani 所著的“Generalized Additive Models”一书包含了可用于此目的的测试描述。