【问题标题】:Why does stats.linregress return complex r-values for complex input arrays?为什么 stats.linregress 为复杂的输入数组返回复杂的 r 值?
【发布时间】:2023-02-01 01:41:32
【问题描述】:

我正在尝试对两个复杂数组执行线性回归。也就是说,我想找到最合适的线 w=mz+b,其中 m 和 b 都允许是复数,并且 R^2 值 R^2=1-RSS/TSS 是最小化。 (这里的RSS和TSS是残差平方和和平方和之和。)

我知道这可以通过创建设计矩阵、计算 m 和 b 等来完成,但出于好奇,我尝试使用来自 scipy.statslinregress,它返回值:

import numpy as np
from scipy import stats
rng = np.random.default_rng()
x = rng.random(10)+1j*rng.random(10)
y = 1.6*x + rng.random(10)+1j*rng.random(10)
res = stats.linregress(x, y)
print(res)

LinregressResult(slope=(1.5814820568268182-0.004143389169974774j), intercept=. 
(0.37141513243354485+0.4522070413718836j), rvalue=(0.8607413430092087- 
0.002255091256570885j), pvalue=0.00138658952096427, stderr=. 
(0.3306870298601568+0.0024769249452937106j), intercept_stderr=. 
(0.16366363994151886+0.12045799398296754j))

非实数的复值右值有什么意义?这个值的模数是决定系数吗?

【问题讨论】:

    标签: scipy statistics regression


    【解决方案1】:

    Python 的 scipy 库中的函数 stats.linregress 返回复数输入数组的复数 R 值,因为回归线的计算涉​​及输入数组的协方差和标准差的计算。这些统计数据的计算是使用以下公式完成的:

    协方差 = 总和((x - 均值(x))*(y - 均值(y)))/(n - 1) 标准差 = sqrt(sum((x - mean(x)) ** 2) / (n - 1))

    如果输入数组包含复数,这些公式可能会导致复杂的结果。特别是,如果输入数组包含复数,则标准偏差可能很复杂。当标准偏差为复数时,R 值(即协方差除以标准偏差的乘积)的计算结果也将是一个复数。

    一般来说,回归线中出现复数并不奇怪,因为线性回归是线性模型,复数可以用来表示变量之间的复杂关系。复数 R 值的解释并不简单,应谨慎进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 2015-08-16
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多