• 只是要一个相关数而已，cov，corrcoef函数为什么要出来矩阵呢，好麻烦，每次设置系数的时候都感觉不踏实。。然后就自己写了两个小函数，技术含量比较低，可以看作函数学习的例子吧。。然后默认系数都是1/N，需要改成...
• 超适合新手，下载后只需改一下读取图像名称即可运行，不管是普通图像或是遥感影像（注：多光谱影像请将各波段分别导出单独读取），都能无压力运行，省时省心。
• ## 相关系数matlab代码

千次阅读 2018-12-30 11:28:47
%matlab代码 function CC=cc(T1,T2) %T1,T2是图片 T1=T1(:); T2=T2(:); T1=double(T1); T2=double(T2); A=cov(T1,T2); b=sqrt(var(T1)*var(T2)); CC=A(1,2)/b; end 这是测试用图 这是测试例程 %matlab代码 T1=...
%matlab代码
function CC=cc(T1,T2)	%T1,T2是图片
T1=T1(:);
T2=T2(:);
T1=double(T1);
T2=double(T2);
A=cov(T1,T2);
b=sqrt(var(T1)*var(T2));
CC=A(1,2)/b;
end

这是测试用图

这是测试例程
%matlab代码
T2=255-T1;
CC=cc(T1,T2);
disp(CC);

这是结果


展开全文
• SLNum=iris(:,1); SWNum=iris(:,2); PLNum=iris(:,3); PWNum=iris(:,4); Num=[SLNum,SWNum,PLNum,PWNum]; coeff1=corr(SLNum,SWNum,'type','Spearman'); coeff2=corr(SLNum,PLNum,'type','Spearman');...c...

SLNum=iris(:,1);
SWNum=iris(:,2);
PLNum=iris(:,3);
PWNum=iris(:,4);
Num=[SLNum,SWNum,PLNum,PWNum];
coeff1=corr(SLNum,SWNum,'type','Spearman');
coeff2=corr(SLNum,PLNum,'type','Spearman');
coeff3=corr(SLNum,PWNum,'type','Spearman');
coeff4=corr(SWNum,PLNum,'type','Spearman');
coeff5=corr(SWNum,PWNum,'type','Spearman');
coeff6=corr(PLNum,PWNum,'type','Spearman');
D=[0,coeff1,coeff2,coeff3;coeff1,0,coeff4,coeff5;coeff2,coeff4,0,coeff6;coeff3,coeff5,coeff6,0];
coeffp1=corr(SLNum,SWNum,'type','Pearson');
coeffp2=corr(SLNum,PLNum,'type','Pearson');
coeffp3=corr(SLNum,PWNum,'type','Pearson');
coeffp4=corr(SWNum,PLNum,'type','Pearson');
coeffp5=corr(SWNum,PWNum,'type','Pearson');
coeffp6=corr(PLNum,PWNum,'type','Pearson');
Dp=[0,coeffp1,coeffp2,coeffp3;coeffp1,0,coeffp4,coeffp5;coeffp2,coeffp4,0,coeffp6;coeffp3,coeffp5,coeffp6,0];
D1=sum(D,2);
Dp1=sum(Dp,2);
I=(1./D1)';
J=(1./Dp1)';
SL=[0,0.9105*I(1),0,0,0.0797*I(1),0,0,1-I(1)+I(1)*0098];
SW=[0,0.8260*I(3),0,0,0,0.1561*I(2),0,1-I(2)+I(2)*0.0178];
PL=[0,1.0000*I(3),0,0,0.0000*I(3),0,0,1-I(3)+I(3)*0.0000];
PW=[0,1.0000*I(4),0,0,0.0000*I(4),0,0,1-I(4)+I(4)*0.0000];
m1=DS_fusion(SL,SW);
m2=DS_fusion(m1,PL);
m=DS_fusion(m2,PW);
SLp=[0,0.9105*J(1),0,0,0.0797*J(1),0,0,1-J(1)+J(1)*0098];
SWp=[0,0.8260*J(3),0,0,0,0.1561*J(2),0,1-J(2)+J(2)*0.0178];
PLp=[0,1.0000*J(3),0,0,0.0000*J(3),0,0,1-J(3)+J(3)*0.0000];
PWp=[0,1.0000*J(4),0,0,0.0000*J(4),0,0,1-J(4)+J(4)*0.0000];
m3=DS_fusion(SLp,SWp);
m4=DS_fusion(m3,PLp);
mp=DS_fusion(m4,PWp);

