位置度量
位置度量概述
常见的位置度量包括百分位数(percentiles)、四分位数(quartiles)以及z分数(z-scores),所有这些都用于指示特定数据点的相对位置。位置度量帮助我们理解单个数据点在整个数据集中的相对位置,而不仅仅是其绝对值。
位置度量的重要性
位置度量在数据分析中至关重要,因为它们提供了数据点相对于整个数据集的上下文。例如,仅知道一个学生在生物考试中得了47分,很难判断这个成绩是好是坏。但是,如果我们知道这个分数处于第90百分位数,我们就能理解这个学生相对于其他考生的表现如何。位置度量使数据更具解释性和可比性。
在本节中,我们将详细探讨三种主要的位置度量:百分位数、四分位数和z分数,以及它们在数据分析中的应用。
百分位数(Percentiles)
百分位数提供了一种评估和比较数值分布以及特定数据点相对于整个数据集位置的方法,通过指示低于它的数据点的百分比来实现。具体来说,百分位数是一个百分之一的尺度上的值,表示分布中等于或低于它的百分比。例如,如果一个学生得知自己在生物考试中处于第90百分位数,这个百分位数表明该学生的考试分数高于所有其他参加考试的学生的90%。这与说该学生的分数使其处于所有参加生物考试的学生中的前10%是相同的。因此,即使实际分数是47分,这个处于第90百分位数的学生在考试中表现非常好。
要计算百分位数,必须将数据从最小到最大排序,然后将排序后的数据分成百分之一。如果您在能力测试中处于第80百分位数,这并不一定意味着您在测试中得了80分。这意味着80%的测试分数与您的分数相同或低于您的分数,而剩余20%的分数与您的分数相同或高于您的分数。
百分位数的应用
百分位数对于比较许多类型的值非常有用。例如,股票市场共同基金可能会报告该基金过去一年的表现在同行组所有共同基金中处于第80百分位数。这表明该基金的表现优于同行组中80%的其他基金。这也表明20%的基金表现优于该特定基金。
百分位数的计算方法
要计算数据集中特定数据值的百分位数,首先将数据集从最小到最大排序,并计算数据集中的数据值数量。找到感兴趣的测量值,并计算有多少数据值低于该测量值。然后,该测量值的百分位数计算如下:
其中:
- n 是低于测量值的数据值数量
- N 是数据值总数
问题:以下有序数据集代表15名员工在能力测试中的得分:
51, 63, 65, 68, 71, 75, 75, 77, 79, 82, 88, 89, 89, 92, 95
确定在能力测试中得分为88的员工的百分位数。
解决方案:
- 数据集已经按从小到大的顺序排列
- 数据值总数 N = 15
- 对于得分88,低于该分数的数据值有:51, 63, 65, 68, 71, 75, 75, 77, 79, 82(共10个值)
- 因此,n = 10
- 百分位数 = (10 / 15) × 100% ≈ 66.67%
因此,在能力测试中得分为88的员工处于第66.67百分位数,这意味着该员工的得分高于约66.67%的其他员工。
百分位数的解释
百分位数的解释需要理解以下几点:
- 相对位置:百分位数表示数据点在数据集中的相对位置,而不是绝对值。
- 百分比解释:第k百分位数意味着大约k%的数据值小于或等于该值,而(100-k)%的数据值大于或等于该值。
- 不是分数:百分位数与测试中的实际得分或百分比不同。第90百分位数并不意味着答对了90%的问题。
四分位数(Quartiles)
虽然百分位数将数据分成100个相等的部分,但四分位数将数据分成四分,即四个相等的部分。要找到四分位数,首先找到中位数,或第二四分位数。第一四分位数,Q₁,是数据下半部分的中值,第三四分位数,Q₃,是数据上半部分的中值。
四分位数与百分位数的对应关系
请注意四分位数与百分位数之间的以下对应关系:
- 第一四分位数对应于第25百分位数
- 第二四分位数(即中位数)对应于第50百分位数
- 第三四分位数对应于第75百分位数
问题:考虑以下有序数据集,它代表运动员完成40码跑的时间(以秒为单位):
5.4, 6.0, 6.3, 6.8, 7.1, 7.2, 7.4, 7.5, 7.9, 8.2, 8.7
解决方案:
- 首先找到中位数(第二四分位数,Q₂):
- 数据值数量为11(奇数)
- 中位数是第6个值:7.2秒
- 因此,Q₂ = 7.2秒
- 然后找到第一四分位数(Q₁):
- 数据下半部分:5.4, 6.0, 6.3, 6.8, 7.1
- 下半部分的中位数是第3个值:6.3秒
- 因此,Q₁ = 6.3秒
- 最后找到第三四分位数(Q₃):
- 数据上半部分:7.4, 7.5, 7.9, 8.2, 8.7
- 上半部分的中位数是第3个值:7.9秒
- 因此,Q₃ = 7.9秒
因此,四分位数为:Q₁ = 6.3秒,Q₂ = 7.2秒,Q₃ = 7.9秒。
四分位距(IQR)
四分位距(IQR)是一个表示数据中间一半或中间50%的分散程度的数字。它是第三四分位数Q₃与第一四分位数Q₁之间的差值。
请注意,IQR提供了一种排除异常值的变异性度量。
在示例3.11中,IQR可以计算为:
使用四分位数检测异常值
四分位数和IQR可用于标记数据集中的可能异常值。例如,如果一家公司的大多数员工收入约为50,000美元,而该公司CEO的收入为250万美元,那么我们认为CEO的薪水是一个异常数据值,因为这个薪水与数据集中的所有其他薪水显著不同。异常数据值也可能是远低于数据集中其他数据值的值,因此如果一名员工只赚15,000美元,那么这名员工的低薪水也可能被视为异常值。
要检测异常值,您可以使用四分位数和IQR来计算异常值的下限和上限。然后,任何低于下限或高于上限的数据值都将被标记为异常值。应进一步调查这些数据值,以确定异常情况的性质以及数据值是否有效。
要计算异常值的下限和上限,请使用以下公式:
这些公式通常使用1.5作为截止值来识别数据集中的异常值。
问题:计算以下13个房屋价格的IQR,并确定是否有任何房屋价格值是潜在的异常值。数据值以美元为单位。
389,950, 230,500, 158,000, 479,000, 639,000, 114,950, 5,500,000, 387,000, 659,000, 529,000, 575,000, 488,800, 1,095,000
解决方案:
- 首先,将数据按从小到大的顺序排列:
114,950, 158,000, 230,500, 387,000, 389,950, 479,000, 488,800, 529,000, 575,000, 639,000, 659,000, 1,095,000, 5,500,000
- 找到中位数(Q₂):
- 数据值数量为13(奇数)
- 中位数是第7个值:488,800美元
- 因此,Q₂ = 488,800美元
- 找到第一四分位数(Q₁):
- 数据下半部分:114,950, 158,000, 230,500, 387,000, 389,950, 479,000
- 下半部分的中位数是第4个值:387,000美元
- 因此,Q₁ = 387,000美元
- 找到第三四分位数(Q₃):
- 数据上半部分:529,000, 575,000, 639,000, 659,000, 1,095,000, 5,500,000
- 上半部分的中位数是第4个值:659,000美元
- 因此,Q₃ = 659,000美元
- 计算IQR:
- IQR = Q₃ – Q₁ = 659,000 – 387,000 = 272,000美元
- 计算异常值的下限和上限:
- 下限 = Q₁ – (1.5 × IQR) = 387,000 – (1.5 × 272,000) = 387,000 – 408,000 = -21,000美元
- 上限 = Q₃ + (1.5 × IQR) = 659,000 + (1.5 × 272,000) = 659,000 + 408,000 = 1,067,000美元
- 识别异常值:
- 检查是否有任何数据值低于下限(-21,000美元)或高于上限(1,067,000美元)
- 值5,500,000美元高于上限1,067,000美元
- 因此,5,500,000美元是一个潜在的异常值
因此,IQR为272,000美元,而房屋价格5,500,000美元是一个潜在的异常值。
z分数(z-scores)
z分数是数据集中条目位置的度量,它利用了数据的均值和标准差。它表示数据值与均值相差的标准差数量。例如,假设在某个社区,房屋的平均售价为350,000美元,标准差为40,000美元。某特定房屋售价为270,000美元。基于该房屋的售价,我们可以计算该房屋相对于同一社区其他房屋销售的相对地位。
测量的相应z分数考虑了给定测量值与整个总体的均值和标准差。z分数计算的公式如下:
其中:
- x 是测量值
- μ 是均值
- σ 是标准差
请注意,当测量值低于均值时,相应的z分数将为负值。如果测量值恰好等于均值,则相应的z分数将为零。如果测量值高于均值,则相应的z分数将为正值。
z分数的解释
z分数表示数据点与均值的标准差距离:
- z = 0:数据点等于均值
- z > 0:数据点高于均值
- z < 0:数据点低于均值
- |z| = 1:数据点距离均值1个标准差
- |z| = 2:数据点距离均值2个标准差
- |z| = 3:数据点距离均值3个标准差
使用z分数识别异常值
z分数也可用于识别异常值。由于z分数测量数据值与均值的标准差距离,z分数为3将表示一个高于均值3个标准差的数据值。这将表示一个显著偏离均值的数据值,通常,z分数小于-3或大于+3可用于标记异常值。
问题:对于示例3.12中的房屋示例,x值是房屋价格270,000美元,均值μ是350,000美元,标准差σ是40,000美元。计算z分数。
解决方案:
使用z分数公式:
因此,房屋价格270,000美元的z分数为-2,这意味着该价格低于均值2个标准差。虽然这是一个相对较低的房价,但根据常用的±3标准差标准,它不被视为异常值。
z分数的应用
标准化和比较
z分数的主要应用之一是标准化不同尺度的数据,使它们具有可比性。例如,如果要比较学生在数学考试(满分100分)和英语考试(满分200分)中的表现,可以将两个分数转换为z分数,从而在同一尺度上进行比较。
正态分布中的应用
在正态分布中,z分数与百分位数有固定的对应关系。例如,z分数为0对应于第50百分位数,z分数为1大约对应于第84百分位数,z分数为-1大约对应于第16百分位数。这种对应关系使得在正态分布中可以轻松转换z分数和百分位数。
使用Python计算位置度量
由于计算位置度量的复杂性,通常利用技术来计算这些度量。在Python中,我们可以使用多个库来计算位置度量,包括NumPy、Pandas和Statistics库。下面是一些示例:
使用NumPy计算位置度量
import numpy as np
# 示例数据:员工能力测试得分
data = np.array([51, 63, 65, 68, 71, 75, 75, 77, 79, 82, 88, 89, 89, 92, 95])
# 计算百分位数
# 计算得分为88的百分位数
score = 88
percentile = (np.sum(data < score) / len(data)) * 100
print(f"得分为{score}的百分位数: {percentile:.2f}%") # 输出: 得分为88的百分位数: 66.67%
# 使用np.percentile计算特定百分位数的值
p25 = np.percentile(data, 25)
p50 = np.percentile(data, 50) # 中位数
p75 = np.percentile(data, 75)
print(f"第25百分位数: {p25}") # 输出: 第25百分位数: 68.0
print(f"第50百分位数(中位数): {p50}") # 输出: 第50百分位数(中位数): 77.0
print(f"第75百分位数: {p75}") # 输出: 第75百分位数: 89.0
# 计算四分位数
q1 = np.percentile(data, 25)
q2 = np.percentile(data, 50) # 中位数
q3 = np.percentile(data, 75)
print(f"第一四分位数(Q1): {q1}") # 输出: 第一四分位数(Q1): 68.0
print(f"第二四分位数(Q2/中位数): {q2}") # 输出: 第二四分位数(Q2/中位数): 77.0
print(f"第三四分位数(Q3): {q3}") # 输出: 第三四分位数(Q3): 89.0
# 计算四分位距(IQR)
iqr = q3 - q1
print(f"四分位距(IQR): {iqr}") # 输出: 四分位距(IQR): 21.0
# 计算异常值的边界
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"异常值下界: {lower_bound}") # 输出: 异常值下界: 36.5
print(f"异常值上界: {upper_bound}") # 输出: 异常值上界: 120.5
# 识别异常值
outliers = data[(data < lower_bound) | (data > upper_bound)]
print(f"异常值: {outliers}") # 输出: 异常值: []
# 计算z分数
mean = np.mean(data)
std = np.std(data, ddof=1) # ddof=1表示样本标准差
z_scores = (data - mean) / std
print(f"均值: {mean:.2f}") # 输出: 均值: 77.27
print(f"标准差: {std:.2f}") # 输出: 标准差: 12.54
print(f"z分数: {z_scores}")
# 识别z分数异常值(|z| > 3)
z_outliers = data[np.abs(z_scores) > 3]
print(f"z分数异常值: {z_outliers}") # 输出: z分数异常值: []
使用Pandas计算位置度量
import pandas as pd
# 示例数据:房屋价格(单位:千美元)
home_prices = [389.95, 230.5, 158, 479, 639, 114.95, 5500, 387, 659, 529, 575, 488.8, 1095]
# 创建DataFrame
df = pd.DataFrame({'Home_Price': home_prices})
# 使用describe()方法获取基本统计信息
description = df.describe()
print(description)
"""
输出:
Home_Price
count 13.000000
mean 849.619231
std 1409.423428
min 114.950000
25% 387.000000
50% 488.800000
75% 659.000000
max 5500.000000
"""
# 计算百分位数
# 计算得分为5500的百分位数
price = 5500
percentile = (df['Home_Price'].lt(price).sum() / len(df)) * 100
print(f"价格为{price}千美元的百分位数: {percentile:.2f}%") # 输出: 价格为5500千美元的百分位数: 92.31%
# 使用quantile方法计算特定百分位数的值
p25 = df['Home_Price'].quantile(0.25)
p50 = df['Home_Price'].quantile(0.5) # 中位数
p75 = df['Home_Price'].quantile(0.75)
print(f"第25百分位数: {p25}") # 输出: 第25百分位数: 387.0
print(f"第50百分位数(中位数): {p50}") # 输出: 第50百分位数(中位数): 488.8
print(f"第75百分位数: {p75}") # 输出: 第75百分位数: 659.0
# 计算四分位数
q1 = df['Home_Price'].quantile(0.25)
q2 = df['Home_Price'].quantile(0.5) # 中位数
q3 = df['Home_Price'].quantile(0.75)
print(f"第一四分位数(Q1): {q1}") # 输出: 第一四分位数(Q1): 387.0
print(f"第二四分位数(Q2/中位数): {q2}") # 输出: 第二四分位数(Q2/中位数): 488.8
print(f"第三四分位数(Q3): {q3}") # 输出: 第三四分位数(Q3): 659.0
# 计算四分位距(IQR)
iqr = q3 - q1
print(f"四分位距(IQR): {iqr}") # 输出: 四分位距(IQR): 272.0
# 计算异常值的边界
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"异常值下界: {lower_bound}") # 输出: 异常值下界: -21.0
print(f"异常值上界: {upper_bound}") # 输出: 异常值上界: 1067.0
# 识别异常值
outliers = df[(df['Home_Price'] < lower_bound) | (df['Home_Price'] > upper_bound)]
print(f"异常值:\n{outliers}")
"""
输出:
Home_Price
11 5500.0
"""
# 计算z分数
mean = df['Home_Price'].mean()
std = df['Home_Price'].std(ddof=1) # ddof=1表示样本标准差
df['Z_Score'] = (df['Home_Price'] - mean) / std
print(f"均值: {mean:.2f}") # 输出: 均值: 849.62
print(f"标准差: {std:.2f}") # 输出: 标准差: 1409.42
print("带z分数的DataFrame:")
print(df)
# 识别z分数异常值(|z| > 3)
z_outliers = df[np.abs(df['Z_Score']) > 3]
print(f"z分数异常值:\n{z_outliers}")
"""
输出:
Home_Price Z_Score
11 5500.0 3.299828
"""
使用Statistics库计算位置度量
import statistics
# 示例数据:员工能力测试得分
data = [51, 63, 65, 68, 71, 75, 75, 77, 79, 82, 88, 89, 89, 92, 95]
# 计算百分位数
# 计算得分为88的百分位数
score = 88
percentile = (sum(1 for x in data if x < score) / len(data)) * 100
print(f"得分为{score}的百分位数: {percentile:.2f}%") # 输出: 得分为88的百分位数: 66.67%
# 计算中位数(第50百分位数)
median = statistics.median(data)
print(f"中位数(第50百分位数): {median}") # 输出: 中位数(第50百分位数): 77
# 计算四分位数
# Statistics库没有直接计算四分位数的函数,我们需要手动计算
sorted_data = sorted(data)
n = len(sorted_data)
# 第一四分位数(Q1)
if n % 2 == 0:
lower_half = sorted_data[:n//2]
else:
lower_half = sorted_data[:n//2]
q1 = statistics.median(lower_half)
print(f"第一四分位数(Q1): {q1}") # 输出: 第一四分位数(Q1): 68
# 第二四分位数(Q2/中位数)
q2 = statistics.median(data)
print(f"第二四分位数(Q2/中位数): {q2}") # 输出: 第二四分位数(Q2/中位数): 77
# 第三四分位数(Q3)
if n % 2 == 0:
upper_half = sorted_data[n//2:]
else:
upper_half = sorted_data[n//2+1:]
q3 = statistics.median(upper_half)
print(f"第三四分位数(Q3): {q3}") # 输出: 第三四分位数(Q3): 89
# 计算四分位距(IQR)
iqr = q3 - q1
print(f"四分位距(IQR): {iqr}") # 输出: 四分位距(IQR): 21
# 计算异常值的边界
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"异常值下界: {lower_bound}") # 输出: 异常值下界: 36.5
print(f"异常值上界: {upper_bound}") # 输出: 异常值上界: 120.5
# 识别异常值
outliers = [x for x in data if x < lower_bound or x > upper_bound]
print(f"异常值: {outliers}") # 输出: 异常值: []
# 计算z分数
mean = statistics.mean(data)
std = statistics.stdev(data) # 样本标准差
z_scores = [(x - mean) / std for x in data]
print(f"均值: {mean:.2f}") # 输出: 均值: 77.27
print(f"标准差: {std:.2f}") # 输出: 标准差: 12.54
print(f"z分数: {z_scores}")
# 识别z分数异常值(|z| > 3)
z_outliers = [x for x, z in zip(data, z_scores) if abs(z) > 3]
print(f"z分数异常值: {z_outliers}") # 输出: z分数异常值: []
DataFrame.describe()方法
Pandas的DataFrame.describe()方法计算数据集每列的不同位置度量。参见图3.4中的min、25%、50%、75%和max。例如,在电影利润数据集中,describe()方法的输出可能显示评分的最小值为3.3,时长的最小值为69,美国毛收入的最小值为0.01百万美元,全球毛收入的最小值为1.766亿美元。评分的最大值约为9.2,时长的最大值为238,美国毛收入的最大值约为9.367亿美元,全球毛收入的最大值约为28.47亿美元。对于第25百分位数,评分约为6.2,时长约为101.3,美国毛收入约为9080万美元,全球毛收入约为2.233亿美元。对于第50百分位数(中位数),评分约为6.8,时长约为116,美国毛收入约为1.292亿美元,全球毛收入约为3.093亿美元。对于第75百分位数,评分约为7.4,时长约为130,美国毛收入约为1.871亿美元,全球毛收入约为4.726亿美元。
位置度量的应用
位置度量在数据科学和统计分析中有广泛的应用。以下是一些主要应用领域:
教育评估
学生成绩分析
在教育领域,百分位数广泛用于评估和比较学生的表现。例如,标准化考试(如SAT、GRE)通常报告百分位数分数,而不仅仅是原始分数。这使学生和家长能够理解学生在全国或全球考生中的相对位置。百分位数还可以用于识别需要额外帮助的学生(低百分位数)或适合高级课程的学生(高百分位数)。
医疗健康
生长曲线和健康指标
在儿科医学中,百分位数用于评估儿童的生长发育。医生使用生长曲线图,将儿童的身高、体重和头围与同龄儿童的百分位数进行比较。例如,一个体重处于第5百分位数的儿童可能被认为体重不足,而一个体重处于第95百分位数的儿童可能被认为超重。z分数也常用于医疗测试结果的解释,如骨密度测量或血液检查结果。
金融投资
投资表现评估
在金融领域,百分位数用于评估共同基金、对冲基金和其他投资工具的表现。基金经理经常报告其基金在同类基金中的百分位数排名,以展示其相对表现。例如,一个处于第80百分位的基金意味着它优于80%的同类基金。z分数也用于金融风险管理,以评估投资组合的风险和回报特征。
质量控制
制造过程监控
在制造业中,四分位数和IQR用于监控产品质量的一致性。通过计算产品尺寸、重量或其他关键指标的IQR,质量控制专家可以识别生产过程中的变异。异常值检测使用四分位数方法或z分数方法来识别不符合规格的产品,从而触发调查和纠正措施。
社会科学
收入和财富不平等研究
在社会科学研究中,百分位数广泛用于研究收入和财富分配。例如,研究人员经常报告收入分布的第10、第50(中位数)和第90百分位数,以了解经济不平等的程度。基尼系数等不平等度量也是基于百分位数计算的。这些研究有助于政策制定者了解和解决社会经济不平等问题。
总结
位置度量是数据分析中的基本工具,它们提供了关于数据点在数据集中相对位置的重要信息。在本节中,我们讨论了三种主要的位置度量:百分位数、四分位数和z分数。
百分位数(Percentiles)
百分位数将数据分成100个相等的部分,表示低于特定值的数据百分比。百分位数特别适用于评估和比较个体在总体中的相对位置,如考试成绩、投资表现或儿童生长发育。百分位数的解释直观,易于理解,因此在许多领域都有广泛应用。
四分位数(Quartiles)
四分位数将数据分成四个相等的部分,包括第一四分位数(Q₁,第25百分位数)、第二四分位数(Q₂,中位数,第50百分位数)和第三四分位数(Q₃,第75百分位数)。四分位数和四分位距(IQR)提供了数据分布的中间50%的变异性度量,并且是识别异常值的强大工具。四分位数方法对异常值不敏感,因此在存在异常值的数据集中特别有用。
z分数(z-scores)
z分数表示数据点与均值的标准差距离,是一个标准化的位置度量。z分数的主要优势在于它允许比较不同尺度和单位的数据。z分数也是识别异常值的常用方法,通常将|z| > 3的数据点视为异常值。在正态分布中,z分数与百分位数有固定的对应关系,这使得它们在统计分析中非常有用。
选择合适的位置度量
选择哪种位置度量取决于数据的特性和分析的目的:
场景 | 推荐的位置度量 | 原因 |
---|---|---|
评估个体在总体中的相对表现 | 百分位数 | 直观易懂,广泛用于教育和金融领域 |
描述数据分布的五数概括 | 四分位数 | 提供最小值、Q₁、中位数、Q₃和最大值的完整描述 |
识别异常值 | 四分位数和IQR或z分数 | 提供客观的异常值检测标准 |
比较不同单位或尺度的数据 | z分数 | 标准化数据,使不同尺度的数据具有可比性 |
正态分布中的统计分析 | z分数 | 与正态分布的性质紧密相关,便于概率计算 |
全面了解数据分布特征 | 多种位置度量的组合 | 不同位置度量提供不同的视角,组合使用可以更全面地理解数据 |
实际应用中的考虑
在实际应用中,选择位置度量时还应考虑以下因素:
- 数据分布:数据是否对称,是否存在偏斜或异常值
- 数据类型:数据是数值型、分类型还是顺序型
- 分析目的:是描述数据、比较个体、识别异常值还是进行统计推断
- 受众:结果将呈现给谁,他们对统计概念的理解程度如何
通过理解各种位置度量的特性和适用场景,数据科学家可以选择最合适的统计指标来分析和解释数据,从而得出准确和有意义的结论。位置度量与中心度量和变异度量相结合,提供了对数据集特征的全面描述,是数据科学和统计分析中不可或缺的工具。