Python最小二乘拟合中如何由标准差转换为标准误?
最小二乘拟合中标准差与标准误的转换问题
首先要明确:你当前计算出的std已经是拟合参数的标准误(SE),不需要再用SE = STD/sqrt(N)的公式额外转换。
代码逻辑拆解
你给出的计算代码已经包含了最小二乘参数标准误的完整推导:
std = np.sqrt(np.diagonal(np.linalg.inv(J.T @ J) * (res_lsq.fun.T @ res_lsq.fun / (res_lsq.fun.size - res_lsq.x.size))))
其中:
res_lsq.fun.size:就是你疑惑的N,即数据点总数(对应每个观测值的残差数量,也就是拟合时输入的样本点个数)res_lsq.x.size:待拟合的参数个数(比如拟合直线y=ax+b时,参数数量为2)res_lsq.fun.T @ res_lsq.fun / (res_lsq.fun.size - res_lsq.x.size):这是残差方差的无偏估计(用残差平方和除以自由度n-p,n是数据点数量,p是参数个数)np.linalg.inv(J.T @ J):参数的协方差矩阵的核心部分- 最终取对角线元素开平方,得到的就是每个拟合参数的标准误
关于SE = STD/sqrt(N)的误区
你记忆的这个公式是针对样本均值标准误的计算逻辑,不适用于最小二乘参数估计的场景。最小二乘参数的标准误是直接从协方差矩阵推导而来,已经包含了样本量、参数数量的校正,不需要再额外除以sqrt(N)。
内容的提问来源于stack exchange,提问作者Cal Ng
相关产品推荐
相关产品推荐

