data = xlsread('name.xls','sheet1'); % 读取excel表格里‘sheet1’内的数据,存%%
入data矩阵
% 表格里的第一行文字部分,自动不予录入
data=data(1203:9146,3:15); % 选择矩阵里的第1203--9146行,3--15列数据重
新%存入data矩阵,覆盖原来了的数据
[n,m]=size(data); % 计算data的行数 和列数
[X_new,S_mean,S_var]=datapretreatment(data,n); % 预处理库函数%datapretreatment,得到均值为0、方差为1的新数据“X_new”
[PCs,lambda,explained]=pcacov(X_new'*X_new/(n-1)); % 对协方差矩阵就行
主%元分解函数pcacov
% PCs为各主元,Iatent为协方差矩阵的特征值,
% explained为每个特征量表征在观察值总方差中所占的百分数 for i=1:m
if sum(explained(1:i))>=95 % 选择所占累积贡献大于95的变量为主元变量 break; end end
PCnum=i; % 得到的主元个数
PC=PCs(:,1:PCnum); % 经过降维后,把分解后的主元变量数据重新挑选出来 T(2)=T_confidence_levels(PCnum,n,0.05); % 0.05表示的是置信度为95%的统计量,计算T^2 统计量控制限阈值
Q(2)=Qstatistical_confidence_levels(lambda,m,PCnum,0.05); % 0.05表示的是%置信度为95%的统计量,计算Q统计量控制限阈值 %%%%%模型建立结束 %%%%%%%%
%%%%%诊断过程开始 %%%%%%%%
data1 =xlsread('05_04_05_13变量.xls','sheet1'); % 读取测试数据,和模型建时功能一样
data1=data1(1203:20788,3:15); % 选择需要测试的数据,存入data1矩阵中
N=size(data1,1); % 计算data1的行数 NN=1; % 赋值
for i=NN:N % 循环 N次
xnew=(data1(i,:)-S_mean)./S_var; % 测试数据预处理,
TT2(i-NN+1)=xnew*PC*inv(diag(lambda(1:PCnum)))*PC'*xnew'; % T方统%计量;inv求逆矩阵;diag构造对角矩阵;
err(i-NN+1)=(xnew-xnew*PC*PC')*(xnew-xnew*PC*PC')'; %Q统计量或%者称为SPE统计量
CPlot(i-NN+1,:)=(xnew-xnew*PC*PC').^2; % CPlot表示对Q统计量的贡%献 end
for i=1:13 % 13次循环(原始数据的变量个数) B(i)=sum(CPlot(:,i)); % 画条形图 表示贡献 end
% save B;
figure(1); % 图1显示条形图
bar (B(1,1:13), 'DisplayName', 'B(1,1:13)', 'YDataSource', 'B(1,1:13)'); %贡献图 figure(2) % 图2 显示 T^2统计量阈值线和测试数据的 T^2计算值,以便比较
hold on
plot(T(2)*ones(1,N-NN+1),':r'); plot(1:N-NN+1,TT2(1,:),'black'); xlabel('t');
ylabel('T^2统计量'); title('PCA'); grid;
figure(3) % 图3 显示Q统计量阈值线和测试数据的 Q计算值,以便比较 hold on
plot(Q(2)*ones(1,N-NN+1),':r'); plot(1:N-NN+1,err(1,:),'black'); xlabel('t');
ylabel('Q统计量'); title('PCA'); grid;
%%%%%诊断过程结束 %%%%%%%%
因篇幅问题不能全部显示,请点此查看更多更全内容