NonlinearModelFit Examples - Initializing Fit Paramiters - Bill Knowlton

advertisement
NonlinearModelFit Examples
- Initializing Fit Paramiters -Fitting Only Part of your data Bill Knowlton
Boise State University
November 19, 2014
NonlinearModelFit with Initial Values for Fit Parameters. Most of this example was taken from the
Documentation Center Examples
data = {{25., 0.001}, {25.5, 0.002}, {26., 0.011},
{26.5, 0.045}, {27., 0.112}, {27.5, 0.215}, {28., 0.259},
{28.5, 0.206}, {29., 0.112}, {29.5, 0.044}, {30., 0.011}};
(*fitting data*)
nlm = NonlinearModelFit[data, a Exp[- (x - b) ^ 2], {{a, .5}, {b, 25}}, x]
(*Providing initial values for fitting parameters a & b*)
(*Plotting data*)
Plot[nlm[x], {x, 25, 31}, Epilog ⧴ Point[data], PlotStyle → {Red, Thick}];
(*did not use, but nice way to ad data points to data*)
plotdata =
ListPlot[data, PlotRange → {{25, 31}, {0, 0.3}}, Frame → True, GridLines → Automatic,
FrameLabel → {Style["Wavelength (nm)", Large], Style["Intensity (a.u.)", Large]},
PlotStyle → {Green}, PlotLegends → Placed[
PointLegend[{"X-ray data"}, Background → White], {0.85, 0.85}]] (*data plot*)
plotfit = Plot[nlm[x], {x, 25, 31}, Frame → True,
PlotRange → {{25, 31}, {0, 0.3}}, GridLines → Automatic,
FrameLabel → {Style["Wavelength (nm)", Large], Style["Intensity (a.u.)", Large]},
PlotStyle → {Green}, PlotLegends → Placed[
LineLegend[{"X-ray fit"}, Background → White], {0.85, 0.75}]] (*fit plot*)
Show[plotdata, plotfit, PlotLabel → Style["Gaussian Fits of Data", Large]]
(*both plots together*)
(*Statistics of Fit*)
Print["Statistics of Fit"]
Print"R2 = ", nlm["RSquared"]
Print"Adjusted R2 = ", nlm["AdjustedRSquared"]
nlm["ParameterTable"]
nlm["ParameterConfidenceIntervalTable"]
nlm["BestFitParameters"]
nlm["BestFit"]
2
FittedModel 0.270927 ⅇ-(-27.988+x) 
NonlinearModelFit-Fit Param Initial Value & Fit Part of Data.nb
Intensity (a.u.)
0.30
X-ray data
0.25
0.20
0.15
0.10
0.05
0.00
25
26
27
28
29
30
31
Wavelength (nm)
Intensity (a.u.)
0.30
0.25
X-ray fit
0.20
0.15
0.10
0.05
0.00
25
26
27
28
29
30
31
Wavelength (nm)
0.30
Intensity (a.u.)
2
Gaussian Fits of Data
X-ray data
0.25
X-ray fit
0.20
0.15
0.10
0.05
0.00
25
26
27
28
29
Wavelength (nm)
Statistics of Fit
R2 = 0.994334
Adjusted R2 = 0.993075
30
31
NonlinearModelFit-Fit Param Initial Value & Fit Part of Data.nb
Estimate
a
b
Standard Error t- Statistic P- Value
0.270927 0.00681714
27.988
0.0251627
Estimate
39.742
1112.28
2.01153 × 10-11
1.95403 × 10-24
Standard Error Confidence Interval
a
0.270927 0.00681714
{0.255505, 0.286348}
b
27.988
{27.931, 28.0449}
0.0251627
{a → 0.270927, b → 27.988}
0.270927 ⅇ-(-27.988+x)
2
Fitting part of your data:
If one wants to fit only part of a data set, this example shows how to extract part of the data and fit it.
Commands used: NonlinearModelFit[ ] & Take[ ]
(*data and defining part of the data that is to be fit*)
data1 = {{0, 0}, {1, 1}, {2, 2}, {3, 3},
{4, 9}, {5, 12}, {6, 15}, {7, 19}, {8, 29}, {9, 30}, {10, 31}};
PartOfData = Take[data1, {4, 8}] (*Takes part of the data so I can
fit it independently of the entire data set. In this case,
it is data point 4 thru data point 8*)
(*fitting data*)
fitpartdata = NonlinearModelFit[PartOfData, a x + b, {{a, 2}, {b, 7}}, x];
(*plotting data and fits*)
listplot1 = ListPlot[data1, PlotRange → {{0, 10}, {0, 32}},
Frame → True, GridLines → Automatic, FrameLabel →
{Style["x (a.u.)", Large], Style["y (a.u.)", Large]}, PlotStyle → {Green},
PlotLegends → Placed[PointLegend[{"data"}, Background → White], {0.25, 0.85}]]
listplot2 = ListPlot[PartOfData];
plotfit = Plot[fitpartdata[x], {x, 4, 7},
PlotRange → {{0, 10}, {0, 32}}, GridLines → Automatic, FrameLabel →
{Style["x (a.u.)", Large], Style["y (a.u.)", Large]}, PlotStyle → {Green},
PlotLegends → Placed[LineLegend[{"fit"}, Background → White], {0.25, 0.75}]];
Show[listplot1, plotfit]
Print["Fit = ", fitpartdata["BestFit"]]
Print"R2 = ", fitpartdata["RSquared"]
Print["Parameter Table:"]
Print[fitpartdata["ParameterTable"]]
fitpartdata["BestFitParameters"]
{{3, 3}, {4, 9}, {5, 12}, {6, 15}, {7, 19}}
3
NonlinearModelFit-Fit Param Initial Value & Fit Part of Data.nb
30
data
y (a.u.)
25
20
15
10
5
0
0
2
4
6
8
10
8
10
x (a.u.)
30
data
25
y (a.u.)
4
fit
20
15
10
5
0
0
2
4
6
x (a.u.)
Fit = - 7.4 + 3.8 x
R2 = 0.996585
Parameter Table:
Estimate Standard Error t- Statistic P- Value
a
b
3.8
-7.4
0.305505
1.58745
{a → 3.8, b → - 7.4}
12.4384
-4.66156
0.00111985
0.0186307
Download