当前位置: 首页 > 面试题库 >

如何从ODR结果计算标准误差?

晏望
2023-03-14
问题内容

scipy.odr为了解决这个问题,我使用x和y的不确定性进行拟合,使用scipy
curve_fit进行正确拟合,包括x中的错误?

拟合之后,我想计算参数的不确定性。因此,我看一下协方差矩阵对角元素的平方根。我得到:

>>> print(np.sqrt(np.diag(output.cov_beta)))
[ 0.17516591  0.33020487  0.27856021]

但是根据odr的文档,在其中Output也有output.sd_beta

形状(p,)的估计参数的标准误差。

但是,它不会给我相同的结果:

>>> print(output.sd_beta)
[ 0.19705029  0.37145907  0.31336217]

编辑

这是笔记本上的示例:https
:
//nbviewer.jupyter.org/github/gvallverdu/cookbook/blob/master/fit_odr.ipynb

最小平方

stop reason: ['Sum of squares convergence']
        params: [ -1.94792946  11.03369235  -5.43265555]
          info: 1
       sd_beta: [ 0.26176284  0.49877962  0.35510071]
sqrt(diag(cov): [ 0.25066236  0.47762805  0.34004208]

使用ODR

stop reason: ['Sum of squares convergence']
        params: [-1.93538595  6.141885   -3.80784384]
          info: 1
       sd_beta: [ 0.6941821   0.88909997  0.17292514]
sqrt(diag(cov): [ 0.01093697  0.01400794  0.00272447]

问题答案:

差异的原因sd_beta是由剩余方差来衡量,而cov_beta并非如此。

scipy.odr是ODRPACK
FORTRAN库的接口,该库薄包装在中__odrpack.csd_betacov_beta通过索引到workFORTRAN例程内部使用的向量中进行恢复。其第一个元素的索引work是名为sd和的变量vcv(请参见此处)。

从ODRPACK文档(第85页):

WORK(SDI) 是包含函数参数的标准偏差(即协方差矩阵的对角项的平方根)的p × 1数组的第一个元素,其中SD``̂σβK``β

WORK(SDI-1+K) = SD(K) = ̂V 1/2 β (K, K) = ̂σβK

K = 1,... ,p

WORK(VCVI)p × p数组的第一个元素,其中VCV包含β 按残差进行缩放之前 的参数协方差矩阵的值,其中

WORK(VCVI-1+I+(J-1)*(NP)) = VCV(I,J) = ̂σ⁻²V β(I, J)

I = 1,... ,pJ = 1,... ,p

换句话说,np.sqrt(np.diag(output.cov_beta * output.res_var))将为您带来与相同的结果output.sd_beta

我在这里打开了一个错误报告。



 类似资料:
  • 问题内容: 我在这里很新,目前正在尝试使用Java计算标准偏差(我已经用谷歌搜索了哈哈),但是在使其正常工作方面存在很多问题 我有一个由用户输入的十个值,然后我必须计算到目前为止我所理解的标准偏差,这要归功于已经回答过的人们,我找到了数组的均值然后完成了计算 我已经将数据存储在10个值的数组中,但是我不太确定如何从数组中打印数据,然后进行计算而不必将输入代码存储在这里数据中,而这些数据我已经处理过

  • 基本上,在每次打印之前,在windows的代码块中我有“fflush(stdin);”这很有效。当我将代码复制到Linux时,它不起作用,“fflush(stdin);”的任何替代方案也不起作用我找到了。无论我用哪种方式做,输入在缓冲区中似乎没有被清除,或者我的代码中的某些内容不正确。

  • 但是由于某种原因,当我运行我的程序时,它似乎没有完全接受输入,并且给我一个错误的答案,当按下按钮时,它给我的答案是179.0的男性和169.0的女性。 我看了一遍又一遍,似乎无法找出这个逻辑错误。这是我的代码。

  • 问题内容: 我应该将“如果查询结果行IS = 1进行验证的代码”替换为什么? 我已经尝试过使用num_rows的多种方法,但无法正常工作。 我的PHP代码: 问题答案: 要么

  • 我创建这段代码是为了创建随机数和运算符,但它如何计算并显示结果呢? 它现在做的是,例如打印出来:4+1-3或9*2-8等。我不知道如何计算出4+1-3或9*2-8的结果,然后打印出来。

  • 我应该用什么来替换'code TO VERIFY IF QUERY RESULT ROW IS=1'? 我用num_rows尝试了很多种方法,但都行不通。 我的PHP代码: