用一个简单的例子来解释皮尔逊相关系数的计算方法。
想象你和你的朋友在做一个有趣的游戏:你们分别有一堆卡片,每张卡片上都写着两件事情的信息,比如一张卡片上写着“看了1小时电视”和“得了10分”,另一张写着“看了2小时电视”和“得了20分”,以此类推。
现在,我们想知道,看电视时间和得分之间是否有某种规律,比如看得越多时间电视,分数就越高。皮尔逊相关系数就是帮助我们找出这种规律的工具。
这里的计算方法有点像魔法,让我解释一下:
平均值:首先,我们找出所有看电视时间的平均(平均看了多久电视)和所有分数的平均(平均得了多少分)。
相互比较:然后,我们看每张卡片上的时间和分数比平均值多了还是少了。比如,一张卡片上写着“看了2小时电视”,如果平均看电视时间是1.5小时,那这张卡片上的时间就比平均多了0.5小时。
乘法和求和:接下来,我们把每张卡片上的时间比平均多了多少和分数比平均多了多少相乘,然后把这些乘积加起来。
最后的魔法:最后,还有一些复杂的数学魔法,我们用这些乘积做一些特别的计算,最终得到一个数字,这个数字就是皮尔逊相关系数。
如果这个数字接近1,就像魔法一样告诉我们,看电视时间和分数有很强的关联:看得越多,分数越高。如果这个数字接近0,就意味着看电视时间和分数之间没有什么特别的关系。
就这样,通过这种有点像魔法的计算,我们可以知道两件事情之间是否有某种规律性的联系!
皮尔逊相关系数的计算公式如下:
r = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i − y ˉ ) 2 r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \sum (y_i - \bar{y})^2}} r=∑(xi−xˉ)2∑(yi−yˉ)2∑(xi−xˉ)(yi−yˉ)
其中:
皮尔逊相关系数(Pearson’s correlation coefficient),通常用字母 r r r 来表示,是衡量两个变量之间线性相关程度的一个统计指标。它的值介于 -1 和 1 之间,其中:
皮尔逊相关系数适用于以下情况:
为了得到最可靠和最准确的结果,使用皮尔逊相关系数(Pearson’s correlation coefficient)时,通常建议这三个条件同时满足
:
两个变量都是连续的:皮尔逊相关系数适用于连续变量,比如体重、身高、温度等。如果变量是分类的(如性别、国籍等),则使用皮尔逊相关系数不合适。
两个变量的关系大致是线性的:皮尔逊相关系数衡量的是变量之间的线性关系强度。如果两个变量之间的关系是非线性的,即使它们非常密切相关,皮尔逊相关系数也可能无法正确反映这种关系。
两个变量都近似正态分布:虽然皮尔逊相关系数对于不完全符合正态分布的数据仍然有一定的鲁棒性,但最理想的情况是当两个变量都近似正态分布时。如果数据严重偏离正态分布,使用皮尔逊相关系数可能会导致误导性的结论。
如果这些条件不完全满足,皮尔逊相关系数仍然可以提供有用的信息,但其准确性和解释可能会受到影响。在这种情况下,你可能需要考虑使用其他类型的相关系数,如斯皮尔曼相关系数,它不要求数据是连续的或呈正态分布。
例如,假设你有一组数据记录了学生的学习时间和考试分数。通过计算这两个变量的皮尔逊相关系数,你可以确定是否存在线性关系,以及这种关系的强度。如果相关系数接近 +1 或 -1,这意味着学习时间和考试分数之间存在较强的线性关系。
这里是一个简单的Python应用案例,其中使用皮尔逊相关系数来分析两个变量之间的关系。在这个例子中,我将构造一组数据来模拟学生的学习时间与他们的考试成绩之间的关系。
假设我们有一组学生,我们记录了他们为一次特定考试所花费的学习时间(小时)以及他们在该考试中获得的分数。我们想要分析学习时间和考试成绩之间是否存在线性关系。
我们构造10名学生的数据如下:
下面是使用Python计算皮尔逊相关系数的代码:
import pandas as pd
import scipy.stats as stats
# 构造数据
data = {
'Study Hours': [2, 4, 6, 8, 10, 3, 5, 7, 9, 11],
'Test Scores': [60, 70, 80, 85, 90, 65, 75, 82, 88, 92]
}
df = pd.DataFrame(data)
# 计算皮尔逊相关系数
pearson_corr = df.corr(method='pearson')
print("皮尔逊相关系数:\n", pearson_corr)
# 另一种方法直接使用scipy
pearson_corr_value, _ = stats.pearsonr(df['Study Hours'], df['Test Scores'])
print("皮尔逊相关系数值:", pearson_corr_value)
这段代码首先构造了包含学习时间和考试成绩的数据集,然后使用Pandas的 corr
方法和SciPy的 pearsonr
函数来计算这两个变量之间的皮尔逊相关系数。
运行这段代码后,你会得到一个介于-1到1之间的相关系数值。如果这个值接近1,那就表示学习时间和考试成绩之间存在强正相关,即学习时间越长,考试成绩越好。如果这个值接近0,则表示两者之间没有明显的线性关系。