4.1 数据本身特征的描述

4.1.1 集中趋势

如果只用一个数描述一组数据,你会用什么?毫无疑问,你会选择那个绝大多数数据点都环绕着的“中心”。因为中心所在,即代表着大势所趋。这也是集中趋势之所以成为数据最重要特征的原因。

集中趋势,是描述数据分布中心位置的统计量,它虽然直接给出的是一个位置值,但其深层含义是反映数据向某处聚集的程度。均值、中位数和众数作为常用的度量指标,分别从数值平衡、位置排序和出现频率等不同角度,捕捉数据“聚拢”在那个重心上的强度,从而刻画出数据的“典型值”。在实际应用中,我们需要结合数据的分布形态、测量尺度以及研究目的,来选择最能代表这种“聚集特征”的中心值。

1. 均值(Mean)

均值是所有观测值的平均数,是最常用的集中趋势度量。根据计算方法和应用场景的不同,均值可以分为多种类型:

a). 算术均值

对于一组包含\(n\)个观测值的数据\(x_1, x_2, ..., x_n\),其算术均值为: \[ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i = \frac{x_1 + x_2 + \cdots + x_n}{n} \] 算数平均值的本质是数据的“重心”或“平衡点”。想象一下,如果每个数据点都有相同的“重量”,算术均值就是支点所在的位置,使得两边“重量”相等。算数平均值适用于数据分布相对对称、没有极端异常值的情况。它利用了所有数据点的信息,但对异常值非常敏感。一个极大的异常值会显著拉高均值,一个极小的异常值则会显著拉低均值。

b). 几何均值

对于一组包含\(n\)个正观测值的数据\(x_1, x_2, ..., x_n\),其几何均值为:

\[ G = \sqrt[n]{\prod_{i=1}^{n} x_i} = (x_1 \times x_2 \times \cdots \times x_n)^{1/n} \] 在实际计算中,通常通过对数转换来避免数值溢出问题(连乘导致的数值太大):

\[ \log(G) = \frac{1}{n} \sum_{i=1}^{n} \log(x_i) \]

\[ G = \exp\left( \frac{1}{n} \sum_{i=1}^{n} \log(x_i) \right) \]

几何平均值的本质是数据的“乘积关系”的平均(空间平均)。它描述的是比例变化或增长率的平均效果。它适用于计算增长率,如计算投资的年均回报率、人口的平均增长率等(增长率的本质是连乘关系,而不是相加关系。终值 = 初值 × (1+r₁) × (1+r₂) × … × (1+rₙ),因此,其平均应该是几何平均)。相同的数据,几何均值总是小于或等于算术均值。

c). 调和均值

对于一组包含\(n\)个非零观测值的数据\(x_1, x_2, ..., x_n\),其调和均值为:

\[ H = \frac{n}{\sum_{i=1}^{n} \frac{1}{x_i}} = \frac{n}{\frac{1}{x_1} + \frac{1}{x_2} + \cdots + \frac{1}{x_n}} \]

调和平均值的本质是数据在倒数空间中的平均关系的反映。其核心是处理“在固定总量下,不同速率完成相同任务”的问题。比如,计算完成相同工作量下的平均速度、平均效率。当分子固定时,计算不同分母下的平均密度等。调和平均值对小的异常值极其敏感。一个非常小的值会极大地拉低调和均值。在算术均值、几何均值、调和均值三者中,调和均值最小。

d). 加权均值

对于一组包含\(n\)个观测值的数据\(x_1, x_2, ..., x_n\),每个值对应一个权重\(w_1, w_2, ..., w_n\),其加权均值为:

\[ \bar{x}_w = \frac{\sum_{i=1}^{n} w_i x_i}{\sum_{i=1}^{n} w_i} \]

加权平均值是广义平均值概念。其本质是,在计算平均值时,考虑每个数据点的重要性或贡献度的差异。它适合分组数据,已知各组的均值和样本量,求总均值。或者某些观测值比其他观测值更可靠、更关键或更具代表性的场合(如根据样本量加权、根据调查对象的收入水平加权等)。当所有权重相等时,加权均值就退化为算术均值。

例4-1:

某市总人口100万人,按居住社区类型分为四类。研究者调查得到每类社区的公共服务效率得分及其人口比例:

社区类型 公共服务效率得分 人口比例
A:高端社区 5.0 5%
B:中产社区 2.0 40%
C:工薪社区 2.0 30%
D:老旧社区 0.5 25%

问,这座城市的”典型公共服务效率”是多少分?

# 数据输入
efficiency_scores <- c(5.0, 2.0, 2.0, 0.5)  # 效率得分(分数越高越好)
pop_weights <- c(0.05, 0.40, 0.30, 0.25)    # 人口比例权重

# 1. 算术平均(不考虑权重)
arithmetic_mean <- mean(efficiency_scores)

# 2. 几何平均
geometric_mean <- exp(mean(log(efficiency_scores)))

# 3. 调和平均
harmonic_mean <- 1 / mean(1/efficiency_scores)

# 4. 加权平均
weighted_mean <- weighted.mean(efficiency_scores, pop_weights)

{
  cat("1. 算术平均:", round(arithmetic_mean, 2), "分\n")
  cat("2. 几何平均:", round(geometric_mean, 2), "分\n")
  cat("3. 调和平均:", round(harmonic_mean, 2), "分\n")
  cat("4. 加权平均:", round(weighted_mean, 2), "分\n")
}
## 1. 算术平均: 2.38 分
## 2. 几何平均: 1.78 分
## 3. 调和平均: 1.25 分
## 4. 加权平均: 1.77 分

案例中,算术平均值为2.375分。其含义是:如果我们将四个社区视为平等治理单元,不考虑人口规模和结构差异,那么每个社区的“典型”公共服务效率为2.375分。这是一种基于“平等看待每个社区”理念的参考值。

几何平均值为1.78分,它衡量的是系统在“乘法关系”下的均衡水平。可以理解为:若将城市公共服务视为一个有机整体,其总体效能并非各社区效能的简单相加,而是像“木桶效应”或“链条强度”那样,由各部分之间的相对水平与协调程度共同决定。1.78分代表该城市在考虑发展均衡性时的“系统综合效能”。