转载于:https://www.cnblogs.com/XuHonghui/p/6719910.html
展开全文
• 本讲我们将介绍两种最为常用的相关系数：皮尔逊person相关系数和斯皮尔曼spearman等级相关系数。它们可用来衡量两个变量之间的相关性的大小，根据数据满足的不同条件，我们要选择不同的相关系数进行计算和分析（建模...
本讲我们将介绍两种最为常用的相关系数：皮尔逊person相关系数和斯皮尔曼spearman等级相关系数。它们可用来衡量两个变量之间的相关性的大小，根据数据满足的不同条件，我们要选择不同的相关系数进行计算和分析（建模论文中最容易用错的方法）。

clear;clc
% 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]  %将这些统计量放到一个矩阵中中表示

%% 计算各列之间的相关系数
% 在计算皮尔逊相关系数之前,一定要做出散点图来看两组变量之间是否有线性关系
% 这里使用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操作哦 看我演示

%% 正态分布检验
% 正态分布的偏度和峰度
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)

% Q-Q图
qqplot(Test(:,1))

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

% 大样本下的假设检验
% 计算检验值
disp(sqrt(590)*0.0301)
% 计算p值
disp((1-normcdf(0.7311))*2) % normcdf用来计算标准正态分布的累积概率密度函数

% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')

% % 注意：代码文件仅供参考，一定不要直接用于自己的数模论文中
% % 国赛对于论文的查重要求非常严格，代码雷同也算作抄袭
% % 更多优质数模资料可在我的微店获取：https://weidian.com/?userid=1372657210
% % 数学建模讨论群获取地址：http://note.youdao.com/noteshare?id=4997251d8219a45d56631e412b1e9392


展开全文
• 目录Pearson相关系数定义Matlab中的相关函数corrcoef和corr计算两个变量Pearson相关系数随时间变化的例子计算两个变量Pearson相关系数随时间变化的例子如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
目录写在前面Pearson相关系数的定义Matlab中的相关函数corrcoef和corr计算两个变量Pearson相关系数随时间变化的例子计算时域上的Pearson相关系数函数问题参考
写在前面
在数据处理中，我们常常需要判断两个时间序列在时域上的相关性，Pearson相关系数广泛用于度量两个变量之间的相关程度，它是由Karl Pearson从Francis Galton在19世纪80年代提出的一个相似却又稍有不同的想法演变而来的。这里首先简单介绍了 Pearson相关系数，接着给出了一个计算两个变量的Pearson相关系数随时间变化的例子，最后给出了一个可以设置时间窗的计算两个变量的Pearson相关系数随时间变化的函数。
Pearson相关系数的定义
两个变量之间的Pearson相关系数定义为两个变量之间的协方差和标准差的商，变量X和Y的Pearson相关系数为：
$\rho _{X,Y}= \frac{cov\left ( X,Y \right )}{\sigma _{X}\sigma _{Y}}= \frac{E\left [ \left ( X-\mu _{X} \right )\left ( X-\mu _{Y} \right ) \right ]}{\sigma _{X}\sigma _{Y}}\,.$

Pearson相关系数衡量的是线性相关关系。若ρ=0，只能说x与y之间无线性相关关系，不能说无相关关系。相关系数的绝对值越大，相关性越强：相关系数越接近于1或-1，相关度越强，相关系数越接近于0，相关度越弱。
对于x,y之间的相关系数ρ：
当ρ大于0小于1时表示x和y正相关关系
当ρ大于-1小于0时表示x和y负相关关系
当ρ=1时表示x和y完全正相关，ρ=-1表示x和y完全负相关
当ρ=0时表示x和y不相关
通常情况下通过以下取值范围判断变量的相关强度：
相关系数 相关强度
0.8-1.0  极强相关
0.6-0.8  强相关
0.4-0.6  中等程度相关
0.2-0.4  弱相关
0.0-0.2  极弱相关或无相关

链接:
Pearson相关系数-百度百科
皮尔逊相关系数-百度百科
Matlab中的相关函数corrcoef和corr
R = corrcoef(x,y)表示计算序列x和序列y的相关系数，得到的结果是一个2*2矩阵，其中对角线上的元素分别表示x和y的自相关系数，非对角线上的元素分别表示x与y的相关系数和y与x的相关系数。
rho = corr(x,y)表示计算x和y的相关系数矩阵，若x, y是一维列向量，则返回它们的相关系数。
Tipscorr函数有个参数’type’，默认值是’Pearson’

Value
Description

‘Pearson’
Pearson’s Linear Correlation Coefficient

‘Kendall’
Kendall’s Tau Coefficient

‘Spearman’
Spearman’s Rho

计算两个变量Pearson相关系数随时间变化的例子
这里我们给出一个使用Matlab计算两个变量的相关性随时间变化的例子。
定义两个变量x和y，时间长度为1天，采样率为10Hz，则每个变量有24×60×60×10=864000个点。
我们令x为-1到1的随机变量。y分为四个部分：

