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] %显示回归方程的系数,每一列是一个方程,每一列的第一个数是常数项

温馨提示:答案为网友推荐,仅供参考

tbd matlab,如何用matlab实现偏相关分析相关推荐

  1. 解一元二次方程 matlab,如何用Matlab求一元二次方程式解的个数以及解

    我们学习数学经常会遇到一元二次方程式,那么如何用Matlab软件求一元二次方程式解的个数以及各个解的值呢?下面小编给大家分享一下. 工具/材料 Matlab 首先打开Matlab软件,点击左上角的Ne ...

  2. 中通滤波matlab,如何用MATLAB将低通改成中通滤波器

    程序注释:有疑问的我标注出来了???f1=10;f2=200;fs=1000;????????F1=f1/fs;F2=f2/fs;???????%数字频率(此处应该是2*f1/fs,2*f2/fs)? ...

  3. MATLAB | 如何用MATLAB绘制这样有气泡感的网络图

    今天给大家带来一款用来绘制有气泡感的网络图的工具函数,绘制效果如下: 花里胡哨的,气泡大小代表流入流出数据量综合,不同颜色的气泡代表属于不同类,两个气泡之间有连线代表有数据流动,连线透明度代表流动数据 ...

  4. MATLAB | 如何用MATLAB绘制花里胡哨的山脊图

    本期推送教大家如何绘制各种样式的山脊图,这里做了一个工具函数用来实现好看的山脊图的绘制,编写不易请多多点赞,大体绘制效果如下: 依旧工具函数放在文末. 教程部分 0 数据准备 数据为多个一维向量放在元 ...

  5. 噪声调频 matlab,如何用matlab编写噪声调频干扰信号

    2013-11-01 qsort函数怎么编? qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp ...

  6. 玫瑰线 matlab,如何用MATLAB画玫瑰线

    匿名用户 1级 2011-06-18 回答 function plot_rose draw_main(450,90); function draw_main(x,y) %粉红色玫瑰 arcdata{1 ...

  7. inl和dnl matlab_请问如何用matlab仿真它的性能, 比如 INL, DNL, SFDR,EOB等等。

    如果用Hspice仿真一个Pipelined ADC, 之后如何用matlab仿真它的性能, 比如 INL, DNL, SFDR,EOB等等. 这个你可能要自己编程. 小编能给个联系方式吗?我做的也是 ...

  8. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

    [纯技术帖]为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换来源: 陈诚--WECN的日志 写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,内容 ...

  9. matlab如何求变换矩阵,如何用Matlab实现机器人的变换矩阵

    如何用Matlab实现机器人的变换矩阵 如何用Matlab实现机器人的变换矩阵 前言 其中有些思路参考了这篇博客,有兴趣的同学可以看一下博客参考(关于位姿变换矩阵) 刚开始学工业机器人的时候,大家都先 ...

最新文章

  1. c语言funcode空格消失的函数,01北科大暑期计算机实践FunCode游戏设计+C++课程设计 - 海底世界 - 图文...
  2. linux目录挂载到内存,Linux中内存挂载到目录下
  3. Winform中实现List<string>赋值给dataGridView与实现多选、全选和获取选择的内容
  4. python中lambda函数_python中的lambda函数用法
  5. Eclipse Java类编辑器里出现乱码的解决方案
  6. Java实现C语言select函数_一道面试题目,分别用sql 和java,c++, c语言实现,
  7. C++设计模式-Decorator装饰模式
  8. HTML5 Canvas的基本用法
  9. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五
  10. webAppbuilder微件使用教程2 常用微件介绍
  11. python图像转字符画_Python实现图片转字符画的示例
  12. 推荐《Office SharePoint Server 2007案例实战开发》
  13. Python.暴力破解rar密码
  14. Hadoop环境搭建
  15. linux服务器安装cuda,在Linux下安装Cuda5
  16. 1984-1999:中国电影的黄金十五年
  17. Jdt-compiler是什么?有什么作用
  18. [量子客]4月全球量子计算发展内参
  19. 频率响应、零极点、稳定性专题
  20. iOS内嵌unity

热门文章

  1. 充电误区那点事和电池医生类软件
  2. C语言课设-----工资管理系统(附全部源码)
  3. 会计凭证过账demo_SAP刘梦_新浪博客
  4. cs/bs软件架构优缺点
  5. 2022国际版多语言多商户智能机器人在线客服源码配置文档
  6. 主机托管的优点有哪些?
  7. WIN7我的电脑右键管理打不开
  8. python自动刷视频_python+adb命令实现自动刷视频脚本案例
  9. mysql之设置字段分隔符_mysql字段中使用逗号分隔符
  10. DIV在FLASH上面、FLASH透明背景