调和平均值为1.25分,它测量的是“效率倒数”尺度下的中心趋势。也就是说,如果我们把服务效率得分转化为居民的“烦恼感受度”(效率越低,烦恼越强),那么1.25分就是与全市居民平均烦恼感受相对应的效率水平。这个数值揭示了负面体验在整体感知中的放大效应。

加权平均值为1.625分,这是结合人口规模调整后的现实视角。其含义是:在该城市100万人口中,随机选择一位居民,其所在社区的平均公共服务效率预期约为1.625分。这一数值最接近大多数市民的实际体验,也最能反映全市公共服务水平的真实分布状况。

2 中位数(Median)

对于一组包含\(n\)个观测值的数据\(x_1, x_2, ..., x_n\),首先将数据按升序排列得到有序序列\(x_{(1)}, x_{(2)}, ..., x_{(n)}\),其中\(x_{(1)}\)是最小值,\(x_{(n)}\)是最大值。则中位数的计算公式为:

\[ \text{Median} = \begin{cases} x_{(\frac{n+1}{2})} & \text{如果 } n \text{ 是奇数} \\ \frac{x_{(\frac{n}{2})} + x_{(\frac{n}{2}+1)}}{2} & \text{如果 } n \text{ 是偶数} \end{cases} \]

也就是说,我们将数据从小到大排列,如果数据个数为奇数,中位数就是正中间的那个数;如果数据个数为偶数,中位数是中间两个数的平均值。

中位数的本质是数据的”位置中心”或”50%分界点”。它将数据集恰好分成两半,使得50%的数据点小于或等于中位数 ,50%的数据点大于或等于中位数。因此,中位数具有极强的抗干扰性:它只依赖于数据的排序位置,而不关心具体的数值大小。改变极端值(只要不改变其相对位置)不会影响中位数。对异常值(outliers)不敏感,是稳健的集中趋势度量。

中位数常用于以下一些场合:

  • 数据存在异常值,极端值或数据分布偏斜(Skewed Distribution),在收入分布、房价数据、灾害损失等数据中,少数极端值会显著拉高或拉低算术均值,但中位数不受影响。

  • 顺序数据(Ordinal Data),当数据可以排序但数值差异无意义时(如满意度评分:非常不满意、不满意、一般、满意、非常满意),这时,中位数是自然的集中趋势代表。

  • 当不清楚数据分布形态时,用中位数表达数据的集中趋势是更安全的选择。

例4-2:

假设我们调查了一个由11人组成的群体的年收入情况(单位:万元)。数据如下:

[12, 15, 18, 20, 22, 25, 30, 35, 40, 50, 500]

问,这个群体的代表性收入是多少?

# 1. 输入收入数据
incomes <- c(12, 15, 18, 20, 22, 25, 30, 35, 40, 50, 500)

# 2. 计算算术平均数(均值)和中位数
mean_income <- mean(incomes)
median_income <- median(incomes)

{
  cat("算术平均数:", round(mean_income, 2), "万元\n")
  cat("中位数:", median_income, "万元\n")
}
## 算术平均数: 69.73 万元
## 中位数: 25 万元

案例中,算术平均数为 69.73万元。该数值远高于数据中绝大多数人的实际收入水平,因为它受到一个极高异常值(500万元)的显著拉升。如果仅以“平均收入约70万元”来描述该群体,会严重偏离真实情况,造成“整体普遍高收入”的误导印象。

相比之下,中位数 25万元 更具代表性。它表示在排序后的收入序列中,恰好位于中间位置的人年收入为25万元,即一半人收入低于此值,另一半高于此值。中位数对极端值具有强鲁棒性——即使将500万元改为1000万元甚至更高,只要不改变其中间排序位置,中位数仍保持25万元不变。因此,在存在显著异常值的收入分布中,中位数更具有代表性。

3 众数(Mode)

众数是指在一组数据中出现频率最高的数值。对于数据集\(x_1, x_2, ..., x_n\),众数的数学定义可以表示为:

\[ \text{Mode} = \arg\max_{x} \text{Frequency}(x) \]

其中\(\text{Frequency}(x)\)表示数值\(x\)在数据集中出现的次数。

众数的本质是数据的”频率中心”或”最常见值”,它反映了数据分布的峰值位置,即哪个数值最常出现。与均值和中位数不同,一个数据集可以有:一个众数,两个众数(两个不同数值出现次数相同且最多),多个众数或者无众数(所有数值出现次数相同)。

众数适用于以下一些场合:

  • 分类数据(名义数据),如灾害类型、地区分类、产品类别等,因为均值和中位数对分类数据无意义,众数是唯一可用的集中趋势度量。

  • 了解数据的”热点”或”集中区域”,确定最流行或最典型的类别,如最受欢迎的产品颜色;

  • 数据分布的初步探索,快速了解数据的集中趋势,识别数据分布的多个峰值(多峰分布)。特别是当数据分布不规则时。

例4-3:

假设我们在一座城市中随机调查了15位市民的主要通勤方式,数据如下:

[“地铁”, “公交”, “地铁”, “自驾”, “步行”, “地铁”, “公交”, “地铁”, “自行车”, “地铁”, “步行”, “公交”, “地铁”, “自驾”, “地铁”]

问:哪种是这座城市最具有代表性的通勤方式?

# 1. 输入出行方式数据
transport <- c("地铁", "公交", "地铁", "自驾", "步行", "地铁", "公交", 
               "地铁", "自行车", "地铁", "步行", "公交", "地铁", "自驾", "地铁")

# 2. 计算频数表和众数
freq_table <- table(transport)
mode_value <- names(which.max(freq_table))

{
  cat("出行方式频数分布:\n")
  print(freq_table)
  cat("\n最普遍的出行方式(众数):", mode_value, "\n")
}
## 出行方式频数分布:
## transport
##   步行   地铁   公交   自驾 自行车 
##      2      7      3      2      1 
## 
## 最普遍的出行方式(众数): 地铁

