www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/@mdev_local/sweep_plot.m
function [RfStr,sigmaStr] = sweep_plot(mdev,Xs,Ys,ModelNos,SNo,AxHand,PlotOpts,PlotModes) %SWEEP_PLOT Plot twostage sweep predictions % Copyright 2000-2014 The MathWorks, Inc. and Ford Global Technologies, Inc. RfStr=''; sigmaStr=''; [PredType,MultiModel,MLEMode]= deal(PlotModes{:}); % PredType = normal/PRESS % MultiModel = MultiSelected or not % MLEMode = Verify MLE or not [bdflag,Trans,~,AbsX,~]= deal(PlotOpts{:}); % all TS models of this mdev_local Models= mdev.TwoStage; if MLEMode==2 && length(Models)>1 % make sure evaluation picks up the right model ModelNos=2; end if MLEMode selrf = mdev.ResponseFeatures([1 1],:); sm= mdev.MLE.Pooled_MSE; % pooled mean squared error sigma2 = [sm sm]; else selrf = mdev.ResponseFeatures; sigma2 = repmat(mdev.MLE.Pooled_MSE,length(Models),1); end LogL= mdev.TSstatistics.LogL; TSModels= Models(ModelNos); selrf= selrf(ModelNos,:); sigma2= sigma2(ModelNos); % ---------------------------------------------------------------------- % the local model L= model(mdev); XG= Xs{2}; % all values of response features of this local model Yf= mdev.RFData.double; % and just get data for this sweep Yf= Yf(SNo,RFstart(L)+1:end); Sigma= squeeze(mdev.MLE.Sigma(:,:,SNo)); % validate two stage models State= get(AxHand(1),'NextPlot'); set(AxHand(1),'NextPlot','add') switch PredType case 1 [~,Lpred,Lfpred]= plot(TSModels{:},Xs,Ys,[PlotOpts{:},0],AxHand(1)); t2= mdev.TSstatistics.RespFeat(SNo,ModelNos); case 2 [~,Lpred,Lfpred]= plot(TSModels{:},Xs,Ys,[PlotOpts{:},SNo],AxHand(1)); t2= NaN*ones(1,length(ModelNos)); end [L,LfitOK]= LocalModel(mdev,SNo); mbh=MBrowser; ATLOCALNODE = strcmp(mbh.CurrentNode.guid,'local'); if LfitOK && (~MultiModel || ATLOCALNODE) % Generate local fit curve (to compare with TS) L= SelFeat(L,selrf); [XL,YL,DataOK]= FitData(mdev,SNo); plot(L,XL,YL,DataOK,[PlotOpts{:}],AxHand(1),'k'); else % do not draw local fit X=Xs; Y= Ys; for i=1:length(TSModels) Xs= X; Ys= Y; TS= TSModels{i}; % local model not fitted so use estimated datum xlab= InputLabels(L); if ~AbsX && get(TS,'datumtype') dmodel= get(TS,'datum'); XL= Xs{1} - dmodel(XG); xlab= sprintf('%s-Datum',xlab{1}); else XL= Xs{1}; xlab = xlab{1}; end if Trans && HasTransform(L) out = getOutput(L); Ys{1}= ytrans(L,Ys{1}); set(Ys,'Units',TransUnits(out)) end L= get(TS,'local'); if sum(InputFactorTypes(L)==1)==1 % plot against data Xplt= XL; ColorOrderIndex = AxHand(1).ColorOrderIndex; if bdflag [~,hLeg] = plot(Xplt(:,1),Ys,'.', ... 'bd','grid', 'on','Parent',AxHand(1),'Color','k'); else [~,hLeg] = plot(Xplt(:,1),Ys,'.', ... 'grid', 'on','Parent',AxHand(1),'Color','k'); end AxHand(1).ColorOrderIndex = ColorOrderIndex; delete(hLeg); xlabel(xlab,'Parent',AxHand(1)) end; end end set(AxHand(1),'NextPlot',State) % output RFStr? if nargout if ~MultiModel && LfitOK % display response feature info r= (Lfpred{1}-Yf(:,selrf)); S= Sigma *sigma2; S=S(selrf,selrf); rn= Inf(1,size(S,1)); if all(diag(S)>0) sd= diag(1./sqrt(diag(S))); S= sd*S*sd; r= r*sd; if all(isfinite(S(:))) && rank(S)==size(S,1) rn= r/chol(S); end end chnames= char(children(mdev,'name')); chnames= chnames(RFstart(L)+1:end,:); % don't let displayed RF names be longer than 25 maxNameLength = min(size(chnames,2),25); % concatenate strings rfname = char([{'RF Name'},chnames(selrf,1:maxNameLength)]); rfhat = char([{' RFhat'},num2str(Lfpred{1}(:),'%10.2g')]); rf = char([{' RF'},num2str(Yf(:,selrf)','%10.2g')]); rfT = char([{' RF t'},num2str(rn(:),'%6.2f')]); RfStr = [ rfname,... blanks(length(selrf)+1)',rfhat,... blanks(length(selrf)+1)',rf,... blanks(length(selrf)+1)',rfT]; end end % output sigmaStr? if nargout>1 % display info sigmaStr= cell(1,length(ModelNos)); for ModNo=1:length(ModelNos) rf= selrf(ModNo,:); S= Sigma(rf,rf)*sigma2(ModNo); rp=(double(Ys)-Lpred{ModNo}); rp= rp(isfinite(rp)); dfp= length(rp)-size(S,1); if dfp>0 sp = sqrt( sum(rp.^2)/dfp ); else sp = NaN; end sigmaStr{ModNo}= sprintf('%10.3g %10.3g %10.3g',t2(ModNo),LogL(SNo,ModNo),sp); end sigmaStr = char(sigmaStr); end