我有一组数据(位移与时间),我已经使用optimize.leastsq方法拟合了几个方程.我现在希望得到拟合参数的误差值.通过文档查看输出的矩阵是雅可比矩阵,我必须将其乘以残差矩阵以得到我的值.不幸的是,我不是统计学家所以我在术语中有点溺水.
根据我的理解,我需要的是与我的拟合参数一致的协方差矩阵,因此我可以对角元素的平方根来得到拟合参数的标准误差.我有一个模糊的阅读记忆,协方差矩阵无论如何都是来自optimize.leastsq方法的输出.它是否正确?如果不是,您将如何获得残差矩阵乘以输出的雅可比矩阵乘以得到我的协方差矩阵?
任何帮助将不胜感激.我是python的新手,因此如果问题变成一个基本问题就道歉.
拟合代码如下:
fitfunc = lambda p, t: p[0]+p[1]*np.log(t-p[2])+ p[3]*t # Target function'
errfunc = lambda p, t, y: (fitfunc(p, t) - y)# Distance to the target function
p0 = [ 1,1,1,1] # Initial guess for the parameters
out = optimize.leastsq(errfunc, p0[:], args=(t, disp,), full_output=1)
Run Code Online (Sandbox Code Playgroud)
args t和disp是time和displcement值的数组(基本上只有2列数据).我已经导入了代码顶部所需的所有内容.输出提供的拟合值和矩阵如下:
[ 7.53847074e-07 1.84931494e-08 3.25102795e+01 -3.28882437e-11]
[[ 3.29326356e-01 -7.43957919e-02 8.02246944e+07 2.64522183e-04]
[ -7.43957919e-02 1.70872763e-02 -1.76477289e+07 -6.35825520e-05]
[ 8.02246944e+07 -1.76477289e+07 2.51023348e+16 5.87705672e+04]
[ 2.64522183e-04 -6.35825520e-05 5.87705672e+04 2.70249488e-07]]
Run Code Online (Sandbox Code Playgroud)
我怀疑此刻适合有点怀疑.当我可以解决错误时,这将得到确认.
(抱歉要问,但http://statsmodels.sourceforge.net/目前已关闭,我无法访问文档)
我正在使用线性回归statsmodels,基本上:
import statsmodels.api as sm
model = sm.OLS(y,x)
results = model.fit()
Run Code Online (Sandbox Code Playgroud)
我知道我可以打印出完整的结果集:
print results.summary()
Run Code Online (Sandbox Code Playgroud)
输出如下:
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.952
Model: OLS Adj. R-squared: 0.951
Method: Least Squares F-statistic: 972.9
Date: Mon, 20 Jul 2015 Prob (F-statistic): 5.55e-34
Time: 15:35:22 Log-Likelihood: -78.843
No. Observations: 50 AIC: 159.7
Df Residuals: 49 BIC: 161.6
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1 1.0250 0.033 …Run Code Online (Sandbox Code Playgroud)