案例中,算术平均数和中位数在此均不适用,因为出行方式属于分类数据(名义数据),各类别之间没有数值大小或顺序关系。相比之下,众数“地铁”更具代表性。它表示在所有出行方式中,“地铁”出现的频数最高(7次),是这座城市最普遍的通勤方式。

4 三种度量的比较

在实际数据分析中,均值、中位数和众数各有其适用场景和局限性。均值充分利用了所有数据信息,但对异常值敏感,适用于对称分布的数据。中位数对异常值稳健,适用于偏态分布或存在极端值的情况。众数适用于分类数据,能够反映最常见的类别,但可能不唯一。

从三者关系来看,在对称分布中,均值、中位数、众数大致相等;在右偏分布中,均值 > 中位数 > 众数;在左偏分布中,均值 < 中位数 < 众数。这种关系可以帮助我们判断数据的分布形态。

表 三种集中趋势度量的核心对比

特性维度 均值 (Mean) 中位数 (Median) 众数 (Mode)
核心定义 所有数值之和除以数值个数(算术平均) 将数据排序后,位于最中间位置的数值 数据集中出现频率最高的数值
计算依据 所有数据点的数值 数据的排序位置 数值的出现频率
适用数据类型 仅适用于数值型数据(定距、定比尺度) 适用于数值型和顺序型数据 适用于所有类型的数据(分类、顺序、数值)
对异常值 非常敏感
(一个极端值会大幅拉高或拉低均值)
稳健,不敏感
(极端值只影响其所在位置,不影响中间值)
不敏感
(除非异常值本身也是高频值)
唯一性 总是唯一 总是唯一 可能不唯一(双峰/多峰分布),或不存在(均匀分布)
数学性质 优良
可用于进一步的代数运算和统计推断(如方差、标准差)
有限
主要用于描述,不便进行复杂运算
最差
几乎无法用于代数运算
最佳适用场景 对称分布(特别是正态分布) 偏斜分布或有异常值的数据集 分类数据或寻找最典型类别

4.1.2 离散趋势

数据的离散趋势是相对于集中趋势而言的。这个很好理解,说某些数据离散而去,首先得定义,中心在哪里。所以,有什么样的集中趋势度量,就有对应的离散趋势度量。

如前所述,集中趋势有均值、中位数、众数。那么,围绕着这些集中趋势构建的离散趋势就是方差/标准差、极差/四分位差、异众比等。

1. 围绕均值的离散趋势:平均绝对离差、方差、标准差与变异系数

当数据呈对称分布且无显著异常值时,均值能够充分利用所有数据信息,作为数据“重心”精确地反映了数据的集聚趋势。其优良的数学性质(如可加性、可导性)使其成为绝大多数参数统计方法的理论基石。围绕均值构建的离散趋势度量也与均值一脉相承,共同构成了经典统计推断的核心框架。

a) 离差(Deviation)

离差,也称为偏差,是最直观的离散程度度量。它指的是单个数据点与数据中心(通常是均值\(\mu\))的简单差值。

\[ 离差_i = x_i - \mu \]

离差为正值表示该数据点高于平均水平,为负值表示该数据点低于平均水平。为零表示该数据点正好等于平均水平。 但离差无法作为数据集整体离散程度的有效指标:将所有数据点的离差直接相加,以衡量整体离散程度时,会得到一个恒为0的结果(均值的定义决定了正负离差会相互抵消)。 \[ \sum_{i=1}^{n} (x_i - \mu) = 0 \]

因此,在度量数据整体离散程度时,我们需要一种方法让正负离差不被抵消。最直观的思路是消除负号。这个思考启发了以下的平均绝对离差的方差。

b). 平均绝对离差 (Mean Absolute Deviation)

平均绝对离差对每个数据点的离差取绝对值,然后计算这些绝对值的平均值,用以衡量的是数据点与均值的“平均距离”。

\[ MAD_{均值} = \frac{\sum_{i=1}^{n} |x_i - \mu|}{n} \] 平均绝对离差在逻辑上非常直接,并且对极端值不敏感,计算起来也简单点。但它的数学性质不是那么好。(主要指绝对值函数在零点不可导,数学处理上更复杂。)为了解决“数学性质不佳”的缺陷,统计学引入了“方差”。

c. 方差(Variance)

方差解决离差之和为0的问题的思路是采用平方的方法消除负号,然后计算这些平方值的平均值。

\[ \sigma^2 = \frac{\sum_{i=1}^{n}(x_i - \mu)^2}{n} \]

方差很好地解决了平均绝对离差数学性质不好的问题:平方函数是光滑的可导函数。这使得方差在数学上更容易进行代数运算和理论推导。许多高级统计理论(如最小二乘法、回归分析、概率论)都建立在方差的基础上。但平方也带来了另一问题“对极端值更敏感”:平方项会放大较大离差的影响。在某些情况下,这是缺点,尽管如此,但在强调重大偏差的场合(如风险管理、质量控制),这反而是一个优点,因为它能更好地警示我们数据中存在的极端情况。

但另一个问题,方差就无法回避了。方差的单位是原始数据单位的平方。例如,如果原始数据是“米”,方差单位就是“平方米”。这使得方差的数值缺乏直观的解释性。为了恢复原始量纲,我们对方差开方。于是,标准差出现了。

d. 标准差 (Standard Deviation)

标准差是方差的平方根。它解决了方差的量纲问题,使其与原始数据的单位一致。

\[ \sigma = \sqrt{\sigma^2} = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \mu)^2}{n}} \]

标准差单位和原始数据一致。我们可以说“平均身高是170cm,标准差是10cm”,这比说“方差是100cm²”要直观得多。于是,标准差成为了围绕均值这个集中趋势的最好的离散趋势度量。然而,在比较多组数据时,标准差受量纲(单位)影响而缺乏直接可比性。为了消除这一限制,统计学引入了变异系数。

e. 变异系数 (Coefficient of Variation)

变异系数是标准差与均值的比值。它是消除了量纲和单位影响后的相对离散度量,使得不同数据集之间可以直接进行比较。

\[ CV = \frac{\sigma}{\mu} \] 变异系数没有单位,是一个纯数值。它的大小直接反映了相对于均值的波动强度。例如,同为 10 的波动,对于 1000 的均值和 10 的均值而言截然不同,变异系数能通过数值大小反映这种差异。因此,我们说“变异系数是0.1”,比单纯比较其他绝对指标更能体现数据的离散程度。

