相关性分析[清风正5]
皮尔逊Person相关系数
剔除了两个变量量纲影响,将X,Y标准化后的协方差
*
* Y同理
首先要画散点图,X,Y呈线性相关,相关系数才能得到相关程度,此时相关系数绝对值越大,相关性越强
因为存在1:非线性相关也会导致相关系数很大
2:离群点对相关系数影响很大
3:两变量相关系数很大也不能说明两者相关,可能受到了异常值的影响
4:相关系数为0,只能说不线性相关,可能有更复杂相关关系
事实上,比起相关系数,更关注相关系数的显著性[假设检验]
描述性统计[基本特征]
min、max、mean、median、skewness[数组的偏度]、kurtosis[数组的峰度]、std[标准差]
以上函数都是默认按列操作,令第二个参数为1时,变为按行计算
MATLAB
%% 统计描述
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] %将这些统计量放到一个矩阵中表示
也可以用Excel描述性统计
SPSS
散点图:
SPSS好厉害。。
相关系数的计算
R = corrcoef(A) A的相关系数矩阵
R = corrcoef(A,B) A和B两向量之间的系数
%% 计算各列之间的相关系数
% 在计算皮尔逊相关系数之前,一定要做出散点图来看两组变量之间是否有线性关系
% 这里使用Spss比较方便: 图形 - 旧对话框 - 散点图/点图 - 矩阵散点图
R = corrcoef(Test) % correlation coefficient
假设检验
苏醒吧,我的概统
1.确定原假设H0,和H1
2.在H0成立条件下,构造一个统计量
3.置信水平β下,求出接受域
4.带入样本数据,得到检验值,若检验值落在置信区间,则不能拒绝原假设,反之则拒绝
双侧检验、单侧检验
// 此处有一个很清晰的详细笔记,在平板里
对皮尔逊系数假设检验
步骤:1.H0,H1
2.统计量,要满足一定条件(详细条件见后方)
3.把要检验的值带入统计量,得到检验值
4.画出概率密度函数,给定置信水平,找到临界值,画出接受域和拒绝域
%% 假设检验部分
x = -4:0.1:4;
y = tpdf(x,28); %求t分布的概率密度值 28是自由度
figure(1)
plot(x,y,'-')
grid on % 在画出的图上加上网格线
hold on % 保留原来的图,以便继续在上面操作
% matlab可以求出临界值,函数如下
tinv(0.975,28) % 2.0484
% 这个函数是累积密度函数cdf的反函数
plot([-2.048,-2.048],[0,tpdf(-2.048,28)],'r-') % 临界值线
plot([2.048,2.048],[0,tpdf(2.048,28)],'r-')
补充皮尔逊相关系数假设检验的条件
1.实验数据通常假设是成对的来自于正态分布的总体(因此严谨的做法是先进行正态性检验)
2.实验数据之间的差距不能太大。皮尔逊相关系数受异常值的影响较大。
3.每组样本之间是独立抽样的。
p值判断法
根据检验值t*,计算对应的概率
(1-tcdf(t*,自由度)*2) % 双侧检验p值乘2
[函数tcdf:累积概率密度函数]
得到p值后,p <(>) 0.01,说明在99%置信水平上(无法)拒绝原假设
p < 0.05 95%
p < 0.10 90%
实际操作:
[R,P] = corrcoef(Test) % 此时的P中储存着p值
根据p值判断,再用SPSS标出不同
P < 0.01 % 标记3颗星的位置
(P < 0.05) .* (P > 0.01) % 标记2颗星的位置
(P < 0.1) .* (P > 0.05) % % 标记1颗星的位置
可以直接剪切到文档里(不知道能不能这么用
正态分布检验
正态分布偏度为0,峰度为3
JB(雅克-贝拉)检验
对随机变量{Xi},假设其偏度为S,峰度为K
可构造JB统计量:
如果{Xi}是正态分布,那么在大样本情况(样本n>30)下JB~x(2) [自由度为2的卡方分布]
其余步骤同假设检验,根据偏度和峰度得到检验值JB*,计算出p值,再做比较
% 检验第一列数据是否为正态分布
[h,p] = jbtest(Test(:,1),0.05)
[h,p] = jbtest(Test(:,1),0.01)
% 用循环检验所有列的数据
n_c = size(Test,2); % number of column 数据的列数
H = zeros(1,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)
% Q-Q图
qqplot(Test(:,1))
Shapiro-wilk(夏皮洛-威尔克)检验
小样本(3 <= n <=50)
也用假设检验,H0:服从正态分布
用SPSS实现,分析 -> 描述统计 -> 探索 -> 图 -> 含检验的正态图
所以在实际做题中,根据实际数据大小,”我们做了JB/Shapiro-wilk检验“
补充小知识
Q-Q图:通过比较两个概率分布的分位数对这两个概率分布进行比较的概率图
1.选定分位数对应概率区间集合
2.在概率区间上,点(x,y)对应于第一个分布的一个分位数x和第二个分布在和x相同概率区间上的相同的分位数
[1、2我都看不懂,但感觉也不太用理解]
要用QQ图鉴别样本数据是否近似正态分布,只QQ图上点是否近似在一条直线
小样本最好不用QQ图,不一定在一条直线啊,要大大大数据,比30还要大大大,还是建议根据样本数量选择JB/Shapiro-wilk
斯皮尔曼spearman相关系数(没有皮尔逊那么多条件)
X和Y为两组数据,斯皮尔曼相关系数: ra位于-1到1之间
其中di为Xi和Yi之间的等级差
等级:一个在它所在的一列数,按从小到大排序后,这个数所在的位置。[最小的数等级为1,第二小的数为2.....]如大小相等,则将它们所在的位置取算术平均
%% 斯皮尔曼相关系数
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') % MATLAB默认方法。
% 如果是 corr(X , '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')
假设检验
小样本(n <= 30)
直接查临界值表,r大于等于临界值,才能得出显著的结论
大样本
r_{s}斯皮尔曼等级相关系数
统计量 ~ N(0,1)
计算检验值,在求出对应p值比较
% 大样本下的假设检验
% 计算检验值
disp(sqrt(590)*0.0301)
% 计算p值
disp((1-normcdf(0.7311))*2) % normcdf用来计算标准正态分布的累积概率密度函数
% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')
关于选择皮尔逊还是斯皮尔曼
1.连续数据、正态分布、线性关系,选皮尔逊更恰当
2.上面三个条件有一个不满足,都应该选斯皮尔曼
3.两定序数据也用斯皮尔曼,不能用皮尔逊
*定序数据:仅反映观测对象等级、顺序关系的数据,有定序尺度计量形参,表现为类别,可以排序,属于品质属性。eg:优、良、差