- 积分
- 8029
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-9-18
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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就是截距。
|
评分
-
查看全部评分
|