曲线拟合和分布拟合
这个例子展示了如何进行曲线拟合和分布拟合,并讨论了每种方法何时适用。
选择曲线拟合和分布拟合
曲线拟合和分布拟合是不同类型的数据分析。
当您希望将响应变量作为预测变量的函数进行建模时,请使用曲线拟合。
当要对单个变量的概率分布进行建模时,使用分布拟合。
曲线拟合
在下面的实验数据中,预测变量为时间
即服用药物后的时间。响应变量为浓缩的
即药物在血液中的浓度。假设只有响应数据浓缩的
受实验误差影响。
时间= [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];
假设你想把血浓度作为时间的函数来建模。情节浓缩的
反对时间
.
情节(时间、浓缩的“o”);包含(“时间”);ylabel (的血药浓度);
假设浓缩的
的函数为双参数威布尔曲线时间
.威布尔曲线具有如下形式和参数
在哪里 是水平缩放, 是形状参数,和 是垂直缩放。
用非线性最小二乘法拟合威布尔模型。
modelFun = @ (p, x) p (3) . * (x / p (1)) ^ (p(2) 1)。* exp (- (x / p(1)) ^(2)页);startingVals = [10 2 5];nlModel = fitnlm(time,conc,modelFun,startingVals);
在数据上绘制威布尔曲线。
Xgrid = linspace(0,20,100)';线(xgrid预测(nlModel xgrid),“颜色”,“r”);
拟合的威布尔模型有问题。fitnlm
假设实验误差是可加的,并且来自方差恒定的对称分布。然而,散点图显示,误差方差与曲线的高度成正比。此外,累加性对称误差意味着血药浓度测量阴性是可能的。
一个更现实的假设是,乘法误差在对数尺度上是对称的。在此假设下,通过对数据两边取对数来拟合威布尔曲线。用非线性最小二乘拟合曲线:
nlModel2 = fitnlm(time,log(conc),@(p,x) log(modelFun(p,x)),startingVals);
将新曲线添加到现有的绘图中。
线(xgrid exp(预测(nlModel2 xgrid)),“颜色”,[0.50 50],“线型”,“——”);传奇({“原始数据”,“加性误差模型”,“乘法误差模型”});
模型对象nlModel2
包含精度估计。最好的做法是检查模型的拟合优度。例如,在对数尺度上绘制残差图,以检验乘法误差的恒定方差假设。
在本例中,使用乘法误差模型对模型预测的影响很小。有关模型类型影响更大的示例,请参见用线性变换拟合非线性模型的缺陷.
曲线拟合函数
分布拟合
假设您想对电气元件寿命的分布进行建模。的变量生活
测量50个相同电子元件的故障时间。
生命= [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);包含(“失败的时刻”);ylabel (“频率”);ylim ([0 10]);
由于寿命数据通常遵循威布尔分布,一种方法可能是使用前面曲线拟合示例中的威布尔曲线来拟合直方图。要尝试这种方法,请将直方图转换为一组点(x,y),其中x是bin中心,y是bin高度,然后对这些点拟合曲线。
counts = histcounts(life,binEdges);binCtrs = binEdges(1:end-1) + binWidth/2;h.FaceColor = [;9 .9 .9];持有在情节(binCtrs计数,“o”);持有从
然而,将曲线拟合到直方图是有问题的,通常不建议这样做。
这个过程违背了最小二乘拟合的基本假设。箱子计数是非负的,这意味着测量误差不可能是对称的。而且,箱数在尾部的变异性与分布中心的变异性不同。最后,箱子计数有一个固定的和,这意味着它们不是独立的测量。
如果将威布尔曲线拟合到条形图的高度,则必须约束曲线,因为直方图是经验概率密度函数的缩放版本。
对于连续数据,将曲线拟合到直方图而不是数据会丢弃信息。
直方图中的条形图高度取决于箱边和箱宽的选择。
对于许多参数分布,极大似然是一种更好的估计参数的方法,因为它避免了这些问题。威布尔pdf与威布尔曲线的形式几乎相同:
然而,
替换scale参数。
因为这个函数必须积分为1。要使用最大似然对数据拟合威布尔分布,请使用fitdist
并指定“威布尔”
作为分发名称。与最小二乘不同的是,最大似然找到一个与缩放直方图最匹配的威布尔pdf,而不需要最小化pdf与柱高之间的平方差的总和。
生活;“威布尔”);
绘制数据的缩放直方图并叠加拟合的pdf。
h = histogram(life,binEdges,“归一化”,“pdf”,“FaceColor”,(。[9 .9 .9]);包含(“失败的时刻”);ylabel (的概率密度);ylim (0.1 [0]);Xgrid = linspace(0,20,100)';pdfEst = pdf(pd,xgrid);线(xgrid, pdf)
最好的做法是检查模型的拟合优度。
虽然通常不建议将曲线拟合到直方图上,但在某些情况下,这个过程是合适的。使用示例请参见拟合自定义单变量分布.
分布拟合的功能
另请参阅
分布更健康|fitdist
|fitglm
|fitnlm
|fitrgp
|fitrsvm
|fminsearch
|ksdensity
|大中型企业
|polyfit