相关性学习-皮尔逊相关系数2

本文深入浅出地介绍了皮尔逊相关系数的两种理解方式:高中数学层面的直观理解和大学线性代数层面的向量角度理解。通过具体实例演示了如何手动计算皮尔逊相关系数,并提供了R语言实现的相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://segmentfault.com/q/1010000000094674





皮尔逊相关系数理解有两个角度

其一, 按照高中数学水平来理解, 它很简单, 可以看做将两组数据首先做Z分数处理之后, 然后两组数据的乘积和除以样本数

Z分数一般代表正态分布中, 数据偏离中心点的距离.等于变量减掉平均数再除以标准差.(就是高考的标准分类似的处理)

标准差则等于变量减掉平均数的平方和,再除以样本数,最后再开方.

所以, 根据这个最朴素的理解,我们可以将公式依次精简为:


其二, 按照大学的线性数学水平来理解, 它比较复杂一点,可以看做是两组数据的向量夹角的余弦.

皮尔逊相关的约束条件

从以上解释, 也可以理解皮尔逊相关的约束条件:

  • 1 两个变量间有线性关系
  • 2 变量是连续变量
  • 3 变量均符合正态分布,且二元分布也符合正态分布
  • 4 两变量独立

在实践统计中,一般只输出两个系数,一个是相关系数,也就是计算出来的相关系数大小,在-1到1之间;另一个是独立样本检验系数,用来检验样本一致性.

先举个手算的例子

使用维基中的例子:

例如,假设五个国家的国民生产总值分别是1、2、3、5、8(单位10亿美元),又假设这五个国家的贫困比例分别是11%、12%、13%、15%、18%。

创建2个向量.(R语言)

x<-c(1,2,3,5,8)
y<-c(0.11,0.12,0.13,0.15,0.18)

按照维基的例子,应计算出相关系数为1出来.我们看看如何一步一步计算出来的.

x的平均数是:3.8
y的平均数是0.138
所以,

sum((x-mean(x))*(y-mean(y)))=0.308

用大白话来写就是:

(1-3.8)*(0.11-0.138)=0.0784
(2-3.8)*(0.12-0.138)=0.0324
(3-3.8)*(0.13-0.138)=0.0064
(5-3.8)*(0.15-0.138)=0.0144
(8-3.8)*(0.18-0.138)=0.1764

0.0784+0.0324+0.0064+0.0144+0.1764=0.308

同理, 分号下面的,分别是:

sum((x-mean(x))^2)=30.8
sum((y-mean(y))^2)= 0.00308

用大白话来写,分别是:

(1-3.8)^2=7.84 #平方
(2-3.8)^2=3.24 #平方
(3-3.8)^2=0.64 #平方
(5-3.8)^2=1.44 #平方
(8-3.8)^2=17.64 #平方

7.84+3.24+0.64+1.44+17.64=30.8

同理,求得:

sum((y-mean(y))^2)= 0.00308

然后再开平方根,分别是:

30.8^0.5=5.549775
0.00308^0.5=0.05549775

用分子除以分母,就计算出最终结果:

0.308/(5.549775*0.05549775)=1

假设有100人, 一组数据是年龄,平均年龄是35岁,标准差是5岁;另一组数据是发帖数量,平均帖子数量是45份post,标准差是8份帖子.

假设这两组都是正态分布.我们来求这两者的皮尔逊相关系数,R脚本如下:

> x<-rnorm(n=100,mean=35,sd=5)  #创建一组平均数为35,标准差为5,样本数为100的随机数
> y<-rnorm(n=100,mean=45,sd=8) #创建一组平均数为45,标准差为8,样本数为100的随机数
>  cor.test(x,y,method="pearson") #计算这两组数的相关,并进行T检验

然后R输出结果为:

Pearson's product-moment correlation

data:  x and y
t = -0.0269, df = 98, p-value = 0.9786
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1990316  0.1938019
sample estimates:
         cor
-0.002719791

当然,这里是随机数.也可以用非随机的验证一下计算.

皮尔逊相关系数用于网站开发

直接将R与Ruby关联起来

调用很简单,仿照上述例子:

cor(x,y)

就输出系数结果了.

有这么几个库可以参考:

https://github.com/alexgutteridge/rsr...

https://github.com/davidrichards/stat...

https://github.com/jtprince/simpler

简单的相关系数的分类
  • 0.8-1.0 极强相关
  • 0.6-0.8 强相关
  • 0.4-0.6 中等程度相关
  • 0.2-0.4 弱相关
  • 0.0-0.2 极弱相关或无相关

ps : 这个网站开发者不要再次发明轮子,本来用markdown语法写作很爽,结果又不得不花时间来改动.请考虑尽快支持Markdown语法.




### 斯皮尔曼相关性系数皮尔逊相关性系数的区别及应用 #### 定义与性质 斯皮尔曼相关性系数(Spearman Rank Correlation Coefficient)和皮尔逊相关性系数(Pearson Correlation Coefficient)都是用于测量两个变量之间关系强度的指标,但两者基于不同的假设和适用范围。 - **皮尔逊相关性系数**主要用于评估两组连续型数据之间的线性关系程度。它假定数据呈正态分布并具有线性关联特性[^1]。该系数取值范围为[-1, 1],其中正值表示正向线性关系,负值则代表反向线性关系,绝对值越接近于1表明线性关系越强[^3]。 - **斯皮尔曼相关性系数**则是通过比较两组数据排名次序来判断它们间的单调关系而非严格意义上的线性联系[^2]。因此即使原始数值不符合正态分布或者存在非线性的单增/减趋势时,仍能有效反映二者间的关系紧密度。 #### 应用场景对比 | 特征 | 皮尔逊相关性系数 | 斯皮尔曼相关性系数 | |-------------------------|------------------------------------------|----------------------------------------| | 数据类型 | 连续型 | 可处理离散型或有序分类 | | 假设前提 | 需要满足双变量联合正态分布 | 不需任何特定分布形式 | | 关系描述 | 测量的是严格的线性依赖 | 描述更广泛的单调函数映射关系 | 当研究对象的数据呈现明显的直线形变化规律且服从标准概率密度曲线,则优先选用皮尔逊方法;而如果遇到无法确认基础统计特性的复杂情形下,转而考虑采用更为稳健灵活的斯皮尔曼技术会更加合适一些。 ```matlab % MATLAB实现两种相关系数计算示例代码如下: % 输入样本矩阵A (n x m),这里简化成二维列向量a,b作为演示 a = randn(100,1); b=randperm(length(a))'; % 计算皮尔逊相关系数 r_pearson=corr(a,b,'type','Pearson'); % 计算斯皮尔曼相关系数 r_spearman=corr(rankdata(a),rankdata(b),'type','Spearman'); ``` 上述MATLAB脚本展示了如何分别解给定随机数数组`a`与其重新排列版本`b`之间的这两种不同类型的关联指数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值