Python 3.x 如何在Python中计算协方差和相关性而不使用cov和corr?
如果不在Python3中使用cov和corr,我们如何计算两个变量之间的相关性和协方差? 最后,我想编写一个返回三个值的函数:Python 3.x 如何在Python中计算协方差和相关性而不使用cov和corr?,python-3.x,numpy,Python 3.x,Numpy,如果不在Python3中使用cov和corr,我们如何计算两个变量之间的相关性和协方差? 最后,我想编写一个返回三个值的函数: 两个变量独立时为真的布尔值 两个变量的协方差 两个变量的相关性 您可以在此处找到相关性和协方差的定义: 我为协方差写了这部分: ''' ''对于协方差,只需减去相应的平均值,然后将向量相乘(使用点积)。(当然,要确定你使用的是样本协方差还是总体协方差估计——如果你有“足够”的数据,差异将很小,但如果有必要,你仍然应该对其进行解释。) 对于相关性,将协方差除以两者的标准
''对于协方差,只需减去相应的平均值,然后将向量相乘(使用点积)。(当然,要确定你使用的是样本协方差还是总体协方差估计——如果你有“足够”的数据,差异将很小,但如果有必要,你仍然应该对其进行解释。) 对于相关性,将协方差除以两者的标准偏差
至于两列是否独立,那就不那么容易了。对于两个随机变量,我们只需要$\mathbb{E}\left[(X-\mu\ux)(Y-\mu\uy)\right]=0$,其中$\mu\ux、\mu\uy$是两个变量的平均值。但是,当你有一个数据集,你不是在处理实际的概率分布;您正在处理一个样本。这意味着相关性很可能不是精确的$0$,而是接近$0$的值。这是否“足够接近”将取决于您的样本量以及您愿意做出的其他假设。谢谢您的解释。但是你能帮我写代码吗?我将向你展示如何在没有那么多代码的情况下获得相关性:
(x-x.mean())@(y-y.mean())/x.std()/y.std()/n
。你可以对协方差做类似的处理(只是不要除以标准差)。
ans=[]
mean_x , mean_y = x.mean() , y.mean()
n = len(x)
Cov = sum((x - mean_x) * (y - mean_y)) / n
sum_x = float(sum(x))
sum_y = float(sum(y))
sum_x_sq = sum(xi*xi for xi in x)
sum_y_sq = sum(yi*yi for yi in y)
psum = sum(xi*yi for xi, yi in zip(x, y))
num = psum - (sum_x * sum_y/n)
den = pow((sum_x_sq - pow(sum_x, 2) / n) * (sum_y_sq - pow(sum_y, 2) / n), 0.5)
if den == 0: return 0
return num / den