第一部分（1:21600）与对应x的值相同；
第二部分（21601:432000）与对应x的值正负相反；
第三部分（432001:648000）-1到1的随机变量；
第四部分（648001:864000）是对应x的翻转。

假设以10秒为时间窗的长度来计算一次Pearson相关系数，当我们将时间分段计算时，其实有两种方式：
第一种方式，每个时间窗之间不重叠，则一共要计算86400/10=8640个Pearson相关系数。
第二种方式，每个时间窗之间有重叠，若重叠50%，则除了最开始的5秒和最后的5秒，每个时间窗都被重复计算了一次，一共要计算(86400/5)-1=17279个Pearson相关系数。

这里我们采用每10秒计算一个x与y的Pearson相关系数，相邻时间段之间重叠一半。
结果如下图：

代码如下：
% A example of calculating the Pearson's Linear Correlation Coefficient of
% two variables x and y in time domain
% by wuyc on 2021.5.28

clear all;

FS = 10;
npoints = 24*60*60*FS;
part = npoints/4;
pearcorr=[];
%Define variables x and y
x = -1+(1-(-1))*rand(npoints,1);
y = zeros(npoints,1); %Initialization variable y
y(1:part) = x(1:part);
y(part+1:2*part) = -x(part+1:2*part);
y(2*part+1:3*part) = -1+(1-(-1))*rand(part,1);
y(3*part+1:4*part) = flipud(x(3*part+1:4*part));

timeWindow = 10*FS;
step = timeWindow/2;
itera = (npoints/step)-1;

for i = 1:itera
xi = x((i-1)*step+1:(i+1)*step);
yi = y((i-1)*step+1:(i+1)*step);
peari=corr(xi,yi);
pearcorr = [pearcorr;peari];
end

pearend = corr(x(),y());
pearcorr = [pearcorr;pearend];

figure(1);

subplot(3,1,1)
plot(x(1:step:end),'color',[0,0,139]/255,'Linewidth',1);
xlim([0 17280]);ylim([-1 1]);
xticks(0:1440:17280);
xticklabels({'00','02','04','06','08','10','12','14','16','18','20','22','24'});
xlabel('Time (hour)','FontSize',12);
ylabel('Value of x','FontSize',12);

subplot(3,1,2)
plot(y(1:step:end),'color',[139,0,139]/255,'Linewidth',1);
xlim([0 17280]);ylim([-1 1]);
xticks(0:1440:17280);
xticklabels({'00','02','04','06','08','10','12','14','16','18','20','22','24'});
xlabel('Time (hour)','FontSize',12);
ylabel('Value of y','FontSize',12);

subplot(3,1,3)
plot(pearcorr,'k','Linewidth',2);
xlim([0 17280]);ylim([-1 1]);
xticks(0:1440:17280);
xticklabels({'00','02','04','06','08','10','12','14','16','18','20','22','24'});
xlabel('Time (hour)','FontSize',12);
ylabel('Pearson Correlation');


计算时域上的Pearson相关系数函数
为了能够能方便的计算两个变量在时域上的相关性，这里给出可以设置时间窗的计算两个变量的Pearson相关系数随时间变化的函数。
函数如下：
% A function for calculating the Pearson's Linear Correlation Coefficient of
% two variables x and y in time domain
% by wuyc on 2021.5.28

% ------Parameter description------
% x and y are one-dimensional column vectors of the same length
% timeWindow is the number of points to calculate a correlation coefficient

function PearCorr = CalcPearson(x,y,timeWindow)

PearCorr = [];
npoints = length(x);
step = timeWindow/2;
itera = (npoints/step)-1;

for i = 1:itera
xi = x((i-1)*step+1:(i+1)*step);
yi = y((i-1)*step+1:(i+1)*step);
peari=corr(xi,yi);
PearCorr = [PearCorr;peari];
end

pearend = corr(x(end-step+1:end),y(end-step+1:end));
PearCorr = [PearCorr;pearend];

end


这时，我们回到刚才的例子，使用20秒作为时间窗，并且通过调用刚刚定义的CalcPearson函数来实现计算x和y的相关性，就显得方便很多。
结果如下图：

代码如下：
% A example of calculating the Pearson's Linear Correlation Coefficient of
% two variables x and y in time domain
% by wuyc on 2021.5.28

clear all;

FS = 10;
npoints = 24*60*60*FS;
part = npoints/4;

%Define variables x and y
x = -1+(1-(-1))*rand(npoints,1);
y = zeros(npoints,1); %Initialization variable y
y(1:part) = x(1:part);
y(part+1:2*part) = -x(part+1:2*part);
y(2*part+1:3*part) = -1+(1-(-1))*rand(part,1);
y(3*part+1:4*part) = flipud(x(3*part+1:4*part));