例4-4:

某人调查了朋友圈15个核心朋友的月薪情况,数据如下(单位:元): [3500, 4200, 4800, 5200, 5800, 6500, 7200, 8000, 9000, 10500, 12500, 15000, 18000, 22000, 35000]

他想知道:

  1. 整体来看,平均每个人偏离平均收入多少?

  2. 收入的离散程度有多大?

  3. 这个朋友圈的收入差距如何?

# 输入数据
monthly_salary <- c(3500, 4200, 4800, 5200, 5800, 6500, 
                    7200, 8000, 9000, 10500, 12500, 
                    15000, 18000, 22000, 35000)

n <- length(monthly_salary)
# 计算均值
mean_salary <- mean(monthly_salary)

# 计算离差(Deviation)
deviations <- monthly_salary - mean_salary

# 计算平均绝对离差(Mean Absolute Deviation)
MAD <- mean(abs(deviations))

# 计算方差(Variance)
variance <- var(monthly_salary)*(n-1)/n  # 样本方差

# 计算标准差(Standard Deviation)
std_dev <- sqrt(variance)

# 计算变异系数
CV <-std_dev/mean_salary
{
  cat("平均绝对离差 = ", round(MAD), "元\n")
  cat("方差 = ", round(variance), "元²\n")
  cat("标准差 = ", round(std_dev), "元\n")
  cat("变异系数 = ", round(CV,3), "\n")
}
## 平均绝对离差 =  6236 元
## 方差 =  67565156 元²
## 标准差 =  8220 元
## 变异系数 =  0.737

通过计算平均绝对离差约为 6,236 元,我们回答了第一个问题:平均来看,每个人的实际收入与整体均值相差超过 6,000 元。这个数据直观地反映了个体收入与中心位置的平均距离,表明该群体的收入并非高度集中,而是存在一定的发散性。

其次,标准差为 8,220元,说明收入数据的绝对波动范围较大。结合之前 11,067 元的均值来看,8,220 元的标准差意味着数据在均值上下有显著的摆动,印证了该朋友圈的收入分布并不均衡,个体间的收入差距较明显。

最后,变异系数高达 0.737(73.7%)。通常认为 CV 超过30% 即意味着分化严重,而这里高达 73.7% 的数值不仅说明收入极度悬殊,更意味着平均数的代表性极弱。这表明该朋友圈内部存在严重的“贫富分化”,极少数高收入者拉高了整体的平均水平,使得大多数人实际上“被平均”了。

值得注意的是,这些离散指标的计算均以均值为起点。这既揭示了它们本质上是围绕均值刻画数据的波动特征,也体现了均值对整体数据代表性的强弱。

2. 围绕中位数的离散趋势:极差、四分位差与中位数绝对离差

当数据存在异常值或呈偏态分布时,均值会被拉向拖尾方向,从而失去其“集中趋势”的代表性。相比之下,中位数作为中间值,对极端值不敏感,是更稳健的集聚趋势度量。因此,围绕中位数构建的离散趋势度量也同样重要,它们共同描述了非理想数据的分布形状。

a) 极差(Range)

极差指极端的差异,就是最大值与最小值之差。它概念直观,计算简单,能快速了解数据的总体跨度。但极易受异常值影响:即使只有一个极端值,也会使极差发生巨变,从而完全扭曲我们对数据离散程度的认知。它只取决于两个点,而忽视了所有其他数据点的分布信息。

\[极差 = 最大值 - 最小值\]

因此,极差仅适用于初步数据探查,结合中位数,帮我们了解数据的最大、最小、中间值,以及数据的大致范围。为了弥补极差对异常值极度敏感的缺点,我们引入了四分位差。

b) 四分位差 (Interquartile Range)

中位数是排序以后数据的中间值。我们将这种排序以后的数据分成四段,四分位差是第三四分位数(Q3,第75百分位数)与第一四分位数(Q1,第25百分位数)之差。它包含了中间50%的数据。

\[IQR = Q_3 - Q_1\]

四分位差通过摒弃最高25%和最低25%的数据,有效地排除了潜在异常值的干扰,专注于描述“主体”或“典型”数据的分布范围。四分位差还有一个很好用的功能,识别异常值。我们常用的经验将小于 Q1 - 3 × IQR 或大于 Q3 + 3 × IQR 的点视为极端异常值。常用的数据描述工具,箱线图的核心就是由中位数、Q1、Q3和四分位差定义的,它能非常直观地展示数据的中心、离散、偏态及异常情况。

四分位差是描述偏态分布或有异常值数据离散趋势时的首选指标。在商业分析、社会科学、生物医学等几乎所有存在“不完美”数据的领域,四分位差都是最常用、最实用的稳健离散度度量。

c) 中位数绝对离差 (Median Absolute Deviation)

我们还可以进一步深入,引入离差的思想,衡量中位数与数据之间的关系,由此得到中位数绝对离差。求中位数绝对离差,先计算每个数据点与中位数之差的绝对值,然后求这些绝对值的中位数。公式如下:

\[\text{MAD}_中 = \text{median}( |X_i - \text{median}(X)| )\]

中位数绝对离差比四分位差更稳健,因为四分位差只依赖于Q1和Q3两个值,而\(\text{MAD}_中\)的计算过程中用了两次中位数(一次求中心,一次求离散)。中位数本身就是最稳健的中心度量,因此\(\text{MAD}_中\)继承了这种极致的稳健性。但比起四分位差,它理解和计算起来稍显复杂。我们可以在数据中可能存在大量或非常极端的异常值或者稳定性要求非常高时应用\(\text{MAD}_中\)

例4-5:

一家新开的奶茶店记录了开张9周的营业额。数据如下,单位元。

[5000, 18000, 5200, 5500, 5800, 6000, 6200, 6500, 9000]

问:

1.计算该组数据的极差,并思考它是否真实反映了店铺日常的波动情况?

2.计算四分位差,说明剔除了极端值后,中间 50% 数据的跨度是多少?

