爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5191|回复: 2

[源代码] 存在自相关关系中的最小二乘法应用

[复制链接]

新浪微博达人勋

发表于 2022-10-12 10:17:02 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
最近做了一个关于气候变化的工作,审稿意见返回来之后审稿人对我计算的均值和斜率提出了一些质疑,希望我提供他们的标准偏差(standard error)以反映我们的模式和观测在统计上是否是显著的。

一开始我就是简单了利用了scipy.stats.linregress里面返回的斜率的standard error (se),然后均值的se就是通过计算序里的自相关系数,然后根据等效自由度来计算的结果,但是后来和专门做数理统计方向的老师讨论后他说,scipy给出的斜率se并不适用于这种带有自相关关系的斜率计算,他提供了一种算法叫做Cochrane-Orcutt Procedure的迭代法来求解有自相关关系的曲线斜率的se。 (Cochrane, D., & Orcutt, G. H. (1949), https://doi.org/10.1080/01621459.1949.10483290)

我想既然我以后还会很经常的计算时间序列的斜率,而真实海洋和大气中的时间序列又普遍是具有自相关关系的,那么干脆我就直接写成一个完整的函数方便以后直接调用,所以我就仿照着scipy.stats.intercept的方法编写了这个新的函数。这种迭代法与最小二乘法相比,并不会影响回归得到的斜率和截距,只是会影响他们的se(因为如果数据本身存在自相关的话会使得计算出来的se偏小)

编写过程中我发现,如果我将我计算的时间序列在x方向平移到以0点为中心,那么我算计算的回归曲线的截距不就是这段时间内的均值了嘛?,这样我在文章中就不需要用这个CO法求斜率的se,又用等效自由度求均值的se,把两个求se的方法融合到了一套理论体系当中,也会让文章更加简洁,所以程序中也加入了这部分内容。通过对比,迭代一次的截距se与等效自由度方法计算的结果基本一致,所以这个方法虽然是迭代法,但是程序中只进行了一次迭代就输出结果了。

函数描述里已经写的很详细了(绝对是我写的最详细的几次),这里简单概括一下:res = Cochrane_Orcutt(yt, xt, mean = False). yt, xt就是需要回归的曲线点了,一般来说xt是时间,mean默认是false,也就是计算的截距就是回归曲线的截距,如果改为True,那么返回的截距就是这段时间内的均值,而截距的se也就是均值的se了。返回结果res的调用方法和scipy是一致的,res.slope就是斜率,res.intercept就是截距。

函数描述

函数描述

Cochrane_Orcutt.py

3.24 KB, 下载次数: 4, 下载积分: 金钱 -5

评分

参与人数 1金钱 +4 收起 理由
lxy287131416 + 4 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-10-12 10:48:41 | 显示全部楼层
{:5_213:}{:5_213:}{:5_213:}谢谢二十年后的杜院
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-16 15:48:23 | 显示全部楼层
学习一下,
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表