⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modlgui.m

📁 PLS_Toolbox是用于故障检测与诊断方面的matlab工具箱
💻 M
📖 第 1 页 / 共 4 页
字号:
          set(f2(1,1),'String',int2str(min([40 s]')))
          set(e2(1,1),'Max',s,'Value',min([40 s]'), ...
            'SliderStep',[1/s 2/s])     %set max lvs

          s          = min([size(x,1)/2 40]');
          set(e2(2,1),'Max',s,'SliderStep',[1/s 2/s])
          modl.split = min([round(sqrt(size(x,1))) 10]');
          modl.split = max([modl.split 2]');
          set(e2(2,1),'Value',modl.split);   %set splits
          set(f2(2,1),'String',int2str(modl.split))
          modl.iter  = get(e2(3,1),'Value'); %set iter
        else
          stat.modl  = 'loaded';
        end
        set(f(2,1),'UserData',modl)
      end
    elseif strcmp(stat.modl,'calold')|strcmp(stat.modl,'loaded')
      lddlgpls(f(1,1),d(4,1),'double','test X-block')
      x             = get(f(1,1),'UserData');
      if isempty(x)
        modlgui('cleardata',a);
      elseif size(x,2)~=size(modl.reg,1)
        erdlgpls('number of vars in X ~= number of regression coef', ...
          'Error on Load Data!')
        modlgui('cleardata',a);
      elseif size(x,1)==1|size(x,2)==1
        erdlgpls('X-block must be a matrix','Error on Load Data!')
        modlgui('cleardata',a);    
      else
        stat.data   = 'new';
        stat.modl   = 'loaded';
        test.xname  = get(d(4,1),'UserData');
        set(f(5,1),'UserData',test)
      end
    end
  case 'loadslbl'
    if strcmp(stat.data,'test')
      s1          = test.slbl;
      s2          = test.slbln;
    else
      s1          = modl.slbl;
      s2          = modl.slbln;
    end 
    lddlgpls(b(2,1),e(4,1),'char')
    s             = get(b(2,1),'UserData');
    s0            = get(e(4,1),'UserData');
    if (~isempty(s0))&(~strcmp(s2,s0))
      if size(s,1)==size(x,1)
        if strcmp(stat.data,'test')|strcmp(stat.modl,'loaded')
          test.slbl  = s;
          test.slbln = s0;
        elseif strcmp(stat.data,'new')|strcmp(stat.data,'cal')
          modl.slbl  = s;
          modl.slbln = s0;
        end
      elseif ~isempty(s)
        if strcmp(stat.data,'test')|strcmp(stat.modl,'loaded')
          test.slbl  = [];
          test.slbln = [];
        elseif strcmp(stat.data,'new')|strcmp(stat.data,'cal')
          modl.slbl  = [];
          modl.slbln = [];
        end
        s = 'number of rows must equal number of ';
        s = [s,'rows of loaded data - no labels loaded'];
        erdlgpls(s,'Error on Load!')
      end
    end
  case 'loadvlbl'
    if strcmp(stat.data,'test')
      s1          = test.vlbl;
      s2          = test.vlbln;
    else
      s1          = modl.vlbl;
      s2          = modl.vlbln;
    end
    lddlgpls(b(2,1),e(4,1),'char')
    s             = get(b(2,1),'UserData');
    s0            = get(e(4,1),'UserData');
    if (~isempty(s0))&(~strcmp(s2,s0))
      if size(s,1)==size(x,2)
        if strcmp(stat.data,'test')|strcmp(stat.modl,'loaded')
          test.vlbl  = s;
          test.vlbln = s0;
        elseif strcmp(stat.data,'new')|strcmp(stat.data,'cal')
          modl.vlbl  = s;
          modl.vlbln = s0;
        end
      elseif ~isempty(s)
        if strcmp(stat.data,'test')|strcmp(stat.modl,'loaded')
          test.vlbl  = [];
          test.vlbln = [];
        elseif strcmp(stat.data,'new')|strcmp(stat.data,'cal')
          modl.vlbl  = [];
          modl.vlbln = [];
        end
        s = 'number of rows must equal number of ';
        s = [s,'columns of loaded data - no labels loaded'];
        erdlgpls(s,'Error on Load!')
      end
    end
  case 'loadsscl'
    if strcmp(stat.data,'test')
      s1         = test.sscl;
    else
      s1         = modl.sscl;
    end 
    lddlgpls(b(2,1),e(4,1),'double')
    s            = get(b(2,1),'UserData');
    [ms,ns]      = size(s);
    if ms>ns
      s          = s';
      [ms,ns]    = size(s);
    end
    if ms>1
      s = 'scale variable must be a vector';
      s = [s,' - no scale loaded'];
      erdlgpls(s,'Error on Load!')
    else
      if length(s1)==length(s)
        s2       = sum(s'-s1');
      else
        s2       = 1;
      end
      if s2
        if length(s)==size(x,1)
          if strcmp(stat.data,'test')|strcmp(stat.modl,'loaded')
            test.sscl  = s;
          elseif strcmp(stat.data,'new')|strcmp(stat.data,'cal')
            modl.sscl  = s;
          end
        elseif ~isempty(s)
          if strcmp(stat.data,'test')|strcmp(stat.modl,'loaded')
            test.sscl  = [];
          elseif strcmp(stat.data,'new')|strcmp(stat.data,'cal')
            modl.sscl  = [];
          end
          s = 'number of elements must equal number of ';
          s = [s,'rows of loaded data - no labels loaded'];
          erdlgpls(s,'Error on Load!')
        end
      end
    end
  case 'loadvscl'
    s1           = modl.vscl;
    lddlgpls(b(2,1),e(4,1),'double')
    s            = get(b(2,1),'UserData');
    [ms,ns]      = size(s);
    if ms>ns
      s          = s';
      [ms,ns]    = size(s);
    end
    if ms>1
      s = 'scale variable must be a vector';
      s = [s,' - no scale loaded'];
      erdlgpls(s,'Error on Load!')
    else
      if length(s1)==length(s)
        s2       = sum(s'-s1');
      else
        s2       = 1;
      end
      if s2
        if length(s)==size(x,2)
          modl.vscl  = s;
        elseif ~isempty(s)
          modl.vscl  = [];
          s = 'number of elements must equal to number of ';
          s = [s,'columns of loaded data - no labels loaded'];
          erdlgpls(s,'Error on Load!')
        end
      end
    end
  case 'loadmodl'
    lddlgpls(f(2,1),bb(1,1),'struct')
    modl   = get(f(2,1),'UserData');
    if isempty(modl)
      modlgui('clearmodl',a)
    else
      s    = char(fieldnames(modl));
      s1   = 'no';
      for jj=1:size(s,1)
        if strncmp(s(jj,:),'name',4)
          s1 = 'yes';
        end
      end
      if strcmp(s1,'no')|size(modl,1)>1|size(modl,2)>1
        erdlgpls('variable not a regression model', ...
          'Error on Load Model!')
        modlgui('clearmodl',a)
      elseif strcmp(s1,'yes')
        s  = strcmp(lower(modl.name),'nip');
        s  = strcmp(lower(modl.name),'sim')+s;
        s  = strcmp(lower(modl.name),'pcr')+s;
        if s
          if isempty(modl.xname)
            modlgui('clearmodl',a)
          else
            stat.modl = 'loaded';
            if ~strcmp(stat.data,'none')
              stat.data = 'new';
            end
            x      = size(modl.loads,2);
            format= get(e(1,1),'UserData');
            s      = [];
            for jj=1:size(modl.ssq,1)
              s    = [s;sprintf(format,modl.ssq(jj,:))];
            end
            set(e(4,1),'String',s,'Value',x)
            set(e(3,1),'String',int2str(x))
            set(f(4,1),'UserData',x)
          end
        else
          erdlgpls('variable not a regression model', ...
            'Error on Load Model!')
          modlgui('clearmodl',a)
        end
      else
        erdlgpls('variable not a regression model','Error on Load Model!')
        modlgui('clearmodl',a)
      end
    end
  case 'savemat'
    x    = x(modl.irow,modl.icol);
    y    = y(modl.irow,:);
    if isempty(x)
      erdlgpls('no data loaded to be saved','Error on Save!')
    else
      svdlgpls(x,'X-block');
      svdlgpls(y,'Y-block');
    end
  case 'savetst'
    if isempty(test)|isempty(test.xname)
      erdlgpls('no test data to be saved','Error on Save!')
    else
      svdlgpls(test,[upper(modl.name), ' test']);
    end     
  case 'savemodl'
    if isempty(modl)|isempty(modl.name)
      erdlgpls('no model to be saved','Error on Save!')
    else
      svdlgpls(modl,[upper(modl.name),' model']);
    end
  case 'cleardata'
    stat.data   = 'none';      %'new', 'cal', 'test'
    set(d(4,1),'UserData',[])  %clear x-block name
    modl.xname  = [];
    set(f(1,1),'UserData',[])  %clear x-block data
    set(f(6,1),'UserData',[])  %clear y-block name
    modl.yname  = [];
    set(f(7,1),'UserData',[])  %clear y-block data
    test.date   = [];          %
    test.time   = [];          %
    test.scores = [];          %Scores for test data
    test.res    = [];          %Sample Q residuals for test data
    test.tsq    = [];          %Sample Hotelling T^2 for tst data
    test.sscl   = [];          %Sample scale
    test.slbl   = [];          %Sample labels for test data
    test.slbln  = [];          %Sample label name for test data
    test.xname  = [];          %Name of loaded X-block variable
    test.ypred  = [];          %Predicted Y-block
    if ~strcmp(stat.modl,'none')
      stat.modl = 'loaded';
    end
    set(bb(12,1),'Enable','off')
    set(bb(1,1),'Enable','on')
  case 'clearmodl'
    stat.modl   = 'none';      %'calold', 'calnew', 'loaded'
    modl.date   = [];          %Date model was created
    modl.time   = [];          %Time model was created
    modl.reg    = [];          %Regression vector(s)
    modl.xname  = [];          %Name of loaded X-block variable
    modl.yname  = [];          %Name of loaded Y-block variable
    modl.ypred  = [];          %Y-block predictions
    modl.wts    = [];          %PLS weights w in NIPLS, r in SIMPLS
    modl.scores = [];          %X-block scores for cal data
    modl.loads  = [];          %X-block loadings
    modl.ssq    = [];          %Variance information
    modl.rmsec  = [];          %RMSEC
    modl.rmsecv = [];          %RMSECV
    modl.meanx  = [];          %Centering vectors
    modl.meany  = [];
    modl.stdx   = [];          %Scaling vectors
    modl.stdy   = [];
    modl.press  = [];          %Cross validation cumpress
    modl.res    = [];          %Sample Q residuals    
    modl.reslim = [];          %95% conf limit for Q
    modl.reseig = [];          %Residual Eigenvalues
    modl.yres   = [];          %Studentized y residuals
    modl.tsq    = [];          %Sample Hotelling T^2
    modl.tsqlim = [];          %95% conf limit for T^2
    modl.lev    = [];          %Leverage
    modl.irow   = [];          %Indices of samples used
    modl.icol   = [];          %Indices of variables used
    modl.drow   = [];          %Indices of samples deleted
    modl.dcol   = [];          %Indices of variables deleted
    modl.sscl   = [];          %Sample scale
    modl.vscl   = [];          %Variable scale
    modl.slbl   = [];          %Sample labels
    modl.slbln  = [];          %Sample label name
    modl.vlbl   = [];          %Variable labels
    modl.vlbln  = [];          %Variable label name
    %need to check if data loaded, if so give it those names
    switch get(e2(4,1),'value') %Scaling
    case 1
      modl.scale = 'none';
    case 2
      modl.scale = 'mean';
    case 3
      modl.scale = 'auto';
    end
    switch get(e2(5,1),'value') %Regression Method
    case 1
      modl.name  = 'nip';
    case 2
      modl.name  = 'sim';
    case 3
      modl.name  = 'pcr';
    end
    switch get(e2(6,1),'value') %Cross Validation Method
    case 1
      modl.cv    = 'loo';
    case 2
      modl.cv    = 'vet';
    case 3
      modl.cv    = 'con';
    case 4
      modl.cv    = 'rnd';
    end
    if ~strcmp(stat.data,'none')
      stat.data = 'new';
      [m,n]     = size(get(f(1,1),'UserData'));
      modl.irow = [1:m];
      modl.icol = [1:n];
      s         = min([m n 40]');
      set(e2(1,1),'Value',1,'Max',s)           %set max lvs
      set(f2([2 4],1),'String',int2str(s))
      set(f2(1,1),'String','1')
      modl.split = min([round(sqrt(m)) 10]');  %set splits
      modl.split = max([modl.split 2]');
    else
      set(e2(1,1),'Value',1,'Max',2)           %set max lvs
      set(f2(4,1),'String','2')
      set(f2(1,1),'String','1')
      modl.split  = 2;                         %set splits      
    end
    set(e2(2,1),'Value',modl.split);
    set(f2(2,1),'String',int2str(modl.split))
    modl.iter   = 5;                           %set iter
    set(e2(3,1),'Value',modl.iter)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -