cyfile / Matlab-miscellanies

各种Matlab代码
0 stars 0 forks source link

相关系数 corr #4

Open 213cy opened 9 years ago

213cy commented 9 years ago

unt

213cy commented 9 years ago
%% corr 和corrcoef 算法相同,处理变量的方式不同
% corr(x,y)是corrcoef([x,y])的一部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
N=30;%变量个数,向量维数
X= randn(N,1);%一个具有N个观察值的变量
Line=orth(ones(N,1));%参考直线
%现在去寻找另一个变量Y

%% 使Y和X相关系数为1,
%{该Y必须和 参考直线(1,1,1,...)与X共同确定的平面 共面%}
Y=orth([X,Line])*randn(2,1);%+randn*Line
RHO = corr(X,Y)
subplot(221)
plot(X,Y,'o')
title(['\rho = ' num2str(RHO)])

%% 使Y和X相关系数为0,
%{  
该Y和参考直线(1,1,1,...)确定的平面 必须和
   参考直线(1,1,1,...)与X共同确定的平面 垂直 
%}
Y=null([X,Line]')*randn(N-2,1)+randn*Line;
RHO = corr(X,Y)
subplot(224)
plot(X,Y,'o')
title(['\rho = ' num2str(RHO)])

%% 使Y和X相关系数为rho=cos(theta)=cos(2*rand*pi),
theta=pi/6;%rho=cos(theta)=0.86603
y1=orth(Line'*Line*X-Line'*X*Line);%Schimidt
[q,r]=qr([Line,X],0);
y1=q(:,2);%qr 分解
y2=null([X,Line]')*orth(randn(N-2,1));
y0=cos(theta)*y1+sin(theta)*y2;
cos(subspace([X,Line],y0))

Y=randn*y0+randn*Line;
RHO = corr(X,Y)

subplot(222)
plot(X,Y,'o')
title(['\rho = ' num2str(RHO)])

%% 使Y和X相关系数为rho=cos(theta)=cos(2*rand*pi),
theta=pi/3;%rho=cos(theta)=0.5
y1=orth(Line'*Line*X-Line'*X*Line);%Schimidt
[q,r]=qr([Line,X],0);
y1=q(:,2);%qr 分解
y2=null([X,Line]')*orth(randn(N-2,1));
y0=cos(theta)*y1+sin(theta)*y2;
cos(subspace([X,Line],y0))

Y=randn*y0+randn*Line;
RHO = corr(X,Y)

subplot(223)
plot(X,Y,'o')
title(['\rho = ' num2str(RHO)])

%%
Y=randn*X+randn;
RHO = corr(X,Y)

Y=randn(N,1)+randn;
RHO = corr(X,Y)

k=randn;%rho=cos(theta),k=tan(theta)
A=randn;
Y=A.*X+A*k*randn(N,1)+randn;

1/sqrt(k^2+1)
RH0 = corr(X,Y)