此示例显示了如何执行曲线拟合和分配拟合,并讨论每种方法是否合适时。
曲线拟合和分布拟合是不同类型的数据分析。
当您想要将响应变量建模为预测变量的函数时,请使用曲线拟合。
当你想要对单个变量的概率分布建模时,使用分布拟合。
在以下实验数据中,预测变量是时间
,即服用药物后的时间。响应变量为浓缩的
,血液中药物的浓度。假设只有响应数据浓缩的
受实验错误的影响。
时间= [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...'; ';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.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(时间、浓缩的modelFun startingVals);
将Weibull曲线绘制到数据上。
xgrid = linspace (20100 0) ';线(Xgrid,预测(NLModel,XGRID),'颜色',“r”);
拟合的威布尔模型是有问题的。fitnlm
假设实验误差是可加的,并且来自于具有常数方差的对称分布。然而,散点图显示,误差方差与曲线的高度成正比。此外,可加性对称误差暗示阴性血药浓度测量是可能的。
更现实的假设是乘法错误是对数级的对称。在该假设下,通过拍摄两侧的日志将Weibull曲线拟合到数据。使用非线性最小二乘法以适合曲线:
nlmodel2 = fitnlm(时间,log(conc),@(p,x)日志(modelfun(p,x)),初始vals);
将新曲线添加到现有的绘图中。
线(xgrid exp(预测(nlModel2 xgrid)),'颜色'(0 5 0),'linestyle',' - ');传奇({'原始数据',“添加剂错误模式”,“乘法错误模式”});
模型对象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 =装天花板(max ());binEdges = 0: binWidth: lastVal + 1;h =直方图(生活,binEdges);包含('失败的时候');ylabel ('频率');ylim ([0 10]);
由于生命周期数据通常遵循威布尔分布,一种方法可能是使用前面曲线拟合示例中的威布尔曲线来拟合直方图。要尝试这种方法,将直方图转换为一组点(x,y),其中x是bin的中心,y是bin的高度,然后拟合这些点的曲线。
数量= histcounts(生活,binEdges);binCtrs = binEdges(1:end-1) + binWidth/2;h.FaceColor =[。9。9。9);持有在情节(binCtrs计数,“o”);持有离开
然而,将曲线拟合到直方图是有问题的,通常不建议。
这个过程违背了最小二乘拟合的基本假设。箱数是非负的,这意味着测量误差不可能是对称的。此外,在尾部的仓数与在分布中心的仓数有不同的可变性。最后,垃圾箱计数有一个固定的总和,这意味着它们不是独立的测量。
如果将Weibull曲线拟合到栏高度,则必须约束曲线,因为直方图是经验概率密度函数(PDF)的缩放版本。
对于连续数据,拟合曲线到直方图而不是数据丢弃信息。
直方图中的条形高度依赖于箱边和箱宽的选择。
对于许多参数分布,极大似然是一种更好的估计参数的方法,因为它避免了这些问题。Weibull pdf几乎与Weibull曲线的形式相同:
然而,
替换刻度参数
因为函数必须集成到1.使用最大可能性,使用威布尔分发到数据,使用fitdist
并指定'weibull'
作为发行版名。与最小二乘法不同,最大似然法发现的Weibull pdf最好地匹配缩放的直方图,而不最小化pdf和柱高之间的平方差的总和。
pd = fitdist(生活,'weibull');
绘制数据的缩放直方图,并叠加拟合的PDF。
H =直方图(Life,Beinges,'正常化',“pdf”,'facecholor',[.9 .9]);包含('失败的时候');ylabel ('概率密度');ylim (0.1 [0]);xgrid = linspace (20100 0) ';pdf = pdf (pd, xgrid);线(xgrid, pdf)
最好的做法是检查模型的拟合优度。
虽然通常不建议将曲线拟合到直方图,但在某些情况下,该过程是合适的。例如,看到符合自定义分布.
fitnlm
|fitglm
|Fitrgp.
|fitrsvm.
|polyfit
|fminsearch
|fitdist
|大中型企业
|ksdity
|分布更健康