3.计算中位数绝对离差,找出最典型的营业额波动偏差值。

4.为什么不用均值体系的标准差方差来衡量典型的波动状况呢?

# 1. 准备数据
sales <- c(5000, 18000, 5200, 5500, 5800, 6000, 6200, 6500, 9000)

# 2. 计算中心 (中位数)
med_sales <- median(sales)

# 3. 计算三个离散指标

# A) 极差
range_sales <- max(sales) - min(sales)

# B) 四分位差 (IQR)
q1_val <- quantile(sales, 0.25)
q3_val <- quantile(sales, 0.75)
iqr_sales <- IQR(sales)

# C) 中位数绝对离差 (MAD)
absolute_differences <- abs(sales - med_sales)
mad_sales_raw <- median(absolute_differences)

{
cat("数据中心 (中位数):", med_sales, "元 -> 代表典型周销量\n")
cat("极差:", range_sales, "元\n")
cat("四分位差:", iqr_sales, "元\n")
cat("中位数绝对离差:", mad_sales_raw, "元\n")
}
## 数据中心 (中位数): 6000 元 -> 代表典型周销量
## 极差: 13000 元
## 四分位差: 1000 元
## 中位数绝对离差: 500 元

该组数据的极差计算结果为 13000 元。然而,这个数值并不能真实反映店铺的日常波动情况,因为它仅仅取决于数据的两个极端端点,完全忽略了中间绝大部分时间的经营状态。

四分位差的计算结果为 1000元。这一指标通过剔除前后各 25% 的数据——即排除了最低的那几周以及包含 9000 元和 18000 元的异常高值周,专注于中间 50% 的常态数据。这表明在店铺的日常经营时段,也就是大多数时候,营业额的集中跨度其实只有 1000 元,生意比表面上看起来要平稳得多。

中位数绝对离差的计算结果为 500 元。作为衡量离散程度最稳健的指标,它揭示了数据点的“典型偏度”。这意味着,除去极个别特殊情况,绝大多数周的实际销售额与典型中位数 6000 元之间的偏差,仅仅维持在 500 元左右。这个数值精准地刻画了店铺经营水位的基本盘。

最后,之所以不用均值体系的标准差或方差来衡量,是因为这组数据明显属于偏态分布,即存在显著的“长尾”效应。如果使用均值,那几个 9000元和18000 元的极端高值会将平均数强行拉高,导致参照系“偏移”,进而使标准差的结果虚高且失真。

可以看出,极差、四分位差与中位数绝对离差 的核心逻辑均建立在中位数参照系之上。这种锚定方式使其天然避免偏态与极值干扰,始终聚焦数据的“主体分布”。从极差到 四分位差再到中位数绝对离差,实质上是不断剥离边缘噪音、聚焦中心稳健性的过程。这些指标不仅揭示了波动特征的内在机理,更体现了中位数作为“最稳健中心”的代表性。

3. 围绕众数的离散趋势:异众比率

异众比率是专门用来衡量分类数据离散程度的指标。它基于数据的众数,用于评估众数作为一组数据“代表”的可靠性或有效性(同样,标准差是衡量均值的代表性,四分位差是衡量中位数的代表性)。表达不属于这个众数类别的数据(即“异众”)所占的比例有多大? \[ \text{异众比率} (V_r) = \frac{\text{总频数} - \text{众数组的频数}}{\text{总频数}} = 1 - \frac{\text{众数组的频数}}{\text{总频数}} \]

异众比的取值范围在\(0 \leq V_r < 1\)。越接近于 0,说明数据高度集中,绝大部分的观测值都落在众数所在的类别里, 众数的代表性约好。反之,异众比越接近于1,说明数据非常分散,众数组的频数只占很小的比例,大量的数据散布在其他类别中,众数的代表性越差。

例4-6:

某社会学研究所为了了解当前社区居民的社会心态,对社区200户居民进行问卷调查。其中一个核心问题是:“您对个人未来五年的生活质量改善趋势持什么看法?”。其中:乐观:110 人、悲观:30 人、 中立/不确定:40 人、无所谓/不关心:20 人

问:

1.计算该组社会心态数据的异众比率。

2.这个数值说明了主流价值观(众数)的代表性如何?

# 1. 准备数据

social_data <- c(rep("乐观", 110), 
                 rep("悲观", 30), 
                 rep("中立", 40), 
                 rep("无所谓", 20))

# 确保数据为因子类型(分类数据)
social_factor <- factor(social_data)

# 2. 计算基础指标
total_respondents <- length(social_factor) # 总频数 N

# 找出众数频数
freq_table_social <- table(social_factor)
mode_freq_social <- as.numeric(max(freq_table_social)) # 众数频数 = 110
mode_category <- names(freq_table_social)[which.max(freq_table_social)] # 众数名称

# 3. 计算异众比率
vr_social <- (total_respondents - mode_freq_social) / total_respondents


cat("异众比率:", vr_social, "\n")
## 异众比率: 0.45

案例中,异众比率为0.45。这个数值说明,虽然“乐观”以 110 票成为了众数,代表了主旋律,但有45% 的人并不认同这一主流趋势(包括悲观、中立和无所谓的群体)。这意味着社区虽然大体乐观,但在基层潜藏着相当规模的迷茫或负面情绪,并没有达成高度的统一。

4.2 数据之间关系的描述

4.2.1 协方差

对于一组数据来说,均值等描述了数据的集中趋势,而方差等描述了他们之间的离散趋势。那如果有两组数据呢?这种两组数据之间的关系,怎么表达呢?统计学引用“共变性”思想,提出了协方差的概念。

协方差(Covariance)

对于两组数据X和Y,协方差衡量的是它们共同变化的趋势。其计算公式为: \[ Cov(X,Y) = \frac{1}{n}\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y}) \]

其中\(x_i, y_i\)是第\(i\)个观测值,\(\bar{x}, \bar{y}\)是X 和 Y 的均值,\(n\)是样本量。可以看出,这个公式描述了\(x_i\)相对于\(\bar{x}\)变化时,\(y_i\)相对于\(\bar{y}\)变化,的共同变化状态。因此,当\(Cov(X,Y) > 0\)时,表明 X 增大(减小),Y 也倾向于增大(减小),两者变化趋势一致性高,是正相关。当\(Cov(X,Y) < 0\)时,表明X 增大(减小),Y 倾向于减小(增大),两者变化趋势的不一致性高,是负相关。如果恰好 \(Cov(X,Y) = 0\)时, X 增大(减小),Y随便,两者没有线性关系。

