How to do weighted least square rgression?

Hello
I want to fit an exponential curve to my data using MatLab. Could you please guide me how can I write a code to fit this through weighted least square reression? The weight matrix is as follows. I could not find any instruction or sample code to do so!
weight=[18.5204555170429; 24.8007492441765; 21.4204953742493; 12.0007299687922; 5.17482448096073;2.24987321147564]
x=[1.5;4.5;7.5;10.5;13.5;16.5]
y=[0.466132177250491;0.307694759285704;0.477550022494737;0.489169081512968;0.439027124884140;0.306938063199741]
Thanks

Risposte (1)

One option is to use fitlm
weight=[18.5204555170429; 24.8007492441765; 21.4204953742493; 12.0007299687922; 5.17482448096073;2.24987321147564];
x=[1.5;4.5;7.5;10.5;13.5;16.5];
y=[0.466132177250491;0.307694759285704;0.477550022494737;0.489169081512968;0.439027124884140;0.306938063199741];
mdl = fitlm(x,y, 'Weights',weight)
mdl =
Linear regression model: y ~ 1 + x1 Estimated Coefficients: Estimate SE tStat pValue _________ _________ ______ ________ (Intercept) 0.39951 0.07398 5.4003 0.005691 x1 0.0031898 0.0099772 0.3197 0.76519 Number of observations: 6, Error degrees of freedom: 4 Root Mean Squared Error: 0.353 R-squared: 0.0249, Adjusted R-Squared: -0.219 F-statistic vs. constant model: 0.102, p-value = 0.765
figure
plot(mdl)
grid
I assume that you want to do a linear regression, since you did not mention a nonllinear model of any sort.
.

6 Commenti

Thanjs, however, I need a nonlinear exponential model , how about that?
It would have been nice to know that at the outset.
weight=[18.5204555170429; 24.8007492441765; 21.4204953742493; 12.0007299687922; 5.17482448096073;2.24987321147564];
x=[1.5;4.5;7.5;10.5;13.5;16.5];
y=[0.466132177250491;0.307694759285704;0.477550022494737;0.489169081512968;0.439027124884140;0.306938063199741];
fcn = @(b,x) b(1) .* exp(x-b(2)) - b(3) .* exp(-(x-b(4))); % Nonlinear Exponential Model
mdl = fitnlm(x,y,fcn,[rand; 7; 12; rand], 'Weights',weight)
Warning: The Jacobian at the solution is ill-conditioned, and some model parameters may not be estimated well (they are not identifiable). Use caution in making predictions.
mdl =
Nonlinear regression model: y ~ F(b,x) Estimated Coefficients: Estimate SE tStat pValue _________ __________ __________ _________ b1 0.0020994 0.006279 0.33434 0.75492 b2 11.349 1.3173e-05 8.6156e+05 1.089e-23 b3 -1.0124 0.38895 -2.6029 0.059862 b4 0.76701 0.39382 1.9476 0.12329 Number of observations: 6, Error degrees of freedom: 4 Root Mean Squared Error: 1.63 R-Squared: -19.8, Adjusted R-Squared -25 F-statistic vs. zero model: 0.882, p-value = 0.482
xv = linspace(min(x), max(x))';
[yp,yci] = predict(mdl, xv);
figure
plot(x, y, 'p')
hold on
plot(xv, yp, '-r')
plot(xv, yci, '--r')
hold off
grid
I have no idea what sort of exponential model you want. This gives an approximation of one. Experiment with others, since you understand the process that created these data, and a mathematical model of that process would be the best option for ‘fcn’ here.
I have a doubt that if you don't know the weights, how you can get the weights for WLS
I have only two data sets.
The weights must be known and are usually derived from the "degree of certainty" of the data. The more certain a data point, the higher its weight.
how to know then,any steps to know

Accedi per commentare.

Commentato:

il 1 Dic 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by