Исследование остаточных значений для Model Verification

Можно исследовать stats структура, которая возвращена обоими nlmefit и nlmefitsa, определить качество вашей модели. stats структура содержит поля со взвешенными остаточными значениями условного выражения (cwres поле), и индивидуум взвесил остаточные значения (iwres поле . Поскольку модель принимает, что остаточные значения нормально распределены, можно исследовать остаточные значения, чтобы видеть, как хорошо это предположение содержит.

Этот пример генерирует синтетические данные с помощью нормальных распределений. Это показывает, как подходящие статистические данные смотрят:

  • Хороший при тестировании против того же типа модели, как генерирует данные

  • Плохой, когда протестировано против неправильных моделей данных

  1. Инициализируйте 2D модель 100 индивидуумами:

    nGroups = 100; % 100 Individuals
    nlmefun = @(PHI,t)(PHI(:,1)*5 + PHI(:,2)^2.*t); % Regression fcn
    REParamsSelect = [1  2]; % Both Parameters have random effect
    errorParam = .03; 
    beta0 = [ 1.5  5]; % Parameter means
    psi = [ 0.35  0; ...  % Covariance Matrix
           0   0.51 ];
    time =[0.25;0.5;0.75;1;1.25;2;3;4;5;6];
    nParameters = 2;
    rng(0,'twister') % for reproducibility
  2. Сгенерируйте данные для подбора кривой пропорциональной ошибочной моделью:

    b_i = mvnrnd(zeros(1, numel(REParamsSelect)), psi, nGroups);
    individualParameters = zeros(nGroups,nParameters);
    individualParameters(:, REParamsSelect) = ...
         bsxfun(@plus,beta0(REParamsSelect), b_i);
    
    groups = repmat(1:nGroups,numel(time),1);
    groups = vertcat(groups(:));
    
    y = zeros(numel(time)*nGroups,1);
    x = zeros(numel(time)*nGroups,1);
    for i = 1:nGroups
        idx = groups == i;
        f = nlmefun(individualParameters(i,:), time);
        % Make a proportional error model for y:
        y(idx) = f + errorParam*f.*randn(numel(f),1);
        x(idx) = time;
    end
    
    P = [ 1 0 ; 0 1 ];
  3. Соответствуйте данным с помощью той же модели функции и ошибки регрессии в качестве генератора модели:

    [~,~,stats] = nlmefit(x,y,groups, ...
        [],nlmefun,[1 1],'REParamsSelect',REParamsSelect,...
        'ErrorModel','Proportional','CovPattern',P);
  4. Создайте стандартную программу графического вывода путем копирования следующего функционального определения и создания файла plotResiduals.m на вашем пути MATLAB®:

    function plotResiduals(stats)
    pwres = stats.pwres;
    iwres = stats.iwres;
    cwres = stats.cwres;
    figure
    subplot(2,3,1);
    normplot(pwres); title('PWRES')
    subplot(2,3,4);
    createhistplot(pwres);
    
    subplot(2,3,2);
    normplot(cwres); title('CWRES')
    subplot(2,3,5);
    createhistplot(cwres);
    
    subplot(2,3,3);
    normplot(iwres); title('IWRES')
    subplot(2,3,6);
    createhistplot(iwres); title('IWRES')
    
    function createhistplot(pwres)
    h = histogram(pwres);
    
    % x is the probability/height for each bin
    x = h.Values/sum(h.Values*h.BinWidth)
    
    % n is the center of each bin
    n = h.BinEdges + (0.5*h.BinWidth)
    n(end) = [];
    
    bar(n,x);
    ylim([0 max(x)*1.05]);
    hold on;
    x2 = -4:0.1:4;
    f2 = normpdf(x2,0,1);
    plot(x2,f2,'r');
    end
    
    end
  5. Постройте остаточные значения с помощью plotResiduals функция:

    plotResiduals(stats);

    Верхние графики вероятности выглядят прямыми, означая, что остаточные значения нормально распределены. Нижние графики гистограммы совпадают с наложенным нормальным графиком плотности. Таким образом, можно прийти к заключению, что ошибочная модель совпадает с данными.

  6. Для сравнения, соответствуют данные с помощью постоянной ошибочной модели, вместо пропорциональной модели, которая создала данные:

    [~,~,stats] = nlmefit(x,y,groups, ...
        [],nlmefun,[0 0],'REParamsSelect',REParamsSelect,...
        'ErrorModel','Constant','CovPattern',P);
    plotResiduals(stats);

    Верхние графики вероятности не являются прямыми, указывая, что остаточные значения не нормально распределены. Нижние графики гистограммы справедливо близко к наложенным нормальным графикам плотности.

  7. Для другого сравнения соответствуйте данным к различной структурной модели, чем та, которая создала данные:

    nlmefun2 = @(PHI,t)(PHI(:,1)*5 + PHI(:,2).*t.^4);
    [~,~,stats] = nlmefit(x,y,groups, ...
        [],nlmefun2,[0 0],'REParamsSelect',REParamsSelect,...
        'ErrorModel','constant', 'CovPattern',P);
    plotResiduals(stats);

    Верхние графики вероятности не являются прямыми. Кроме того, графики гистограммы вполне скашиваются по сравнению с наложенными нормальными графиками плотности. Эти остаточные значения не нормально распределены, и не совпадают с моделью.