协方差可以初步衡量两组数据的共变性。但从公式中,我们也可以看出几个问题:首先,它受量纲影响,其大小取决于变量的单位(如身高用 cm 或 m 计算不同)。并且,如果X是以0.1为数量级的,而Y是10000万数量级的,可以想象,X的变化幅度将会被淹没在Y的变化中。其次,协方差的数值范围没有上限,难以比较不同变量对的相关性。第三,协方差仅反映线性关系,如果 X 和 Y 有非线性关系(如抛物线关系),协方差可能为0。最后,协方差对异常值较为敏感,极端值也会显著影响协方差的计算。

为了解决前两个问题,统计学引入了皮尔逊相关系数这个概念。为了解决第三个问题,引入了秩相关系数的概念。为了解决第四个问题,引入了稳健协方差的概念。课本上主要介绍线性相关系数和秩相关系数,至于稳健协方差,大家可以课下探索,给大家一个思考方向,协方差中对异常值的敏感,主要来源于使用均值对数据集中趋势的衡量,稳健协方差通过使用更稳定的统计量(如中位数、分位数)替代均值,减少异常值的影响。

4.2.2 相关系数

a) 皮尔逊相关系数(Pearson Correlation Coefficient)

皮尔逊相关系数可以理解为用标准差标准化后的协方差。它消除了量纲影响,并获得一个介于[-1,1]之间的纯数,使得不同数据集间的相关性可以进行比较。计算公式如下:

\[ \rho = \frac{Cov(X,Y)}{\sigma_X \sigma_Y} \]\(\rho\)= 1 时,完全正线性相关。所有数据点都精确地落在一条斜率为正的直线上。X增加,Y以固定比例增加。当0 <\(\rho\)< 1时,正线性相关。存在一个正向的线性趋势。\(\rho\)值越接近1,线性关系越强,数据点越靠近一条上升的直线。当\(\rho\)= 0时,无线性相关。两变量间没有线性趋势。(这并不意味着两变量独立,它们可能存在非常强的非线性关系(如U型曲线))。 当-1 <\(\rho\)< 0时,负线性相关。存在一个负向的线性趋势。\(\rho\)值越接近-1,线性关系越强,数据点越靠近一条下降的直线。当\(\rho\)= -1时,完全负线性相关。所有数据点都精确地落在一条斜率为负的直线上。X增加,Y以固定比例减少。

皮尔逊相关系数消除了变量单位和量纲的影响,便于不同研究或不同变量对之间的比较,成为了最高效和广泛应用的相关性指标。但在使用它时,我们也需要注意:首先,两个变量都是连续的定量数据。且数据大致符合正态分布或至少是单峰对称分布,数据中没有严重的异常值。其次,我们还需要注意,皮尔逊相关系数只表明了线性相关关系,如果变量间存在强力的非线性关系,\(\rho\)值可能会很小,从而错误地得出“不相关”的结论。为衡量变量间更广义的相关关系,我们引入秩相关系数。

b) 斯皮尔曼秩相关系数(Spearman’s Rank Correlation Coefficient)

线性相关是指两个变量之间的关系可以用一条直线来刻画。这种关系意味着一个变量发生变化时,另一个变量会以一个恒定的比例发生变化。皮尔逊相关系数即完全基于数据本身\((y_i - \bar{y}) = a(x_i - \bar{x})\)的线性关系构造的。这使得皮尔逊相关系数难以捕捉变量之间的非线性关系。

而斯皮尔曼相关系数(\(\rho_s\))则采取了另一种方式,放弃变量精确的数值,转而使用其秩次(排序顺序)。通过计算两组秩次之间的皮尔逊相关系数,衡量两个变量共变关系。计算公式如下:

\[ \rho_s = \frac{\operatorname{Cov}(\operatorname{rank}(X), \operatorname{rank}(Y))}{\sigma_{\operatorname{rank}(X)} \sigma_{\operatorname{rank}(Y)}} \] 斯皮尔曼秩相关系数表达的是变量之间顺序的线性相关系数。其取值范围与皮尔逊相关系数相同,为\([-1, 1]\)。作为一种非参数方法,它不要求数据服从正态分布,适用性更强。并且,由于使用秩次而非原始值,极端值(异常值)的影响被大大减弱,其结果更加稳健。它不仅适用于线性关系,只要两变量存在一致的上升或下降趋势(如指数关系、对数关系),都能被有效检测。但它无法有效捕捉非单调的关系(如U形或倒U形关系)。如果\(r_s\)值接近0,只能说明没有单调关系,但不能断定两变量毫无关联。它适用于衡量数据为等级资料(如满意度评分、名次)、原始数据分布未知或明显非正态、存在异常值、以及怀疑变量间存在单调但非线性时的相关关系。

c) 肯德尔τ系数(Kendall’s Tau Correlation Coefficient)

肯德尔τ系数(通常记为\(\tau\))是另一种基于秩次的相关系数。与斯皮尔曼系数不同,它的计算不是基于秩次的协方差,而是基于数据对的和谐性(concordance)。

它将所有可能的观测对进行分类:

一致对(和谐对):一对观测值\((X_i, Y_i)\)\((X_j, Y_j)\),若\((X_i - X_j)\)\((Y_i - Y_j)\)同号。

不一致对(不和谐对):若\((X_i - X_j)\)\((Y_i - Y_j)\)异号。

其计算公式为: \[ \tau = \frac{(\text{一致对数目}) - (\text{不一致对数目})}{n(n-1)/2} \] 分母\(n(n-1)/2\)是所有可能的观测对总数。肯德尔相关系数的取值范围同样为\([-1, 1]\)

