tbd matlab,如何用matlab实现偏相关分析
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实现偏相关分析相关推荐
- 解一元二次方程 matlab,如何用Matlab求一元二次方程式解的个数以及解
我们学习数学经常会遇到一元二次方程式,那么如何用Matlab软件求一元二次方程式解的个数以及各个解的值呢?下面小编给大家分享一下. 工具/材料 Matlab 首先打开Matlab软件,点击左上角的Ne ...
- 中通滤波matlab,如何用MATLAB将低通改成中通滤波器
程序注释:有疑问的我标注出来了???f1=10;f2=200;fs=1000;????????F1=f1/fs;F2=f2/fs;???????%数字频率(此处应该是2*f1/fs,2*f2/fs)? ...
- MATLAB | 如何用MATLAB绘制这样有气泡感的网络图
今天给大家带来一款用来绘制有气泡感的网络图的工具函数,绘制效果如下: 花里胡哨的,气泡大小代表流入流出数据量综合,不同颜色的气泡代表属于不同类,两个气泡之间有连线代表有数据流动,连线透明度代表流动数据 ...
- MATLAB | 如何用MATLAB绘制花里胡哨的山脊图
本期推送教大家如何绘制各种样式的山脊图,这里做了一个工具函数用来实现好看的山脊图的绘制,编写不易请多多点赞,大体绘制效果如下: 依旧工具函数放在文末. 教程部分 0 数据准备 数据为多个一维向量放在元 ...
- 噪声调频 matlab,如何用matlab编写噪声调频干扰信号
2013-11-01 qsort函数怎么编? qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp ...
- 玫瑰线 matlab,如何用MATLAB画玫瑰线
匿名用户 1级 2011-06-18 回答 function plot_rose draw_main(450,90); function draw_main(x,y) %粉红色玫瑰 arcdata{1 ...
- inl和dnl matlab_请问如何用matlab仿真它的性能, 比如 INL, DNL, SFDR,EOB等等。
如果用Hspice仿真一个Pipelined ADC, 之后如何用matlab仿真它的性能, 比如 INL, DNL, SFDR,EOB等等. 这个你可能要自己编程. 小编能给个联系方式吗?我做的也是 ...
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
[纯技术帖]为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换来源: 陈诚--WECN的日志 写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,内容 ...
- matlab如何求变换矩阵,如何用Matlab实现机器人的变换矩阵
如何用Matlab实现机器人的变换矩阵 如何用Matlab实现机器人的变换矩阵 前言 其中有些思路参考了这篇博客,有兴趣的同学可以看一下博客参考(关于位姿变换矩阵) 刚开始学工业机器人的时候,大家都先 ...
最新文章
- c语言funcode空格消失的函数,01北科大暑期计算机实践FunCode游戏设计+C++课程设计 - 海底世界 - 图文...
- linux目录挂载到内存,Linux中内存挂载到目录下
- Winform中实现List<string>赋值给dataGridView与实现多选、全选和获取选择的内容
- python中lambda函数_python中的lambda函数用法
- Eclipse Java类编辑器里出现乱码的解决方案
- Java实现C语言select函数_一道面试题目,分别用sql 和java,c++, c语言实现,
- C++设计模式-Decorator装饰模式
- HTML5 Canvas的基本用法
- MyBatis多参数传递之混合方式——MyBatis学习笔记之十五
- webAppbuilder微件使用教程2 常用微件介绍
- python图像转字符画_Python实现图片转字符画的示例
- 推荐《Office SharePoint Server 2007案例实战开发》
- Python.暴力破解rar密码
- Hadoop环境搭建
- linux服务器安装cuda,在Linux下安装Cuda5
- 1984-1999:中国电影的黄金十五年
- Jdt-compiler是什么?有什么作用
- [量子客]4月全球量子计算发展内参
- 频率响应、零极点、稳定性专题
- iOS内嵌unity