确定两个变量是线性还是非线性甚至不相关的最佳编程方法是什么

机器算法验证 相关性 Python 数据可视化 线性的 非线性
2022-01-19 19:30:40

确定两个预测变量是线性还是非线性甚至不相关的最佳编程方法是什么,可能使用任何包 scipy/statsmodels 或 python 中的其他任何东西。

我知道诸如绘图和手动检查之类的方法。但我正在寻找其他一些编程技术,几乎可以肯定地区分双变量图是线性的还是非线性的,或者它们之间本质上没有关系。

我在某处听说过 KL 散度的概念。不太确定概念和深度,是否真的可以应用于此类问题。

4个回答

以编程方式实现您想要的东西非常困难,因为有许多不同形式的非线性关联。即使查看相关系数或回归系数也无济于事。在考虑这样的问题时,最好参考 Anscombe 的四重奏:

在此处输入图像描述

显然,两个变量之间的关联在每个图中完全不同,但每个变量的相关系数完全相同。

如果您先验地知道可能的非线性关系可能是什么,那么您可以拟合一系列非线性模型并比较拟合优度。但是,如果您不知道可能的非线性关系可能是什么,那么如果不直观地检查数据,我就无法看到如何稳健地完成它。三次样条可能是一种可能性,但它可能无法很好地处理对数、指数和正弦关联,并且可能容易过度拟合。编辑:经过进一步思考,另一种方法是拟合广义加性模型(GAM),该模型将为许多非线性关联提供良好的洞察力,但可能不是正弦关联。

确实,做你想做的事的最好方法是视觉。我们可以立即看到上图中的关系是什么,但是任何程序化方法(例如回归)都必然会出现失败的情况。

所以,我的建议是,如果你真的需要这样做是使用基于二元图图像的分类器。

  1. 使用从随机选择的分布中为一个变量随机生成的数据创建数据集。

  2. 生成具有线性关联(具有随机斜率)的另一个变量并添加一些随机噪声。然后随机选择一个非线性关联并为另一个变量创建一组新值。您可能希望在该组中包含纯随机关联。

  3. 根据 1) 和 2) 中模拟的数据创建两个双变量图,一个是线性的,另一个是非线性的。首先规范化数据。

  4. 重复上述步骤数百万次,或在您的时间范围允许的范围内重复上述步骤

  5. 创建一个分类器,对其进行训练、测试和验证,以对线性图像和非线性图像进行分类。

  6. 对于您的实际用例,如果您的模拟数据的样本大小不同,则采样或重新采样以获得相同的大小。规范化数据,创建图像并将分类器应用于它。

我意识到这可能不是您想要的那种答案,但我想不出一种可靠的方法来使用回归或其他基于模型的方法来做到这一点。

编辑:我希望没有人把这当回事。我的观点是,在双变量数据的情况下,我们应该始终绘制数据。试图以编程方式做任何事情,无论是 GAM、三次样条还是庞大的机器学习方法,基本上都是让分析师无法思考,这是一件非常危险的事情。

请始终绘制您的数据。

线性/非线性不应该是二元决策。不存在通知分析师诸如“绝对线性”之类的事情的神奇阈值。这都是程度的问题。相反,请考虑量化线性度。这可以通过两个竞争模型相对于 Y 的解释变化来测量:一个强制线性,另一个不强制。对于一个不是很好的通用方法的方法是拟合一个受限三次样条函数(又名自然样条),比如 4 节(连接点的数量,这里是允许三阶导数的点的数量)是不连续的)需要是样本量和对关系可能复杂性的期望的函数。

一旦你有线性和灵活的拟合,你可以使用对数似然或R2量化 Y 的解释变化。如RMS中所述,您可以通过采用模型似然比的比率来计算“充分性指数”χ2统计数据(较小的模型除以较大的模型)。越接近 1.0,线性拟合就越合适。或者可以取对应的比例R2计算相对解释的变化。这与计算预测值方差的比率相同。更多关于相对解释的变化在这里

当您事先不知道某事物是线性的时,我们使用此类量化来告知我们关系的性质,但不会更改模型。如果使用标准的常客模型,为了获得准确的 p 值和置信带,必须考虑模型为拟合数据提供的所有机会。这意味着使用样条模型进行估计、检验和置信带。所以你可以说“如果你事先不知道它是线性的,就允许模型是非线性的”。大多数关系是非线性的。

您在这里遇到的最大问题是“非线性关系”定义不明确。如果您允许任何非线性关系,则基本上没有办法判断某些东西是“完全随机”的,还是只是遵循看起来与可能来自“完全随机”设置的东西完全一样的非线性关系。

然而,这并不意味着你没有办法解决这个问题,你只需要更好地修改你的问题。例如,您可以使用标准Pearson 相关性来查找线性关系。如果您想寻找单调关系,您现在可以尝试Spearman 的 Rho如果您想寻找在给定 x 的情况下仍能提供一些预测 y 的能力的潜在非单调关系,您可以查看距离相关性但请注意,当您在所谓的“相关”方面变得更加灵活时,您检测此类趋势的能力就会减弱!

测量线性度相对简单。为了区分非线性关系和根本没有关系,您基本上要求进行卡方检验,其数量等于可能值的数量。对于连续变量,这意味着如果您进行全分辨率测试,每个框只有一个数据点,这显然(或者我希望它很明显)不会产生有意义的结果。如果您有有限数量的值,并且数据点的数量与值的数量相比足够大,则可以进行卡方检验。但是,这将忽略框的顺序。如果您想为考虑到顺序的可能关系赋予特权,您将需要一种更复杂的方法。

回到连续情况,您再次可以选择对一堆不同的分区进行卡方运算。您还可以查看多项式和指数等候选关系。一种方法是进行非线性变换,然后测试线性度。请记住,这可能会导致您可能会发现不直观的结果,例如 x 与 log(y) 可以给出与 exp(x) 与 y 不同的线性 p 值。

在进行多重假设检验时要记住的另一件事是α您选择的是您必须在所有误报之间分配多少概率质量。为了严谨起见,您应该事先决定要在所有假设中分配多少。例如,如果您的α0.05并且您有五个正在测试的替代假设,您可以事先决定只有当其中一个替代假设具有p<0.01.