В этом примере показов, как выполнить аппроксимирование кривыми и распределение подбора кривой, и обсуждается, когда каждый метод подходит.
Аппроксимирования кривыми и подбор кривой распределения являются различными типами анализа данных.
Используйте аппроксимирование кривыми, когда вы хотите смоделировать переменную отклика как функцию от переменной предиктора.
Используйте подбор кривой распределения, когда вы хотите смоделировать распределение вероятностей одной переменной.
В следующих экспериментальных данных переменная предиктора time
, время после приема препарата. Переменная отклика conc
, концентрацию препарата в кровотоке. Предположим, что только данные отклика conc
затронуто экспериментальной ошибкой.
time = [ 0.1 0.1 0.3 0.3 1.3 1.7 2.1 2.6 3.9 3.9 ... 5.1 5.6 6.2 6.4 7.7 8.1 8.2 8.9 9.0 9.5 ... 9.6 10.2 10.3 10.8 11.2 11.2 11.2 11.7 12.1 12.3 ... 12.3 13.1 13.2 13.4 13.7 14.0 14.3 15.4 16.1 16.1 ... 16.4 16.4 16.7 16.7 17.5 17.6 18.1 18.5 19.3 19.7]'; conc = [0.01 0.08 0.13 0.16 0.55 0.90 1.11 1.62 1.79 1.59 ... 1.83 1.68 2.09 2.17 2.66 2.08 2.26 1.65 1.70 2.39 ... 2.08 2.02 1.65 1.96 1.91 1.30 1.62 1.57 1.32 1.56 ... 1.36 1.05 1.29 1.32 1.20 1.10 0.88 0.63 0.69 0.69 ... 0.49 0.53 0.42 0.48 0.41 0.27 0.36 0.33 0.17 0.20]';
Предположим, вы хотите смоделировать концентрацию крови как функцию времени. График conc
против time
.
plot(time,conc,'o'); xlabel('Time'); ylabel('Blood Concentration');
Предположим, что conc
следует двухпараметрической кривой Вейбула как функция от time
. Кривая Вейбула имеет вид и параметры
где - горизонтальное масштабирование, является параметром формы, и - вертикальное масштабирование.
Подгонка модели Вейбула с помощью нелинейных методов наименьших квадратов.
modelFun = @(p,x) p(3) .* (x./p(1)).^(p(2)-1) .* exp(-(x./p(1)).^p(2)); startingVals = [10 2 5]; nlModel = fitnlm(time,conc,modelFun,startingVals);
Постройте график кривой Вейбула на данных.
xgrid = linspace(0,20,100)'; line(xgrid,predict(nlModel,xgrid),'Color','r');
Подобранная модель Weibull проблематична. fitnlm
принимает, что экспериментальные ошибки являются аддитивными и происходят из симметричного распределения с постоянным отклонением. Однако график поля точек показывает, что отклонение ошибки пропорционально высоте кривой. Кроме того, аддитивные, симметричные ошибки подразумевают, что возможно отрицательное измерение концентрации в крови.
Более реалистичным предположением является то, что мультипликативные ошибки симметричны по шкале журнала. В соответствии с этим предположением подгоните кривую Вейбула к данным, взяв логарифмический журнал обеих сторон. Используйте нелинейные методы наименьших квадратов, чтобы соответствовать кривой:
nlModel2 = fitnlm(time,log(conc),@(p,x) log(modelFun(p,x)),startingVals);
Добавьте новую кривую к существующему графику.
line(xgrid,exp(predict(nlModel2,xgrid)),'Color',[0 .5 0],'LineStyle','--'); legend({'Raw Data','Additive Errors Model','Multiplicative Errors Model'});
Объект модели nlModel2
содержит оценки точности. Лучшая практика состоит в том, чтобы проверить качество подгонки. Для примера сделайте невязку графики в журнал масштабе, чтобы проверить предположение о постоянных отклонениях для мультипликативных ошибок.
В этом примере использование модели мультипликативных ошибок мало влияет на предсказания модели. Для примера, где тип модели имеет больше влияния, см. «Подводные камни в подборе кривой нелинейных моделей путем преобразования в линейность».
Statistics and Machine Learning Toolbox™ включает в себя эти функции для подгонки моделей: fitnlm
для моделей нелинейного метода наименьших квадратов, fitglm
для обобщенных линейных моделей, fitrgp
для регрессионных моделей Гауссова процесса и fitrsvm
для машины опорных векторов регрессионных моделей.
Curve Fitting Toolbox™ предоставляет командную строку и графические инструменты, которые упрощают задачи в аппроксимирование кривыми. Для примера тулбокс обеспечивает автоматический выбор значений стартовых коэффициентов для различных моделей, а также устойчивых и непараметрических методов подгонки.
Optimization Toolbox™ имеет функции для выполнения сложных типов аппроксимирования кривыми анализа, таких как анализ моделей с ограничениями на коэффициенты.
Функция MATLAB ® polyfit
подходит для полиномиальных моделей и функции MATLAB fminsearch
полезен в других видах аппроксимирования кривыми.
Предположим, что вы хотите смоделировать распределение времени жизни электрических компонентов. Переменная life
измеряет время до отказа для 50 одинаковых электрических компонентов.
life = [ 6.2 16.1 16.3 19.0 12.2 8.1 8.8 5.9 7.3 8.2 ... 16.1 12.8 9.8 11.3 5.1 10.8 6.7 1.2 8.3 2.3 ... 4.3 2.9 14.8 4.6 3.1 13.6 14.5 5.2 5.7 6.5 ... 5.3 6.4 3.5 11.4 9.3 12.4 18.3 15.9 4.0 10.4 ... 8.7 3.0 12.1 3.9 6.5 3.4 8.5 0.9 9.9 7.9]';
Визуализируйте данные с помощью гистограммы.
binWidth = 2; lastVal = ceil(max(life)); binEdges = 0:binWidth:lastVal+1; h = histogram(life,binEdges); xlabel('Time to Failure'); ylabel('Frequency'); ylim([0 10]);
Поскольку данные о жизни часто следуют распределению Вейбула, одним из подходов может быть использование кривой Вейбула из предыдущего примера аппроксимированию кривыми, чтобы соответствовать гистограмме. Чтобы попробовать этот подход, преобразуйте гистограмму в набор точек (x, y), где x - центр интервала, а y - высота интервала, и затем подбирайте кривую к этим точкам.
counts = histcounts(life,binEdges); binCtrs = binEdges(1:end-1) + binWidth/2; h.FaceColor = [.9 .9 .9]; hold on plot(binCtrs,counts,'o'); hold off
Подгонка кривой к гистограмме, однако, проблематична и обычно не рекомендована.
Процесс нарушает основные допущения методом наименьших квадратов подбора кривой. Количества интервалов неотрицательны, что означает, что ошибки измерения не могут быть симметричными. Кроме того, количества интервалов имеют другую изменчивость в хвостах, чем в центре распределения. Наконец, количества интервалов имеют фиксированную сумму, что подразумевает, что они не являются независимыми измерениями.
Если вы подбираете кривую Вейбула к штриховым высотам, вы должны ограничить кривую, потому что гистограмма является масштабированной версией эмпирической функции плотности вероятностей (pdf).
Для непрерывных данных подгонка кривой к гистограмме, а не к данным отбрасывает информацию.
Высоты стержней в гистограмме зависят от выбора границ интервала и ширины интервала.
Для многих параметрических распределений максимальная правдоподобность является лучшим способом оценки параметров, потому что он избегает этих проблем. PDF Вейбула имеет почти ту же форму, что и кривая Вейбула:
Однако, заменяет параметр шкалы потому что функция должна интегрироваться в 1. Чтобы подогнать распределение Вейбула к данным с помощью максимальной вероятности, используйте fitdist
и задайте 'Weibull'
как имя распределения. В отличие от наименьших квадратов, максимальная правдоподобность находит PDF Вейбула, который лучше всего соответствует масштабированной гистограмме, не минимизируя сумму квадратов различий между высотами PDF и bar.
pd = fitdist(life,'Weibull');
Постройте масштабированную гистограмму данных и наложите установленный PDF.
h = histogram(life,binEdges,'Normalization','pdf','FaceColor',[.9 .9 .9]); xlabel('Time to Failure'); ylabel('Probability Density'); ylim([0 0.1]); xgrid = linspace(0,20,100)'; pdfEst = pdf(pd,xgrid); line(xgrid,pdfEst)
Лучшая практика состоит в том, чтобы проверить качество подгонки.
Хотя подгонка кривой к гистограмме обычно не рекомендуется, процесс в некоторых случаях подходит. Для получения примера см. раздел «Подбор пользовательских одномерных Распределений».
Statistics and Machine Learning Toolbox™ включает функцию fitdist
для аппроксимации объектов распределения вероятностей к данным. Это также включает специальные функции аппроксимации (такие как wblfit
) для подбора кривой параметрических распределений, использующих максимальную правдоподобность, функция mle
для подгонки пользовательских распределений без специальных функций аппроксимации и функции ksdensity
для подбора кривой непараметрических моделей распределения к данным.
Statistics and Machine Learning Toolbox дополнительно предоставляет приложение Distribution Fitter, которое упрощает многие задачи по подбору кривой распределения, такие как генерация визуализаций и диагностических графиков.
Функции в Optimization Toolbox™ позволяют вам соответствовать сложным распределениям, включая те с ограничениями на параметры.
Функция MATLAB ® fminsearch
обеспечивает максимальный подбор кривой распределения правдоподобия.
Distribution Fitter | fitdist
| fitglm
| fitnlm
| fitrgp
| fitrsvm
| fminsearch
| ksdensity
| mle
| polyfit