肯德尔相关系数\(\tau\)值的解释更直观一些:随机抽取两个观测对,它们处于一致状态的概率减去处于不一致状态的概率之差。在大部分情况下,它和斯皮尔曼相关系数功能类似。但是在小样本数据、数据中存在大量相同秩次(重复值)或者需要清晰的概率解释时,肯德尔相关系数会更适合一些。

d) 非线性非单调关系 (Non-linear and non-monotonic relationship)

前面的相关系数,要么是捕捉线性关系,要么捕捉非线性单调关系。那么,如果变量之间是非线性非单调的关系怎么办呢?这些关系可能呈现为“U形”、“倒U形”、“波浪形”或“周期性”等模式。由于本课程只是初级教程,我们不在这方面进行过多拓展。但可以留个悬念,让同学们期待后面的学习:我们可以通过方差分析、回归分析等更综合的方法衡量这种更复杂的关系。

例4-7:

某省教育厅对该省内注册在案的 20 所高职院校进行了全量考核。研究者旨在分析“生师比 (\(X\))”(学生数/教师数)与“就业率 (\(Y\))” 之间的宏观依存关系。数据如下:

指标 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
\(X\) (生师比) 12 14 15 16 18 18 20 22 22 24 24 25 26 28 30 32 35 38 40 42
\(Y\) (就业率%) 92 94 90 88 85 89 80 78 82 75 65 70 68 64 60 59 58 55 52 50

问:

1.从全量数据看,生师比和就业率是如何协同变化的?

2.这两者的线性相关强度究竟有多大?

3.如果教育厅只关心学校在全省的相对排名(比如某校生师比排第几,就业率排第几),这种排名的一致性如何?

4.这种一致性在全省所有可能的配对比较中,概率有多大?

# 1. 准备数据
X <- c(12, 14, 15, 16, 18, 18, 20, 22, 22, 24, 24, 25, 26, 28, 30, 32, 35, 38, 40, 42)
Y <- c(85, 92, 75, 90, 85, 70, 82, 80, 65, 75, 68, 72, 60, 65, 58, 62, 55, 48, 45, 52)
N <- length(X) # 总体大小

# 2. 总体协方差
# R默认计算样本协方差(分母N-1),总体需手动调整: 总体 = 样本 * (N-1)/N
pop_cov <- cov(X, Y) * (N - 1) / N

# 3. 总体皮尔逊相关系数
pop_pearson <- cor(X, Y, method = "pearson")

# 4. 总体斯皮尔曼等级相关系数
pop_spearman <- cor(X, Y, method = "spearman")

# 5. 总体肯德尔相关系数
pop_kendall <- cor(X, Y, method = "kendall")

{
  cat("协方差:", round(pop_cov, 2), "\n")
  cat("皮尔逊相关系数:", round(pop_pearson, 4), "\n")
  cat("斯皮尔曼相关系数:", round(pop_spearman, 4), "\n")
  cat("肯德尔相关系数:", round(pop_kendall, 4), "\n")
}
## 协方差: -105.36 
## 皮尔逊相关系数: -0.9077 
## 斯皮尔曼相关系数: -0.9115 
## 肯德尔相关系数: -0.7807

协方差达到 -105.36,这一数值量化揭示了生师比的扩张与就业率的衰退之间具有显著的协同负向变动关系。这表明师生资源的稀释与毕业生出口质量的下滑是同步发生的,可以用作对整个系统的状况做出了量化诊断。

皮尔逊系数达到了-0.91,说明两个变量间存在极强且近乎完美的线性负相关。这意味着生师比,在统计学意义上,是决定就业率的核心主导变量,生师比配置对就业率呈现出严格的线性制约。

即使在放弃了具体的“数值”信息,只看“排名”时,斯皮尔曼系数依然达到了 -0.91。这说明该省的教育生态呈现出一种森严的等级序列:师资力量最充裕的学校在就业市场上占据统治地位,极少出现“师资差但就业好”的逆袭黑马,排名秩序呈现出高度的单调一致性。

肯德尔系数通常略低于皮尔逊,但此处依然达到了 -0.78。这表明在这 20 所学校的任何两两随机比对中,“生师比高则就业率低”这一判断成立的概率极高。这种强一致性反映出两者之间的负向关联是普遍存在的。

4.2.3 多变量情况

在多变量的情况下,我们可以对上述内容进行一些扩展,以衡量多变量之间的相关关系。

a) 协方差矩阵和相关系数矩阵 (Covariance Matrix and Correlation Coefficient Matrix)

当需要同时分析多个变量时,单一的协方差或相关系数已经不足以描述整体的关系模式。这时,我们可以使用矩阵形式来同时描述所有变量间的关系。

对于一个包含\(p\)个变量(例如\(X_1, X_2, ..., X_p\))的数据集,其协方差矩阵\(\Sigma\)是一个\(p \times p\)的对称矩阵。矩阵中的每一个元素\(\Sigma_{ij}\)代表了对应两个变量之间的协方差。

同样,如果矩阵中的每一个元素以相关系数\(\rho_{ij}\)形式来表达,则我们会得到相应的相关系数矩阵。通过观察相关系数矩阵,我们可以快速了解数据集中任意两个变量之间的线性关系方向和强度。

b) 平均绝对相关系数 (Mean Absolute Correlation)

如果我们希望用一个单一的数值来概括这组变量“整体的相关性强度”,平均绝对相关系数是一个常用的简洁指标。

对于一个有\(p\)个变量的数据集,其平均绝对相关系数是所有唯一变量对的皮尔逊相关系数绝对值的平均值。

\[ \text{MAC} = \frac{2}{p(p-1)} \sum_{i=1}^{p-1} \sum_{j=i+1}^{p} |\rho_{ij}| \] 其中\(p(p-1)/2\)是变量对的总数。

MAC值越接近1,表明这组变量间的整体线性相关性非常强,变量们倾向于“同进退”。MAC值越接近0,表明变量间整体线性相关性很弱,各自的变化相对独立。一个中等大小的MAC值(例如0.3-0.6)可能意味着变量间存在有意义但不过度的关联。

c) 偏相关系数 (Partial Correlation Coefficient)

