【问题标题】:Pearson's Coefficient and Covariance calculation in MatlabMatlab中的皮尔逊系数和协方差计算
【发布时间】:2023-03-14 11:15:01
【问题描述】:

我想在 Matlab 中计算 Pearson's correlation coefficent(不使用 Matlab 的 corr 函数)。

简单地说,我有两个向量 A 和 B(它们都是 1x100),我正在尝试像这样计算皮尔逊系数:

P = cov(x, y)/std(x, 1)std(y,1)

我正在使用 Matlab 的 covstd 函数。我不明白的是,cov 函数返回一个像这样的方阵:

corrAB =
    0.8000    0.2000
    0.2000    4.8000

但我希望一个数字作为协方差,所以我可以得出一个 P(皮尔逊系数)数字。我错过了什么?

【问题讨论】:

  • 你的意思是P = cov(x,y)/sqrt(var(x)*var(y));?对角线应该是 1。非对角线就是你想要的。
  • 你说得对,我更新了问题。上例中的“非对角线”是 0.2000 和 0.2000 吗?那么我应该对它们进行另一个计算还是只使用 0.2?
  • 在你的例子中,0.2 是非对角线。但是,0.8 和 4.8 都应该是 1。所以你的计算有问题。只需执行 corr(x,y) 即可检查。阅读帮助以了解它返回矩阵的原因。第一次也出乎我的意料。
  • 我的数组是这样的:x = [4 5 5 3 5],y = [4 4 0 0 0]。也许正因为如此,才有像 4.8 这样的值。我会阅读文档,谢谢。
  • @RichC:对角线不必为 1。只有当两个样本的方差完全相同时,才会为 1。

标签: matlab correlation pearson


【解决方案1】:

来自文档:

cov(X,Y),其中 X 和 Y 是矩阵 具有相同数量的元素,是 相当于 cov([X(:) Y(:)])。

使用:

C = cov(X,Y);
coeff = C(1,2) / sqrt(C(1,1) * C(2,2))

【讨论】:

  • “coeff”变量是皮尔逊系数吗?或者你的意思是协方差?因为在系数公式中,我需要将协方差除以 X 和 Y 的标准差。
【解决方案2】:

我认为您只是对协方差和协方差矩阵感到困惑,而数学符号和 MATLAB 的函数输入看起来确实相似。在数学中,cov(x,y) 表示两个变量 xycovariance。在 MATLAB 中,cov(x,y) 计算xycovariance matrix。这里cov 是一个函数,xy 是输入。

为了更清楚,让我用C 表示协方差。 MATLAB 的cov(x,y) 返回格式为

的矩阵
C_xx    C_xy
C_yx    C_yy

正如 RichC 所指出的,您需要非对角线 C_xy(请注意,C_xy=C_yx 用于实变量 xy)。为您提供两个变量xy 的皮尔逊系数的 MATLAB 脚本是:

C=cov(x,y);
p=C(2)/(std(x)*std(y));

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 2011-08-12
    • 2021-02-25
    • 1970-01-01
    • 2019-12-12
    • 2012-11-18
    • 2018-07-23
    • 2021-08-29
    • 2018-06-18
    相关资源
    最近更新 更多