声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1751|回复: 5

[编程技巧] 数据如何循环计算相关系数

[复制链接]
发表于 2010-4-21 16:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位大侠 再帮帮忙

我有两列数据一共有n行 比如说x y
x y是连续的 比如说 x=1:1:1000;y=sqrt(x)
我想从第2行开始计算x y的相关系数 比如说是c=corrcoef(x,y)
然后依次算到n行
再把c当中开始小于0.99的值找出来

不知道我说明白我的意思没有
各位多多帮忙 谢谢了
回复
分享到:

使用道具 举报

发表于 2010-4-21 16:53 | 显示全部楼层
没明白,你的x,y只有一行,哪有第二行?
而且相关系数最后算出来是2X2的矩阵,你的意思是从这个矩阵中找到小于0.99的值么?
如果x,y是n行的话,每一行算出的值全为1,没有小于0.99的值。。
 楼主| 发表于 2010-4-21 17:13 | 显示全部楼层
不好意思 我没说清楚

我的意思是 比如说现在有两行1000列的数据
x=1:1:10000;y=sqrt(x);
从第2列开始算x(1:2)和y(1:2)的相关系数c(1)
然后第3列 算x(1:3)和y(1:3)的相关系数c(2)
依次类推 到最后1列 x(1:1000)和y(1:1000)的相关系数c(999)
这个系数肯定是越来越小嘛 比如说当c开始小于一个数值的时候 比如说0.99
我希望可以把这个点找出来

谢谢啦
发表于 2010-4-21 20:32 | 显示全部楼层

回复 楼主 moon555sss 的帖子

用个if条件句不行么
 楼主| 发表于 2010-4-22 08:47 | 显示全部楼层
下面是同学教我怎么算出各组的相关系数
%%%
x1=1:1:100;y1=sqrt(x1);
n=length(x1);
c = cell(n-1,1);
x = c;
y = x;
for i = 1:n-1;
    x{i} = x1(1:i+1);
    y{i} = y1(1:i+1);
    c{i} = corrcoef(x{i},y{i});
end
%%%
不过那些数都写在矩阵里面
我不知道怎么把这些数提出来 重新写在一个数列
不好意思了 有没有好心人再给点提示
 楼主| 发表于 2010-4-22 11:35 | 显示全部楼层
总算是写出来了
我也发上来 希望有空的人 帮我修改修改
%导入数据
x1=1:1:100;
y1=sqrt(x1);
%相关系数
n=length(x1);
c=cell(n-1,1);
x=c;
y=x;
for ii=1:n-1;
    x{ii} = x1(1:ii+1);
    y{ii} = y1(1:ii+1);
    c{ii} = corrcoef(x{ii},y{ii});
end
for ii=1:n-2;
    b(ii)=c{ii+1}(1,2);
end
bb=[1,1,b];
%斜率
d=y1./x1;
%绘制原图 相关系数 斜率 对比
figure
subplot(3,1,1)
plot(x1,y1)
title('原图')
grid on
subplot(3,1,2)
plot(x1,bb)
title('相关系数')
grid on
subplot(3,1,3)
plot(x1,d)
title('斜率')
grid on
%在相关系数中找开始小于a的点
a=0.99;
for iii=1:n;
    flag=(bb(iii)<=a);
    if flag;
        break;
    end
end
num=iii-1;
x2=x1(1:num); %整理后的x
y2=y1(1:num); %整理后的y
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 16:34 , Processed in 0.048684 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表