如何用matlab实现偏相关分析

如题所述

第1个回答  2012-11-03
matlab偏最小二乘分析(2009-11-20 16:43:07)转载▼
标签:杂谈
单因变量function y=pls(pz)
[row,col]=size(pz);
aver=mean(pz);
stdcov=std(pz); %求均值和标准差
rr=corrcoef(pz); %求相关系数矩阵
%data=zscore(pz); %数据标准化
stdarr = ( pz - aver(ones(row,1),:) )./ stdcov( ones(row,1),:); % 标准化数据结果与zscore()一致
x0=pz(:,1:col-1);y0=pz(:,end); %提取原始的自变量、因变量数据
e0=stdarr(:,1:col-1);f0=stdarr(:,end); %提取标准化后的自变量、因变量数据
num=size(e0,1);%求样本点的个数
temp=eye(col-1);%对角阵
for i=1:col-1
%以下计算 w,w*和 t 的得分向量,
w(:,i)= ( e0'* f0 )/ norm( e0'*f0 );
t(:,i)=e0*w(:,i) %计算成分 ti 的得分
alpha(:,i)=e0'*t(:,i)/(t(:,i)'*t(:,i)) %计算 alpha_i ,其中(t(:,i)'*t(:,i))等价于norm(t(:,i))^2
e=e0-t(:,i)*alpha(:,i)' %计算残差矩阵
e0=e;
%计算w*矩阵
if i==1
w_star(:,i)=w(:,i);
else
for j=1:i-1
temp=temp*(eye(col-1)-w(:,j)*alpha(:,j)');
end
w_star(:,i)=temp*w(:,i);
end
%以下计算 ss(i)的值
beta=[t(:,1:i),ones(num,1)]\f0 %求回归方程的系数
beta(end,:)=[]; %删除回归分析的常数项
cancha=f0-t(:,1:i)*beta; %求残差矩阵
ss(i)=sum(sum(cancha.^2)); %求误差平方和
%以下计算 press(i)
for j=1:num
t1=t(:,1:i);f1=f0;
she_t=t1(j,:);she_f=f1(j,:); %把舍去的第 j个样本点保存起来
t1(j,:)=[];f1(j,:)=[]; %删除第j个观测值
beta1=[t1,ones(num-1,1)]\f1; %求回归分析的系数
beta1(end,:)=[]; %删除回归分析的常数项
cancha=she_f-she_t*beta1; %求残差向量
press_i(j)=sum(cancha.^2);
end
press(i)=sum(press_i)
if i>1
Q_h2(i)=1-press(i)/ss(i-1)
else
Q_h2(1)=1
end
if Q_h2(i)<0.0985
fprintf('提出的成分个数 r=%d',i);
r=i;
break
end
end
beta_z=[t,ones(num,1)]\f0; %求标准化Y关于主成分得分向量t的回归系数
beta_z(end,:)=[]; %删除常数项
xishu=w_star*beta_z; %求标准化Y关于X的回归系数, 且是针对标准数据的回归系数,每一列是一个回归方程
mu_x=aver(1:col-1);mu_y=aver(end);
sig_x=stdcov(1:col-1);sig_y=stdcov(end);
ch0=mu_y-mu_x./sig_x*sig_y*xishu; %计算原始数据的回归方程的常数项
xish=xishu'./sig_x*sig_y; %计算原始数据的回归方程的系数,每一列是一个回归方程
Rc=corrcoef(x0*xish'+ch0,y0)
sol=[ch0;xish'] %显示回归方程的系数,每一列是一个方程,每一列的第一个数是常数项多因变量function y=pls(pz,Xnum,Ynum)
[row,col]=size(pz);
aver=mean(pz);
stdcov=std(pz); %求均值和标准差
rr=corrcoef(pz); %求相关系数矩阵
data=zscore(pz); %数据标准化
stdarr = ( pz - aver(ones(row,1),:) )./ stdcov( ones(row,1),:); % 标准化自变量
n=Xnum;m=Ynum; %n 是自变量的个数,m是因变量的个数
x0=pz(:,1:n);y0=pz(:,n+1:end); %提取原始的自变量、因变量数据
e0=data(:,1:n);f0=data(:,n+1:end); %提取标准化后的自变量、因变量数据
num=size(e0,1);%求样本点的个数
temp=eye(n);%对角阵
for i=1:n
%以下计算 w,w*和 t 的得分向量,
matrix=e0'*f0*f0'*e0;
[vec,val]=eig(matrix) %求特征值和特征向量
val=diag(val); %提出对角线元素
[val,ind]=sort(val,'descend');
w(:,i)=vec(:,ind(1)) %提出最大特征值对应的特征向量
t(:,i)=e0*w(:,i) %计算成分 ti 的得分
alpha(:,i)=e0'*t(:,i)/(t(:,i)'*t(:,i)) %计算 alpha_i ,其中(t(:,i)'*t(:,i))等价于norm(t(:,i))^2
e=e0-t(:,i)*alpha(:,i)' %计算残差矩阵
e0=e;
%计算w*矩阵
if i==1
w_star(:,i)=w(:,i);
else
for j=1:i-1
temp=temp*(eye(n)-w(:,j)*alpha(:,j)');
end
w_star(:,i)=temp*w(:,i);
end
%以下计算 ss(i)的值
beta=[t(:,1:i),ones(num,1)]\f0 %求回归方程的系数
beta(end,:)=[]; %删除回归分析的常数项
cancha=f0-t(:,1:i)*beta; %求残差矩阵
ss(i)=sum(sum(cancha.^2)); %求误差平方和
%以下计算 press(i)
for j=1:num
t1=t(:,1:i);f1=f0;
she_t=t1(j,:);she_f=f1(j,:); %把舍去的第 j个样本点保存起来
t1(j,:)=[];f1(j,:)=[]; %删除第j个观测值
beta1=[t1,ones(num-1,1)]\f1; %求回归分析的系数
beta1(end,:)=[]; %删除回归分析的常数项
cancha=she_f-she_t*beta1; %求残差向量
press_i(j)=sum(cancha.^2);
end
press(i)=sum(press_i)
if i>1
Q_h2(i)=1-press(i)/ss(i-1)
else
Q_h2(1)=1
end
if Q_h2(i)<0.0985
fprintf('提出的成分个数 r=%d',i);
r=i;
break
end
end
beta_z=[t(:,1:r),ones(num,1)]\f0; %求标准化Y关于 t 的回归系数
beta_z(end,:)=[]; %删除常数项
xishu=w_star(:,1:r)*beta_z; %求标准化Y关于X的回归系数, 且是针对标准数据的回归系数,每一列是一个回归方程
mu_x=aver(1:n);mu_y=aver(n+1:end);
sig_x=stdcov(1:n);sig_y=stdcov(n+1:end);
for i=1:m
ch0(i)=mu_y(i)-mu_x./sig_x*sig_y(i)*xishu(:,i); %计算原始数据的回归方程的常数项
end
for i=1:m
xish(:,i)=xishu(:,i)./sig_x'*sig_y(i); %计算原始数据的回归方程的系数, 每一列是一个回归方程
end
sol=[ch0;xish] %显示回归方程的系数,每一列是一个方程,每一列的第一个数是常数项本回答被提问者采纳

如何用matlab实现偏相关分析
beta1=[t1,ones(num-1,1)]\\f1; %求回归分析的系数beta1(end,:)=[]; %删除回归分析的常数项cancha=she_f-she_t*beta1; %求残差向量press_i(j)=sum(cancha.^2); endpress(i)=sum(press_i)if i>1Q_h2(i)=1-press(i)\/ss(i-1)elseQ_h2(1)=1endif Q_h2(i)<0.0985fprintf('提出的...

Matlab中的方差、标准差、相关系数与协方差的函数
首先,方差和标准差用于衡量数据偏离其平均值的程度。标准差数值越大,表示数据分布越分散。在Matlab中,我们可以通过`std()`函数计算标准差。对于向量或矩阵`X`,函数`S=std(X)`即可得到标准差`S`。同时,通过设置`flag`参数,可以调整分母为`n-1`或`n`以计算样本标准差或总体标准差。方差是标准...

基于Matlab、EEGLab和ERPlab的偏侧化差异波(N2pc\/Pd\/CDA )成分分析方法...
1.打开Matlab,然后在Command中输入eeglab,打开EEGLAB。2.使用EEGLAB导入数据,示例数据的采集设备为NeuroScan,因此数据导入的步骤依次为:File – Import data-Using EEGLAB function and plugins – From Neuroscan .CNT file。(PS:不同脑电采集设备采集的数据请使用对应的数据导入方式,具体的可查阅EEGLA...

谁可以通俗的解释下偏自相关函数,在线等
1. 首先说说自相关和互相关的概念。这个是信号分析里的概念,他们分别表示的是两个时间序列之间和同一个时间序列在任意两个不同时刻的取值之间的相关程度,即互相关函数是描述随机信号x(t),y(t)在任意两个不同时刻t1,t2的取值之间的相关程度,自相关函数是描述随机信号x(t)在任意两个不同时刻t1,...

MATLAB移动平均自回归模型(ARIMA)
在进行时间序列分析之前,对数据进行初步处理,包括数据清洗和缺失值处理等。接着,通过绘制时间序列图,可以观察数据的波动性和趋势。进一步地,我们利用偏自相关图对数据进行分析。该图展示了各个滞后阶的偏自相关系数,有助于我们确定自回归(AR)和移动平均(MA)的阶数。在确定了ARIMA模型的阶数后,...

MATLAB中的regionprops函数
要使用regionprops函数,首先需要使用MATLAB中的图像处理工具箱中的函数,如bwlabel或bwconncomp,来标记图像中的区域。这些函数将图像转换为标记矩阵,其中每个标记代表一个独特的区域。然后,可以将此标记矩阵作为regionprops函数的输入,以计算和返回与每个标记区域相关的属性。例如,假设我们有一个二值图像,...

随机模型预测控制(SMPC)——考虑概率约束(Matlab代码实现)
在Matlab的实现中,我们首先通过控制律调整输入,u_applied = u(:,1) - K*[x(:,1); x(:,2)],并在主函数中清晰地展示了结果。通过plot函数,我们直观地展示输入变化(u_applied, 'b', 'Linewidth', 0.8),同时调整了轴的范围,以便于观察(xlim(steps(1):steps(end)) 和 ylim([-0...

相关系数什么意思
pearson相关分析如下:从上表可知,利用相关分析去研究公司满意度和人际关系, 机会感知, 离职倾向, 工作条件共4项之间的相关关系,使用Pearson相关系数去表示相关关系的强弱情况。其中上表展示了各个变量的均值标准差以及相关系数等,例如:公司满意度的平均值为3.291,标准差为0.541,人际关系的平均值是3...

Mathematica 和 MATLAB 都有什么不同?做数学分析哪个比较专业
现在的调查结果是,matlab的解偏微分功能很渣,号称有解相关问题的工具箱(对,工具箱,这是许多人力挺matlab的理由之一),只能解非常简单的偏微分方程,而据说功能更强的相关指令,要求手动把方程要化成标准形式——把偏微分方程化成标准形式谈何容易!?而mathematica,相关求解格式就要简单的多,虽然也...

matlab怎么用
quit 退出MATLAB quiver 二维箭头图;主用于场强、流向 R r rand 均匀分布随机数组 randn 正态分布随机数组 random 产生各种分布随机数组 randsrc 产生均布数组 rank 秩 real 复数实部 realmax 最大浮点数 realmin 最小正浮点数 rem 求余数 repmat 铺放模块数组 reshape 矩阵变维 residue 求部分分式表达 return 返回...

相似回答