前面讨论的简单相关系数(皮尔逊、斯皮尔曼等)反映了两个变量之间的“总关系”。然而,在多变量情景下,这种总关系可能包含了由其他变量带来的“间接影响”。例如,冰淇淋销量(X)和森林火灾发生率(Y)显示出正相关,但这很可能是因为夏季高温(Z)这个共同原因导致的。偏相关系数就是为了剥离这种间接影响,揭示两个变量之间“纯净”的直接关联。

对于变量 X, Y,在控制变量 Z 后,其偏相关系数\(\rho_{XY·Z}\)可以通过简单相关系数计算得出: \[ \rho_{XY·Z} = \frac{\rho_{XY} - \rho_{XZ}\rho_{YZ}}{\sqrt{(1-\rho_{XZ}^2)(1-\rho_{YZ}^2)}} \] 同样,与相关系数矩阵类似,我们可以构建一个偏相关矩阵,其中每个元素\(\rho_{ij·\text{其他}}\)表示在控制了所有其他变量的情况下,变量 i 和 j 之间的直接线性关联。对于偏相关系数的直观解释稍微有点复杂,需要等到同学们明白了回归分析的残差概念以后,才能更好地理解。我们先放在这里,等后面同学们学到回归分析之后,再返过来理解。偏相关系数可以理解为:用控制变量 Z 去线性地预测变量 X,得到无法被 Z 解释的残差\(Res_X\)(即X中去除Z影响后的部分),以及用控制变量Z去线性地预测变量 Y,得到残差\(Res_Y\)(即Y中去除Z影响后的部分),这两部分的相关系数。

偏相关可以帮助我们发现被第三个变量掩盖或扭曲的真实关系,为区分直接效应和间接效应提供了重要线索。在社会科学研究中偏相关常被用来构建变量之间的“关系网络”,表示直接关系。

例4-8:

某房地产分析师收集了某小区20套住宅的交易数据,旨在探究影响房价的主要因素。数据包含三个主要变量: 面积:房屋的总建筑面积(平方米);卧室数:房屋内卧室的数量(间);房价:房屋的总成交价(万元)。

具体数据如下:

面积 55 60 62 65 70 72 75 78 80 85 88 90 95 98 100 110 120 130 140 150
卧室数 1 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 5 5 5
房价 35 38 40 41 44 45 48 50 51 55 56 58 61 63 65 70 78 85 90 95

从常理推断,房屋面积越大,价格通常越高。然而,分析师注意到,“卧室数”较多的房子往往成交价也更高。这是否意味着“卧室数”本身就是推高房价的独立因素?还是因为“卧室多”通常伴随着“面积大”?我们需要通过多变量相关分析来厘清这三者之间的真实关系。

问:

1.计算“面积”、“卧室数”和“房价”三个变量两两之间的皮尔逊相关系数。

2.评估这组变量整体上的关联强度。

3.在控制“面积”不变的情况下,计算“卧室数”与“房价”的偏相关系数。结合第1问的结果,分析“卧室数”对“房价”是具有独立的直接影响力,还是受到了“面积”的混淆。

library(ppcor) # 加载用于偏相关分析的包

# 定义数据
area <- c(55, 60, 62, 65, 70, 72, 75, 78, 80, 85, 
          88, 90, 95, 98, 100, 110, 120, 130, 140, 150)
bedrooms <- c(1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 
              3, 3, 3, 4, 4, 4, 4, 5, 5, 5)
price <- c(35, 38, 40, 41, 44, 45, 48, 50, 51, 55, 
           56, 58, 61, 63, 65, 70, 78, 85, 90, 95)

house_data <- data.frame(面积=area, 卧室数=bedrooms, 房价=price)

# a) 相关系数矩阵
cor_matrix <- cor(house_data)

# b) 平均绝对相关系数 (MAC)
cor_vals <- cor_matrix[upper.tri(cor_matrix)]
mac_val <- mean(abs(cor_vals))

# c) 偏相关系数
# 计算控制“面积”后,“卧室数”与“房价”的偏相关
partial_res <- pcor.test(house_data$卧室数, house_data$房价, house_data$面积)

{
  cat("=== a) 相关系数矩阵 ===\n")
  print(round(cor_matrix, 3)) 
  cat("=== b) 平均绝对相关系数 ===\n")
  cat("整体关联强度 (MAC):", round(mac_val, 3), "\n")
  cat("=== c) 偏相关系数分析 ===\n")
  cat("变量对: 卧室数 <-> 房价\n")
  cat("控制变量: 面积\n")
  cat("--------------------------\n")
  cat("简单相关系数:", round(cor(house_data$卧室数, house_data$房价), 3), "\n")
  cat("偏相关系数 :", round(partial_res$estimate, 3), "\n")
}
## === a) 相关系数矩阵 ===
##         面积 卧室数  房价
## 面积   1.000  0.950 0.999
## 卧室数 0.950  1.000 0.954
## 房价   0.999  0.954 1.000
## === b) 平均绝对相关系数 ===
## 整体关联强度 (MAC): 0.968 
## === c) 偏相关系数分析 ===
## 变量对: 卧室数 <-> 房价
## 控制变量: 面积
## --------------------------
## 简单相关系数: 0.954 
## 偏相关系数 : 0.418

从相关性矩阵可以看出,三个变量两两之间均表现出极高的线性相关性。其中“面积”与“房价”的相关系数高达 0.999,接近完全正相关,说明“面积”是解释“房价”变动的最主要因素。同时,“卧室数”与“房价”的相关系数也达到了 0.954,如果仅看这一指标,很容易得出“卧室数量越多,房子越贵”的结论。

平均绝对相关系数为 0.968,这表明面积、卧室数和房价三者几乎是同步变化的。这种高度的整体关联性暗示了变量间存在严重的多重共线性,即各个变量包含的信息高度重叠。在这种情况下,很难直观地区分每个变量对房价的独立贡献,直接进行分析可能会导致误判。

通过对比简单相关系数与偏相关系数,可以发现显著的变化。数据显示,“卧室数”与“房价”的简单相关系数为 0.954,而在控制了“面积”这一变量后,偏相关系数断崖式下跌至 0.418。这表明一旦排除了面积因素的干扰,卧室数对价格的解释能力大幅减弱,原本看似紧密的关联其实主要归因于面积。