统计分析-相关系数
相关系数 (pearson与spearman)
皮尔逊 person相关系数和斯皮尔曼spearman等级相关系数,它们可用来衡量两个变量之间的(线性)相关性的大小,根据数据满足的不同条件,我们要选择不同的相关系数进行计算和分析。
基础概念
- 总体:所要考察对象的全部个体叫做总体.
我们总是希望得到总体数据的一些特征(例如均值方差等) - 样本:从总体中所抽取的一部分个体叫做总体的一个样本.
- 统计量:计算这些抽取的样本的统计量来估计总体的统计量
例如使用样本均值、样本标准差来估计总体的均值(平均水平)和总体的标准差(偏离程度) - 相关关系刻画的是直线相关性
相关系数计算公式
易错点
总结
(1)如果两个变量本身就是线性的关系,那么皮尔逊相关系数绝对值大的就是相关性强,小的就是相关性弱;
(2)在不确定两个变量是什么关系的情况下,即使算出皮尔逊相关系数,发现很大,也不能说明那两个变量线性相关,甚至不能说他们相关,我们一定要画出散点图来看才行。
相关系数大小
描述性统计量
对于数学分析类型的数据进行处理时间,都可以进行描述性统计量计算一波。
%描述性统计量的计算
MIN = min(Test); % 每一列的最小值
MAX = max(Test); % 每一列的最大值
MEAN = mean(Test); % 每一列的均值
MEDIAN = median(Test); %每一列的中位数
SKEWNESS = skewness(Test); %每一列的偏度
KURTOSIS = kurtosis(Test); %每一列的峰度
STD = std(Test); % 每一列的标准差
RESULT = [MIN;MAX;MEAN;MEDIAN;SKEWNESS;KURTOSIS;STD]
%将这些统计量放到一个矩阵中表示
matlab corrcoef函数
假设检验
P值判断法
%% 计算各列之间的相关系数以及p值
[R,P] = corrcoef(Test)
% 在EXCEL表格中给数据右上角标上显著性符号吧
P < 0.01 % 标记3颗星的位置
(P < 0.05) .* (P > 0.01) % 标记2颗星的位置
(P < 0.1) .* (P > 0.05) % 标记1颗星的位置
检验数据是否服从正态分布
- 使用normplot()对于数据进行简单拟合,观察数据分布情况。
(如果发现散点基本都可以在红色的直线附近,说明这组数据有很大的可能性符合正态分布,只能说可能性满足正态分布,
但是还是需要通过lillietest函数或jbtest函数进行正态分布的拟合优度测试去说明情况)
%% 正态分布检验
m=[1006.1,1014,1001.6,996.4,997.8,981.6,996.4,991.9,993.3,1000.6,987.3,1015.6,981.6,996.2,999.2,994.5,1005.9,1001.9,986.4,1007.6,1001.4,1014.6,1010.2,993.9,1001.4]
normplot(m)
[H,P,LSTAT,CV] = lillietest(m,0.05)
[h,p,jbstat,critval] = jbtest(m,0.05)
%{
lillietest
H = 0
P = 0.5000
LSTAT = 0.1028
CV = 0.1730
jbtest
h= 0
p = 0.5000
jbstat = 0.3112
critval = 4.1494
H=0说明接受假设,该组数据符合正态分布;P=0.5说明符合正态分布的概率很大;
LSTAT小于接受假设的临界值0.173,因此接受假设。
(如果LSTAT大于接受假设的临界值0.173,因此不能接受假设,拒绝假设。)
[h,p]=lillietest(X)
返回值h: 只有0和1两种情况,h=0假设符合正态分布,h=1假设不符合正态分布
返回值p: 方差概率,也可以说事情的发生概率,p<0.05(显著性水平通常取0.05,还有0.025和0.01三种情况)为不可能事件,拒绝;p>0.05,接受
参数X: 检测的数据
%}
%% 正态分布检验
% 正态分布的偏度和峰度
x = normrnd(2,3,100,1); % 生成100*1的随机向量,每个元素是均值为2,标准差为3的正态分布
skewness(x) %偏度 0.1387
kurtosis(x) %峰度 3.0816
qqplot(x)
%% 正态分布JB检验
%{
MATLAB中进行JB检验的语法:[h,p] = jbtest(x,alpha)
当输出h等于1时,表示拒绝原假设;h等于0则代表不能拒绝原假设。
alpha就是显著性水平,一般取0.05,此时置信水平为1‐0.05=0.95
x就是我们要检验的随机变量,注意这里的x只能是向量。
检验值p,判断是否满足条件
%}
%% 正态分布检验
% 检验第一列数据是否为正态分布
[h,p] = jbtest(Test(:,1),0.05)
% 用循环检验所有列的数据
n_c = size(Test,2); % number of column 数据的列数
H = zeros(1,6); %6组数据
P = zeros(1,6);
for i = 1:n_c
[h,p] = jbtest(Test(:,i),0.05);
H(i)=h;
P(i)=p;
end
disp(H)
disp(P)
斯皮尔曼系数
使用Matlab自带函数计算斯皮尔曼等级相关系数时,需要保证X、Y均为列向量;
%% 斯皮尔曼相关系数
X = [3 8 4 7 2]' % 一定要是列向量哦,一撇'表示求转置
Y = [5 10 9 10 6]'
% 第一种计算方法
1-6*(1+0.25+0.25+1)/5/24
% 第二种计算方法
coeff = corr(X , Y , 'type' , 'Spearman')
% 等价于:
RX = [2 5 3 4 1]
RY = [1 4.5 3 4.5 2]
R = corrcoef(RX,RY)
% 计算矩阵各列的斯皮尔曼相关系数
R = corr(Test, 'type' , 'Spearman') %通用计算公式
相关系数的适用范围
- 连续数据,正态分布,线性关系,使用pearson相关系数。上述条件不满足,就使用spearman相关系数。(spearman相关系数使用范围比较大)
- 相关系数是描述变量之间的线性关系,系数大小,不一定能说明说明