timeWindow = 20*FS;
step = timeWindow/2;
pearcorr = CalcPearson(x,y,timeWindow);

figure(1);

subplot(3,1,1)
plot(x(1:step:end),'color',[0,0,139]/255,'Linewidth',1);
ylabel('Value of x');

subplot(3,1,2)
plot(y(1:step:end),'color',[139,0,139]/255,'Linewidth',1);
ylabel('Value of y');

subplot(3,1,3)
plot(pearcorr,'k','Linewidth',2);
ylabel('Pearson Correlation');


问题

问题一
时间窗设置为偶数，这就导致它没有中间数。例如在第一个例子中，第一个时间窗为第1到第100个点，第二个时间窗为第51到第150个点，这就导致了两个时间窗的overlap并不正好是50%。
问题二
当我们计算完时域上的相关系数之后，常常需要将两个变量曲线和相关性曲线画在同一个坐标系上。变量的长度显然要大于相关系数的长度，相关系数的长度为(npoints/step)-1，这个-1有点讨厌，因为我们希望它们是一个整数倍数的关系。当然也可以通过对相关系数进行插值来解决这个问题，但是这里我们采用了另一个思路。
我们计算相关系数的时候，最后加了一个点，把最后一个时间窗没有重叠的那部分又计算了一个相关系数，这样我们只需要简单对变量x和y降采样就可以将它们画在同一个坐标系上了。

参考
Pearson相关系数-百度百科
皮尔逊相关系数-百度百科
[1]: https://baike.baidu.com/item/Pearson相关系数/6243913
[2]: https://baike.baidu.com/item/皮尔逊相关系数/12712835


展开全文
• Spear me n相关系数和Pears on相关系数及其MATLAB实现 Spearmen相关系数Spearman秩相关系数是一种无参数(与分布无关)检验方法用于 度量变量之间联系的强弱在没有重复数据的情况下如果一个变量是另外一个变量的严格...
• 求两幅图像间的相关系数matlab的M文件---CorrelationCoefficient.m---；很简单的东东，但可以为你省些时间。共享改变未来！
• 在脑科学领域的研究中，进行相关分析必不可少，...本文，笔者对相关系数和偏相关系数的原理进行简单论述，并重点说明如何用Matlab实现相关系数和偏相关系数的计算。 Pearson和Spearman相关系数 Pearson相关系数。Pears
• 统计相关系数(1)——Pearson(皮尔逊)相关系数MATLAB实现 标签： matlabfunction 2010-07-11 18:45 82823人阅读 评论(9) 收藏 举报  分类： MATLAB（6）  版权声明：本文为博主原创...
• Spearman 函数使用 matlab corr 函数计算 Spearman 秩相关系数，并确定 r 方拟合优度。
• 统计相关系数简介     由于使用的统计相关系数比较频繁，所以这里就利用几篇文章简单介绍一下这些系数。   相关系数：考察两个事物（在数据里我们称之为变量）之间的相关程度。   如果有两...
• PAGE / NUMPAGES matlab求解相关系数 最近收到一项新任务要求两个矩阵的相关系数说白了就是转换成向量两两计算本 来这个工作我是想自己写个小程序搞定的但是大家纷纷反映matlab自带了此项功能本着活到老学到老的心态...
• ## matlab相关系数计算

万次阅读 2018-07-17 01:00:31
一、相关系数  具体的理论知识参见其他气象统计学教材。简单的说，相关系数r就是求两个大小相同样本的相关性，范围在-1到1之间。样本的相关性并不能代表总体也是相关的，因此需要做统计检验。常用的检验方法是t检验...
• ## MATLAB相关系数计算

万次阅读 2015-04-08 21:45:44
参考资料 [1]matlab 相关系数 [2] Matlab的自相关函数xcorr [3]关于用matlab怎么分析两个离散序列相关性，是相关函数还是互功率谱？
• 该程序是在matlab中编程实现的，可以交互式进行影像匹配。其方法是基于相关系数进行的。 该程序是在matlab中编程实现的，可以交互式进行影像匹配。其方法是基于相关系数进行的。
• MATLAB程序分享MATLAB实现线性拟合和相关系数源程序代码-MATLAB实现线性拟合和相关系数 源程序代码.rar 程序代码见附件，拿资料请顺便顶个贴~~ 如果下载有问题，请加我 qq 1530497909，给你在线传
• 计算PLCC相关系数，包括非线性拟合处理，已经调试完成，直接得出结果。 。
• matlab开发-最大相关系数。一种从一维信号中提取周期脉冲的方法。
• ## Matlab计算相关系数

千次阅读 2020-01-10 14:46:26
Matlab使用corr函数和corrcoef函数计算r值和p值。

...

matlab 订阅