2023-03-02 读书笔记:《有趣的统计》-2-发现相关性
75招学会数据分析 —— 2014 Doctor.Bruce Frey
统计、测量、研究设计:
- 第1章:基础工具集;
- 第2章:用于发现、描述和测量变量相关性的多种统计方法;
- 第3章:测量方法,正确提问,准确估算;
- 第4章:商用概率知识,决定胜负;
- 第5章:丰富的游戏技巧;
- 第6章:脑力游戏的探索发现;
第二章 发现相关性
Hack11~22
引发、影响、独立于、条件变量;
- 确认关联强度
- 画出它的样子
- 使用相关性知识进行预测
- 提高预测准确性
- 观察非预期结果的发生
- 组间的真正差异
- 有代表性的样本
- 样本可能产生误导
- 误导的作用
- 准确理解数字和图像
发现相关性
变量间相关性假设
- 描述相关关系大小的数字,叫做相关系数
检验关系假设:提出变量之间的相关性假设;
计算相关系数
考虑两个变量两列数据所使用的所有信息,并判断期间是否存在相关
- 查看每列每个分数
- 查看每个分数和本列平均数的距离
- 查看另一列中与其对应的分数与平均数的距离
- 将这一对距离数字相乘
- 计算成绩结果的平均数
一个更有效的公式:∑(ZxZy)/(N-1)
- Z表示Z分数,是一个分数离平均数的距离;也叫标准分数,用来衡量一个变量在所有变量中的相对位置
- 标准差 是各个分数距离平均数的平均距离;平均数 是一组分数的算数平均;
- Zx = Z / x分布的标准差 表示x列的所有Z分数
- Zy = Z / y分布的标准差 表示y列的所有Z分数
- ZxZy表示二者相乘;
某一列的Z分数,也叫标准分数(标准化值、z分数等),实际上只是将原始数据进行了线性变换(减均值除标准差,也就是我们所熟知的标准化过程,准确来讲是“
标准差标准化
”),它并没有改变数据在该组中的位置,也没有改变分布的形状,只是将该组数据变为平均数为0、标准差为1;
- 如果原始数据分布呈正太分布,那么经过标准化之后,就会呈标准正太分布;
标准分数给出了一组数据中各数值的相对位置,比如,如果某个数值的标准分数为-1.5,就知道该数值低于平均数1.5倍的标准差,即Z分数是用标准差来表示每个原始数据和平均数的距离
;
我们用Python实现下这个计算过程:
import numpy as np
import pandas as pd
df = pd.DataFrame({"x":[50,45,30,30,10],"y":[36,35,22,25,20]})
df
# x y
# 0 50 36
# 1 45 35
# 2 30 22
# 3 30 25
# 4 10 20
x_mean = df.x.mean()
x_std = df.x.std()
y_mean = df.y.mean()
y_std = df.y.std()
print("x_mean = ",x_mean,"\t x_std = ",x_std,"\t y_mean = ",y_mean,"\t y_std = ",y_std)
# x_mean = 33.0 x_std = 15.652475842498529 y_mean = 27.6 y_std = 7.436396977031283
Zx = (df.x - x_mean)/x_std # 标准差标准化
Zx
# 0 1.086090
# 1 0.766652
# 2 -0.191663
# 3 -0.191663
# 4 -1.469416
# Name: x, dtype: float64
Zy = (df.y - y_mean)/y_std # 标准差标准化
Zy
# 0 1.129579
# 1 0.995106
# 2 -0.753053
# 3 -0.349632
# 4 -1.022000
# Name: y, dtype: float64
r = (Zx * Zy).sum()/(df.shape[0] - 1)
r
# 0.9257029996027057
改用Numpy计算的话,可以通过这样一个函数:
def calculateR(arr_x, arr_y):
if len(arr_x) == len(arr_y):
arr_x = np.array(arr_x,dtype=np.float32)
arr_y = np.array(arr_y,dtype=np.float32)
x_mean = arr_x.mean()
x_std = arr_x.std(ddof = 1)
# 注意np与pd中std不同:
# np计算的是总体标准偏差 标准差公式根号内除以 n, ddof=0
# 而pd中计算的是样本偏差 标准差公式根号内除以 n-1, ddof=1
y_mean = arr_y.mean()
y_std = arr_y.std(ddof = 1)
print("x_mean = ",x_mean,"\t x_std = ",x_std,"\t y_mean = ",y_mean,"\t y_std = ",y_std)
Zx = (arr_x - x_mean)/x_std
Zy = (arr_y - y_mean)/y_std
r = (Zx * Zy).sum()/(len(arr_x) - 1)
return r
else:
return -1
calculateR([50,45,30,30,10],[36,35,22,25,20])
# x_mean = 33.0 x_std = 15.652476 y_mean = 27.6 y_std = 7.436397
# 0.9257029294967651
numpy/pandas提供了更为直接的相关系数的计算方法:
import pandas as pd
df = pd.DataFrame({"x":[50,45,30,30,10],"y":[36,35,22,25,20]})
df.corr()
# x y
# x 1.000000 0.925703
# y 0.925703 1.000000
r = np.corrcoef([50,45,30,30,10], [36,35,22,25,20])
r
# array([[1. , 0.925703],
# [0.925703, 1. ]])
上述示例的相关系数结果是0.93,非常接近于1;1是最强的正相关,0.93则可以认为是具有非常强的相关;
解释相关系数
相关公式计算结果的范围在-1~+1;表示两个变量间的相关强度;正号表示正向相关,负号表示反向相关;
相关系数提供的是两个变量间线性关系强度
的标准度量;
相关的方向是标尺方向的虚拟,强相关也可能是负的;
统计显著性和相关
“样本中发现的相关是否足够大,以至于它肯定来自于一个变量间至少存在某种关系的总体?”
- 样本间所反应的相关性有多大可能在总体中依然存在;
样本量 | 可被视为统计相关的最小相关 |
---|---|
5 | 0.88 |
10 | 0.63 |
15 | 0.51 |
20 | 0.44 |
25 | 0.40 |
30 | 0.38 |
60 | 0.26 |
100 | 0.20 |
就5个样本而言,任何大于等于0.88的相关系数会被认为统计学显著
(意思是“相关性大到很可能存在于样本所代表的总体中”);
变量可测量;测量值在数学上有差异性;只有在样本是从总体中随机抽取的情况下,达到统计显著所需的最小相关系数大小才是精确的;
注意:相关性 不代表 因果关系;
相关图表
画出一条回归线,就可以描绘出相关并做出预测;
使用和被关注变量有关联的变量,可以对被关注变量做出估计;通过将已知两个变量之间的关系画成一条线,就可以在未知的时间点进行预测,这样的图表工具叫做回归线
;
线性相关:一个变相值放x轴,另一个变量值放y轴,然后画出每一对分数在象限中的对应点,结果点基本呈直线分布;
可以使用seaborn的Implot方法绘制回归模型,描述线性关系(或局部线性关系);
“用一个变量预测另外一个”说的就是建立回归方程的统计学方法。
生效原理
回归估计依赖因素:
- 变量间的相关必须相当大;
- 相关必须至少是线性的(或接近线性的);
实际的相关不一定是纯粹线性的,但只要基本上属于线性,那么回归分析就相当有效(当然不可避免的会引入误差);
回归方程式:
效标y = 常量 + (预测变量x * 权重)
- 求,
权重 = 相关系数 * 效标标准差/预测标准差
- 求,
常量 = 效标平均数 - (权重 * 预测平均数)
回归方程 包含了 平均值、标准差和相关系数;
效标变量是你想要预测的变量,预测变量是用作预测指标的变量;
当两个变量彼此相关,他们提供的信息有重叠之处,就如同二者共享信息一样,统计学家有时用相关信息来讨论变量共享变异
;
相关性弱会出现错误,但只要存在一丝相关,回归预测就比盲目猜测更准确;如果最初收集的用于确定回归方程中各个值的数据不具备对未来数据的代表性,那么预测也会出错;
用多个变量预测单个变量
使用多个预测变量来预测效标变量的方法叫做多元回归
;生成的方程叫做多元回归方程;
包含三个预测变量的回归方程:
效标变量y = 常量 + (预测变量x1 * 权重1) + (预测变量x2 * 权重2) + (预测变量x3 * 权重3)
- 每个预测变量都有其对应的权重,其大小通过相关统计学公式确定;
- 现实中,人们总是用计算机(SPSS、Excel)来生成多元回归方程;
值得注意的是,在多元回归方程里,每个变量的权重是和每个变量实际的分数区间范围
成比例的,因此很难做到仅看权重就知道每个预测变量的独立贡献;
一个变量的权重较小,可能只是因为它的度量尺度较大;
效标 | 非标准权重 | 标准权重 |
---|---|---|
常量 | 3.01 | ---- |
x1 | 0.02 | 0.321 |
x2 | 0.007 | 0.603 |
x3 | 0.025 | 0.156 |
标准权重
是原始数据转换为Z分数后得到的权重;它将所有预测变量纳入了同样的度量尺寸;
多元线性回归要比简单线性回归在预测时的表现更好,这是因为如果预测变量之间存在相关,就会共享一些信息,统计学方法移除了方程中每个变量互相共享的信息,这样就产生了从不同角度对效标的独立预测变量(准确来说是分量),生成了尽可能准确的预测;
在多元回归中,用来决定每个预测变量权重的相关信息,不是预测变量和效标变量的一对一相关,而是当所有预测变量之间的重叠被移除后,预测变量和效标变量之间的相关;注意,移除变量间共享信息之后的预测变量在概念上已不同以往(他们是有着不同“形状”的独立变量,与效标之间的相关被称为
部分相关
);部分相关是在预测变量和其他变量不相关的情况下,每个预测变量和效标变量之间一对一的相关;
多元回归这种统计工具在应用科学领域被用来解决实际问题,还能检测一组变量对其他变量的独立贡献,这是在基础科学领域的实践;
单因素方差检验
对于商家和服务业,确定哪里有最大的需求非常重要,这类问题可以借助一种统计方法来回答,这种方法适用于查看多个类别中的每一类所包含的“事物”数量较之正常状态下随机发现的数量是否有所不同,这种方法叫做“单因素卡方检验
”(使用符号C(希腊读音kai)来表示生成的临界值,又计算中所需值都是平方值,故统称卡方);
判断是否有异常情况:
- 假设一天划分3段,0
~
8点有120起犯罪事件,8~
16有90起,14~
24有90起,共300起; - 直观看可以得出第一段犯罪事件数量很大,但通过计算数据的卡方,可以更准确的描述第一段的犯罪数量大到什么程度;
一天的三段共300起犯罪事件,即每一段100次,任意一个时段的数量不等于100次,意味着有异常情况;
卡方计算:卡方 = ∑((观测频次 - 期望频次)^2/期望频次)
- 上述示例的 观测频数 分别 为 120 90 90,期望频次 均为100
- 即卡方值 =
(120-100)^2/100 +(90-100)^2/100 +(90-100)^2/100 = 6
统计学家已经标定了卡方的分布,即我们已经知道不同大小的卡方出现的可能性;
注:发现特别巨大的卡方值的可能性,取决于类别的数量;
显著水平(显著性)=0.05(有95%把握)时的卡方临界值:
类别数 | 卡方临界值 |
---|---|
2个列别 | 3.84 |
3个列别 | 5.99 |
4个列别 | 7.82 |
5个列别 | 9.49 |
上述示例中计算得到的卡方值是6,大于3个类别的卡方临界值,这意味着存在某些异常情况,即一天内不同时段的犯罪频次存在差异(而且是真实的);
单因素卡方检验,使用卡方分析的数据表示方式能使每类事物的观测数量和每类事物的期望数量相比较;“每类事物的期望数量”总是被定义为一个相等的数(没有异常时,可以预期各个类别中事务的数量相等);
卡方值对应某一结果偶然出现的可能性,数字越大,用偶然性单独解释事情的可能性越低;
存在一个已知的分布(即,每个可能的卡方值对应的概率)
;
如果类别数大于等于2,并希望知道类别中的实际分布情况是否与偶然出现的相同,那么卡方就是一个合适的检验方法;使用框架是:研究者怀有某种预期,以此方法来检验观测数据是否与该预期相符;
卡方检验
被视为一种拟合优度统计检验法
,它回答的是数据在多大程度上与模型相符的问题;
统计学家了解观测频次较之期望频次可能出现的常态波动大小,就能计算观测值与预期值之间出现任何偏离的可能性究竟是出于偶然还是源自其他因素的影响。
卡方检验分析是对预期和实际测试表现加以对比!
识别非预期相关
如何验证自己观测到的两个变量之间的相关是否为真?
前一节犯罪数量的示例中,我们使用单因素卡方检验,依据一天中不同时段的犯罪数量不同而指定不同的巡逻方案;
类似的方法对如下问题分析大有效力:
- 数据属于分类测量的范畴(性别,党派,种族等);
- 你想要判断某些特定类别中分数的频次是否高于其随机出现的频次;
这里会遇到一个常见的分析性问题:类别变量间的相关能否用方便的两因素卡方检验来考察?
- 答案是可以;
- 问题来源于:如果两个变量属于区间测量的范畴(连续的多个分数),相关系数是最好的工具,但这种工具在类别测量方面表现并不出色;
单因素卡方分析
的是单一类别变量,而两因素卡方分析
的是两个类别变量之间的相关;两者内在原理是一样的,将每一类或组合类的期望频次与实际频次加以对比,如果差异之和达到了一个很大的数,那么就有其他因素作用的影响;
举例两个团体A和B,A中抽样75,有45名男性和30名女性:
- 这里使用单因素卡方检验可以准确的知道A中男性是否多于女性;
- 现在团体是一个类别,性别是第二个类别,假设现在增加了对B的75个采样,有数据如下;
团体 | 男 | 女 | total |
---|---|---|---|
A | 45 | 30 | 75 |
B | 34 | 41 | 75 |
total | 79 | 71 | 150 |
现在要分析“团体和性别之间存在相关吗?”的问题:
- 首先,加总每个单元格内的预期和观测频次之差:每个单元格的期望频次 等于 单元格所在行的总人数乘以所在列的总人数,再除以样本总数;
团体 | 男 | 女 |
---|---|---|
A | (75*79)/150=39.5 | (75*71)/150=25.5 |
B | (75*79)/150=39.5 | (75*71)/150=25.5 |
- 判断卡方值,上述计算的卡方值是3.24,统计学家知道2*2表格的卡方临界值是3.84(随机情况下,卡方值大于3.84的几率大约为5%或更少);而我们的卡方值更小,即我们知道这样一个波动随机发生的概率高于5%。因此不能称其达到统计显著性;
- 结论:虽然样本似乎显示了两个类别之间存在某种相关,但可能是因为抽样误差所致;实际在抽样的总体中,可能不存在任何相关;
两因素卡方分析
也称作列联表分析
,当有两个类别变量,并且想知道一个变量对另一个变量是否有某种依赖的时候,这个方法非常有用。
对多分类进行变量分析时,会更复杂,但步骤是一样的。
比较两组
“如果你想要拿出真实的证据来支持自己关于哪个最好、最多、最少的观点,可以使用t检验
的统计工具来达到目的”;
判断两个组别之间是否存在差别,那么独立t检验
就是最好的解决办法;
方差是给定一组数中,总的差异量大小,找出群组中每个分数和平均分数的距离进行平方再求算数平均数而得到;
t值计算方程:
- mean_a 第一组平均数
- var_a 第一组方差
- count_a 第一组样本大小(两组样本数相同时效果最好,不等时,会采用一个类似的对变异信息求平均的公式)
# 两个平均数之间的差异 被 标准化且用一个t值来表示
t = (mean_a - mean_b)/(√(var_a/count_a + var_b/count_b))
t值越大,则在样本群体中发现的任何差异性为随机出现的可能性越低;通常当t值大于2就足以下结论:差异不仅存在以样本中,也存在于总体中。
统计学家利用中心极限定理计算了从总体中随机抽得不同t值的几率,下表提供了达到0.05统计显著水平需要满足或达到的t值:
两组联合样本量 | 临界t值 |
---|---|
4 | 4.30 |
20 | 2.10 |
30 | 2.05 |
60 | 2.00 |
100 | 1.99 |
无穷大 | 1.96 |
t检验回答了这样一个问题:两样本间发现的任何差异究竟是真实的还是源自取样误差;如果样本间的差异太大以至于无法用偶然出现来解释,那么研究人员就能下结论说总体检存在真实的差异;
看清实际错误程度
标准误差
:知道使用统计量概括观测数据可能犯错的程度;
一个样本的平均数不太可能和总体平均数完全一样,通说平均数的标准误差,可以大致估计出根据样本得出的估计平均数和实际总体平均数之间的差距;
不同统计方法中所使用的标砖误差:
- 描述性统计中的
平均数标准误差
;核实某个变量的总体平均分结果的准确性; - 调查取样中的
比例标准误差
;核实总体中拥有某个特征的成员所占比例的准确性; - 回归中的
估计标准误差
;核实 未来的表现;
中心极限定理(参考“中心极限定理的实际应用”一节)提供了计算标准误差的公式,并且提示所有样本概括值均呈正态分布;
平均数估计
样本平均数作为总体平均数估计值的准确性 是以样本量为基础的;
计算公式:
平均数标准误差 = 样本标准差 / (√样本量)
随着样本量的增加,样本平均数越来越接近于真实的总体平均数;
平均数的标准误差 是众多样本的平均数与其总体平均数距离的平均数
;
比例估计
样本调查结果用百分比或比例呈现,那么这个百分比会与调查整个总体得出的实际百分比存在一定距离;如果这个样本是随机选取的,那么比例标准误差就表示样本百分比和总体百分比的接近程度;
比例的标准误差基于样本量和比例的大小,计算公式:
比例标准误差 = √(样本比例*(1-样本比例)/样本量)
- 样本比例偏离0.5程度越大,比例的标准误差越低;
- 样本量越大,比例的标准误差越低;
比例的标准误差是样本比例和总体真实比例之间距离的平均
;
对未来表现的评估
用一个变量或多个变量来估计另一个变量的分数;这个被预测的分数可能不完全准确;
类似的我们可以算出:平均来说,我们的回归预测结果和某个人实际获得分数的距离是多少;
计算公式:
- 这里相关系数是预测变量x与效标变量y间的相关;
估计标准误差 = 效标变量y的标准差 * √(1 - 相关系数r的平方)
# 实际公式略复杂,但计算结果与此公式几乎一样
- 相关系数越大,估计的标准误差越小;
估计的标准误差是实际分数和每个预测分数之间距离的平均值
;
运用示例
我们假设预测变量和效标变量之间的相关系数是0.25,且我们知道至于正太曲线,样本值左右1.96个标准误差所提供的范围值,对应了95%把握说这个范围值包含了总体值(即围绕样本值建立的95%的置信区间),看下表;
标准误差类型 | 标准差 | 样本量 | 样本值 | 标准误差 | 95%置信区间 |
---|---|---|---|---|---|
平均数标准误差 | 15 | 30 | 100 | 2.74 | 94.63~105.27 |
比例标准误差 | 0.25 | 30 | 0.5 | 0.09 | 0.32~0.68 |
估计标准误差 | 15 | 30 | 100 | 14.81 | 70.97~129.03 |
小镇选举投票,调研30人显示有50%的支持率,那么合理的支持会落在32%到68%之间;
生效原理
- 取样误差是正太分布的;以此我们就能够计算有足够说服力的置信区间;
- 取样误差是无偏的;这意味着样本值大于或小于总体值的可能性是相同的;
- 公式的形式:如果你拥有少量总体信息或没有总体信息,样本估计中的误差大小约等于总体中标准差的大小;
公正取样
使用样本进行推论:
- 推断性统计是我们能够基于小量的样本数据,引出一般性的总体结论;
- 然而,要使推论有效,样本必须公正的代表总体;
总体 描述的是作为研究对象的某一类人或事物;
一个良好的样本能代表一个总体;这意味着总体中每个重要特征的分布和样本中这些特征的分布成比例;
提出问题的人必须选择他感兴趣的总体,其后他引用的结论只针对那个总体时才是正确的,而不适用于任何其他总体;
基于样本的推论很容易做,但只有当样本良好时,推论才是有效的;
- 通用全集:指研究者希望将其结论推而广之的抽象总体;
- 可操作全集:可进行抽样的具体总体;
- 抽样单元:指定义总体的元素;
- 抽样框架:指总体中抽样单元的列表;
- 可泛化推广:观察结果对样本范围之外的人或事务依然有效;
- 有偏样本:即坏样本,只代表不了总体的样本;
最好的抽样策略是从有效的抽样框架中随机抽样
;随机,给予了总体中每一个成员相同和独立的入选机会;
现实中的抽样策略
随机不易,下面的一些抽样策略则更加现实:
- 方便抽样:样本的选择基于可得性,也叫做偶遇抽样;如商场最先遇到的10人;
- 系统抽样:单元是从抽样框架中等距抽取的(内容与顺序无关);如从一个很长的人员列表中逢10抽取一个;
- 分层抽样:抽样框架被分成有意义的子群组,单元是从每个子群组里随机抽取的(关于子群组的划分是重点);
- 整群抽样:单元群组是随机选择的,群组中的单元全部都作为样本;如随机选择一家出版社,推断出整个出版界的结果;
- 判断抽样:样本的选择是基于你的专业判断,决定这个样本能否代表总体;如只选最佳用户,因为他们最了解你的产品;
样本量越大越好(如30或更多);
社会学研究统计人员想要确定他们的样本能够代表总体时,他们主要关心的是特征在样本中所占的比例,而不是拥有这些特征的人数;
选择可靠的均值
有三种完全不同的值都可以被称作“均值”,而且往往导致不同的决策;它们分别是平均数
、中位数
和众数
;
计算均值是为了有效传达这些值的趋中趋势
;
我们所熟知的平均数在一些情况下并不能代表任何真实
值;如某些值的分布被一些偏离中心的极大值所歪曲,平均数也收到这些极值的严重影响,因此无法代表样本中的任一结果;
大多数金钱作为变量的情况,都不太适合用平均数做均值;而中位数在这些情况下表现不错,因为它对极端值的敏感性要低得多;
当分布是正偏态分布
或负偏态分布时
,统计人员更倾向于采用中位数作为“有效”的趋中趋势度量;
但是中位数也不总是有效的,比如一个团体中一部分人年龄介于25~
35,另一部分介于50~
60,又该怎么描述学生的平均年龄?
此时,平均数、中位数都不合适,最有效的均值应该选择众数
,即数据样本中出现最多的值(可能有多个!);
如何选择:
- 数据中存在两个或更多的“趋势”时,选择众数(报告每一个趋势的众数);
- 如果分布是偏态的,即存在一小部分极端值,选择中位数;
- 分布非常对称,且只有一个众数,则选择平均数;
避开坐标轴的欺骗
典型的图标有两个坐标轴,它们描述了两个不同的变量,横向X轴,纵向Y轴;
三种常见图表:
- 条形图:x轴为类别,y轴为连续变量;
- 柱状图:x轴为连续值(反应内在连续变量的普通类别,可进行有意义排序),相比条形图,相邻图形间没有缝隙;
- 折线图:x、y轴均为连续变量,如随时间变化的某值;
选择正确的图表在于其样式具有最小欺骗性和最大直观性;
无论何时,当你使用折线图或条形图来对比数值时,只有当 线的高度或条形的长度是依据某个标准的最小值来得出判断,对比结果才是准确的(这一最小值通常为0)
;
请经常检查Y周的起始值。