Error in the intercept
Afficher commentaires plus anciens
I think this might be a dumb question, but how do you find the error of the intercept for a straigh line graph that I have fittded using polyfit? and polyval. I got the error for the slope by doing something like this.
[p2,s2] = polyfit(A2,B2,1);
[f2,delta] = polyval(p2,x,s2);
deltaf2=s2.normr/sqrt(s2.df);
C2=deltaf2^2*inv(s2.R)*inv(s2.R)';
deltap2=sqrt(diag(C2));
ok
3 commentaires
Walter Roberson
le 3 Juil 2012
Please use the matrix backslash operator "\" instead of using inv() . Generally, A * inv(B) should be recoded as A \ B
Richard Brown
le 3 Juil 2012
typo: inv(A) * B should be A \ b :)
Ganessen Moothooveeren
le 14 Mar 2013
you used this to find error in slope but which variable is the error in slope??..is it deltaf2?? [p2,s2] = polyfit(A2,B2,1); [f2,delta] = polyval(p2,x,s2); deltaf2=s2.normr/sqrt(s2.df); C2=deltaf2^2*inv(s2.R)*inv(s2.R)'; deltap2=sqrt(diag(C2));
Réponse acceptée
Plus de réponses (1)
Star Strider
le 3 Juil 2012
2 votes
Not dumb at all. The problem is that if you want confidence limits on the estimated parameters, the 'polyfit' and 'polyval' functions won't get you there.
If you have the Statistics or Optimization Toolboxes, you can fit your model with 'lsqcurvefit' or 'nlinfit' respectively, then use 'nlparci' to get the confidence limits on the parameters. (Use 'nlpredci' to get confidence limits on the fitted data.)
If you don't have access the these, 'lscov' will likely give you what you need to calculate the confidence intervals yourself.
3 commentaires
Adam Parry
le 3 Juil 2012
Star Strider
le 3 Juil 2012
Modifié(e) : Star Strider
le 3 Juil 2012
You didn't do anything wrong that I can see. When I ran 'lscov' on it (with simulated data), it produced the same covariance matrix you calculated. If anything, you didn't go far enough. The 95% confidence limits are ±1.96*SE, so with respect to your code they would be:
CI95 = [p2-1.96*deltap2 p2+1.96*deltap2];
and of course unless the 'CI95' interval for a parameter included zero, the parameter belongs in the model. Use 'norminv' to get critical values for other confidence intervals.
Other than that, using 'inv' is generally frowned upon because of condition concerns. The '\' operator avoids these because it does the division directly.
It took a bit of experimenting, but an alternate way of calculating C2 that uses '\' and avoids 'inv' is:
C2 = deltaf2^2 * (s2.R'*s2.R)\eye(2);
That's the only improvement I can think of.
Adam Parry
le 4 Juil 2012
Catégories
En savoir plus sur Sparse Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!