衡量两个变量之间相关性大小的指标
绝对值越接近1,越有线性
很重要!必须要画出散点图,证明变量之间是有线性关系的,才能用皮尔逊相关系数来说明线性相关性
写论文时先画出散点图,证明有线性关系,再用皮尔逊相关系数说明其相关性。
这个强弱根据具体的题目来定,需要精密的时候可以定严格一点,比如>0.9的才算强相关性
论文中我们需要把这些数组的描述性统计做成表格写出来
特别是标粗的统计量
clear;clc
load 'physical fitness test.mat' %文件名如果有空格隔开,那么需要加引号
% https://ww2.mathworks.cn/help/matlab/ref/corrcoef.html
%% 统计描述
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做矩阵散点图
关于假设检验的知识
在概率论与数理统计和统计学两门课,我已经学过有关知识了,就没听清风的这部分
双侧检验步骤
单侧检验步骤大差不差
实际上构造什么分布是最难的,涉及到非常复杂的证明
用的时候只要知道怎么用就行,对于什么检验统计量用什么分布,是数学家探索发现的
如何变成实现
步骤
我们通过检验相关系数的显著性,来说明相关系数有没有意义
链接:t分布查表文档
双侧检验,置信水平α=0.05
那么要找 t 1 − α 2 = t 0.975 t_{1-\frac{α}{2}}=t_{0.975} t1−2α=t0.975这一列,再按自由度28找到行。找到临界值2.048
前面的过程还是太为繁琐了,我们用P值更好的检验显著性
一行代码:[R,P] = corrcoef(Test)
R返回的是相关系数表,P返回的是对应于每个相关系数的p值
%% 计算各列之间的相关系数
% 在计算皮尔逊相关系数之前,一定要做出散点图来看两组变量之间是否有线性关系
% 这里使用Spss比较方便: 图形 - 旧对话框 - 散点图/点图 - 矩阵散点图
R = corrcoef(Test) % correlation coefficient
%% 假设检验部分
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-')
%% 计算p值
x = -4:0.1:4;
y = tpdf(x,28);
figure(2)
plot(x,y,'-')
grid on
hold on
% 画线段的方法
plot([-3.055,-3.055],[0,tpdf(-3.055,28)],'r-')
plot([3.055,3.055],[0,tpdf(3.055,28)],'r-')
disp('该检验值对应的p值为:')
disp((1-tcdf(3.055,28))*2) %双侧检验的p值要乘以2
%% 计算各列之间的相关系数以及p值
[R,P] = corrcoef(Test)
% 在EXCEL表格中给数据右上角标上显著性符号吧
P < 0.01 % 标记3颗星的位置
(P < 0.05) .* (P > 0.01) % 标记2颗星的位置
(P < 0.1) .* (P > 0.05) % % 标记1颗星的位置
% 也可以使用Spss操作哦 看我演示
SPSS中操作:分析->相关->双变量->选中指标->勾选皮尔逊相关系数、勾选双尾(双侧检验)、勾选显著相关性(显著性标记)
最后要加上
*** p<0.01, ** p<0.05, * p<0.1
Matlab计算的是双侧检验的p值,如果需要单侧的话只
需要除以2即可。
一个重要的部分:进行假设检验的前提
%% 正态分布检验
% 正态分布的偏度和峰度
x = normrnd(2,3,100,1); % 生成100*1的随机向量,每个元素是均值为2,标准差为3的正态分布
skewness(x) %偏度
kurtosis(x) %峰度
qqplot(x)
步骤
确定样本量>30
确定原假设和备择假设
计算偏度和峰度,带入计算统计量,计算相应p值
得出结论
[h,p] = jbtest(x,alpha)
% 检验第一列数据是否为正态分布
[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))
小样本才能用
该检验原理较为复杂,我们只要会用就习惯
matlab没有这个相关函数,所以用spss
分析 - 描述统计 - 探索
用QQ图来看是否符合正态分布
在统计学中,Q‐Q图(Q代表分位数Quantile)是一种通过比较两个概率分布的分位数对这两个概率分布进行比较的概率图方法。
首先选定分位数的对应概率区间集合,在此概率区间上,点(x,y)对应于第一个分布的一个分位数x和第二个分布在和x相同概率区间上相同的分位数。
这里,我们选择正态分布和要检验的随机变量,并对其做出QQ图,可想而知,如果要检验的随机变量是正态分布,那么QQ图就是一条直线。
要利用Q‐Q图鉴别样本数据是否近似于正态分布,只需看Q‐Q图上的点是否近似地在一条直线附近。(要求数据量非常大)
正确在论文中使用皮尔逊相关系数
对数据的要求比较低,没有总体要是正态分布的前提
>0
正相关<0
负相关斯皮尔曼相关系数被定义成等级之间的皮尔逊相关系数
两种用法
corr(X , Y , 'type','Spearman')
corr(X, 'type' , 'Spearman')
%% 斯皮尔曼相关系数
X = [3 8 4 7 2]' % 一定要是列向量哦,一撇'表示求转置
Y = [5 10 9 10 6]'
% 计算矩阵各列的斯皮尔曼相关系数
R = corr(Test, 'type' , 'Spearman')
直接查表
一般就是找双侧检验0.05这一列,通过样本量找到表中临界值
表在资料中
必须要计算出来的>表中临界值,落在拒绝域中,才能说明显著性
p值就是右边那块红色区域的面积
下结论:p值大于0.05,因此我们无法拒绝原假设。
(和0没有显著的差异)
% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')
把皮尔逊和斯皮尔曼相关系数都勾选上,会有两个表
本笔记来自清风老师的数学建模,强烈推荐该课程!