数学建模-相关性分析(Matlab)
创始人
2024-05-07 00:46:41
0

 注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
国赛对于论文的查重要求非常严格,代码雷同也算作抄袭
如何修改代码避免查重的方法:https://www.bilibili.com/video/av59423231   //清风数学建模

一、基础知识

1.皮尔逊相关系数

连续数据、正态分布、线性关系三者同时满足优先用。

一般处理这种问题:如中学生体测成绩考察相关性
​​​​

 统计描述:

%% 统计描述
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最好(附基础操作步骤📕):

1.左上角点击文件,导入原始excel

点击上面分析,描述统计,描述(选中该选的,调调就得图)

2.看图分析:点击上面图形,旧对话框,散点图/点图,点击矩阵散点图,变量全选,生成。

各列之间相关系数:

R = corrcoef(Test)   % 返回test的相关系数矩阵
R = corrcoef(a,b)   % 返回两个随机变量a和b之间的系数

 注意:

 一定要是线性,否则结论不一定成立,例如抛物线。

2.假设性检验(正态分布图)

a:犯第一类错(原假设是对的,我们却认为它是错的)的概率

b=1-a 相信原假设的概率(一般取95%) n(样本数)-2为自由度

检验值t=r*根号下n-2/1-r^2 ,r是相关系数

结合t分布表和matlab:

%% 假设检验部分
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-')

 结合最后的t分布表,可以查到自由度为28时候,置信度为0.5(双尾)对应的t为2.0484

更好用:p值判断法

%% 计算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

3.055是检验值t,最后一步是求p,这里不再细说。因为spss法最优。

p<0.01说明在99%的置信水平上拒绝原假设。

p>0.01…………相信原假设

0.05,0.10同理

 SPSS法:

把excel表里都弄过去后,原始数据分析,相关,双变量相关性,勾选皮尔逊、双尾、第三个也勾

这时会发现,数据后会带*星号,有一颗两颗的。我们规定:

P < 0.01  % 标记3颗星的位置
(P < 0.05) .* (P > 0.01)  % 标记2颗星的位置
(P < 0.1) .* (P > 0.05) % % 标记1颗星的位置

3.检验数据是否正态分布

1.正态分布JB检验(大样本n>50)

主要是根据偏度(正态分布为0)和峰度(正态分布为3),再结合jbtest函数,同时注意要循环遍历每一列。最后得p值,也是比较0.05决定是否拒绝原假设

% 正态分布的偏度和峰度
x = normrnd(2,3,100,1);   % 生成100*1的随机向量,每个元素是均值为2,标准差为3的正态分布
skewness(x)  %偏度
kurtosis(x)  %峰度
qqplot(x)% 检验第一列数据是否为正态分布
[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)

h=1拒绝原假设,h为0不能拒绝原假设。p即为p值。 

2.夏皮洛-威尔克检验(小样本 3《n《50)

用SPSS:

分析,描述统计,探索,全选后点 图,勾选含检验的正态图,最后生成正态检验图。

看h,p的方法同上。

3.看图是否拟合(Q-Q图)

qqplot(Test(:,1))

 4.斯皮尔曼spearman相关系数

原理:X和Y两组数据,也有X和Y的等级(一个数所在的一列数按照从小到大排后,这个数所在的位置,若如并列第四,均取4.5)

%% 斯皮尔曼相关系数
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')

(Test是591*6中考体测数据)

最后假设检验,也是看p

% 大样本下的假设检验
% 计算检验值
disp(sqrt(590)*0.0301)
% 计算p值
disp((1-normcdf(0.7311))*2) % normcdf用来计算标准正态分布的累积概率密度函数% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')

附录:T分布表

单尾检验0.050.0250.010.0050.00250.0010.0005
双尾检验0.10.050.020.010.0050.0020.001
df
16.313812.706531.819363.6551127.3447318.4930636.0450
22.92004.30266.96469.924714.088722.327631.5989
32.35343.18244.54075.84087.453410.214512.9242
42.13192.77643.74704.60415.59767.17328.6103
52.01502.57063.36504.03224.77345.89346.8688
61.94322.44693.14263.70744.31685.20765.9589
71.89462.36462.99803.49954.02944.78525.4079
81.85952.30602.89653.35543.83254.50085.0414
91.83312.26212.82143.24983.68964.29694.7809
101.81242.22822.76383.16933.58144.14374.5869
111.79592.20102.71813.10583.49664.02474.4369
121.78232.17882.68103.05453.42843.92964.3178
131.77092.16042.65033.01233.37253.85204.2208
141.76132.14482.62452.97683.32573.78744.1404
151.75302.13142.60252.94673.28603.73284.0728
161.74592.11992.58352.92083.25203.68614.0150
171.73962.10982.56692.89833.22243.64583.9651
181.73412.10092.55242.87843.19663.61053.9216
191.72912.09302.53952.86093.17373.57943.8834
201.72472.08602.52802.84543.15343.55183.8495
211.72072.07962.51762.83143.13523.52723.8193
221.71722.07392.50832.81883.11883.50503.7921
231.71392.06862.49982.80733.10403.48503.7676
241.71092.06392.49222.79703.09053.46683.7454
251.70812.05962.48512.78743.07823.45023.7251
261.70562.05552.47862.77873.06693.43503.7067
271.70332.05182.47272.77073.05653.42113.6896
281.70112.04842.46712.76333.04693.40823.6739
291.69912.04522.46202.75643.03803.39623.6594
301.69732.04232.45722.75003.02983.38523.6459
311.69552.03952.45282.74403.02213.37493.6334
321.69392.03692.44872.73853.01503.36533.6218
331.69242.03452.44482.73333.00823.35633.6109
341.69092.03222.44112.72843.00193.34793.6008
351.68962.03012.43772.72382.99613.34003.5912
361.68832.02812.43452.71952.99053.33263.5822
371.68712.02622.43152.71542.98533.32563.5737
381.68592.02442.42862.71152.98033.31903.5657
391.68492.02272.42582.70792.97563.31283.5581
401.68392.02112.42332.70452.97123.30693.5510

 40往后查看http://www.obhrm.net/index.php/T%E5%88%86%E5%B8%83%E8%A1%A8_t_distribution_table

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...