最近在論文大修2024年投稿的一篇文章,大修了2輪,最后一次還是重新投稿,其中有一個問題一直被審稿人懟,他認為我計算時間序列的趨勢的時候,沒有考慮時間的相關性,即對噪聲模型的估計不合理,會影響對趨勢和其不確定度的估計。我之前從來沒意識到這個問題:
要用最小二乘法(Least Squares)估計一個時間序列的趨勢及其不確定度,你可以將時間序列擬合為一個線性模型:
(1)最小二乘估計(OLS)
假設有?nn個數據點?(ti,yi)(ti?,yi?),可以構造設計矩陣:
(2)估計不確定度(標準誤)
python 代碼:
import numpy as np
import matplotlib.pyplot as plt# 模擬數據
t = np.arange(0, 10, 1) ?# 年份
y = 2.0 + 0.3 * t + np.random.normal(0, 0.2, len(t)) ?# 加上噪聲# 構造設計矩陣
X = np.vstack([np.ones(len(t)), t]).T# 最小二乘解
beta_hat = np.linalg.inv(X.T @ X) @ X.T @ y
a, b = beta_hat# 殘差與方差
residuals = y - X @ beta_hat
sigma2 = np.sum(residuals**2) / (len(t) - 2)
cov_beta = sigma2 * np.linalg.inv(X.T @ X)
b_std = np.sqrt(cov_beta[1, 1])print(f"趨勢估計:{b:.4f} ± {b_std:.4f} (單位/年)")
?
但是實際上上述是假設殘差是符合正態分布,而實際上很多地球物理的觀測結果是存在有色噪聲影響的。因此用上述的程序計算的結果是否合理需要評估。
在我這次的論文大修中,審稿人給我推薦了兩個有用的處理工具:
HECTOR?或?estnoise?這兩款工具 —— 它們都易于使用,且免費提供,可以在回歸參數估計的同時估算隨機特性。需要注意的是,HECTOR 還支持估計時變的季節信號,這在某些研究中可能具有參考價值。但如果作者堅持使用縮放方法,那就必須以穩健的方式來執行。
-
Hector - TeroMovigo
-
https://www.usgs.gov/node/279390
在這里我推薦使用Hector,因為這個可以估算時變的季節性信號。而我們的時間許多很多是有季節性變化的。
(3)Hector介紹
Hector?是一款開源的學術軟件包,專為在時間序列數據中估計軌跡模型(如含年度信號的線性趨勢)而設計,尤其適用于存在時間相關噪聲的情況。在地球物理研究中,軌跡估計至關重要,因為我們關注的現象往往包括氣溫上升、由氣候變化引起的海平面上升、以及由地殼垂向運動或構造板塊運動引起的位置變化等。在這類時間序列中,噪聲通常具有時間相關性,這會顯著影響線性趨勢估計的精度,因此推薦使用像 Hector 這樣的程序工具。Hector 假設用戶預先了解其觀測數據中可能存在的時間相關噪聲類型,并通過最大似然估計(MLE)方法同時估計線性趨勢和所選噪聲模型的參數。Hector 由 TeroMovigo 團隊開發和維護,旨在為學術界持續提供支持。有關其底層方法的詳細介紹,可參考著作?《Geodetic Time Series Analysis in Earth Sciences》。此外,還有一些其他知名程序可用于類似任務,如?CATS?和?est_noise。已有研究對 Hector 和 est_noise 進行了廣泛比較,結果表明兩者在輸出結果上高度一致。如果你在學術出版物中使用 Hector,請引用以下文獻以致謝:Bos, M.S., Fernandes, R.M.S., Williams, S.D.P., and Bastos, L. (2013).
Fast Error Analysis of Continuous GNSS Observations with Missing Data.?Journal of Geodesy, 87(4), 351–360.doi:?10.1007/s00190-012-0605-0
這個軟件在Linux系統是可以直接運行下載的程序包,而本人使用的mac系統只能自己編譯源代碼
Hector 軟件包主要設計用于在類 Unix 操作系統(如 Linux 或 macOS)上運行。如果你不想使用預編譯的靜態可執行文件,也可以自行編譯源代碼。在這種情況下,需要同時安裝?Boost、FFTW3?和?OpenBLAS?等庫。對于 Mac 用戶,可以使用 **Xcode(clang 編譯器)**和?Homebrew?來編譯源代碼。如需下載最新版本(2.1)的靜態可執行文件(適用于多種 Linux 發行版)、源代碼與示例數據、Python 3 腳本或使用手冊,請點擊以下鏈接:
??hector_2.0_OL8.tar.bz2 (Oracle Linux 8)
??hector_2.0_SL7.tar.bz2 (Scientific Linux 7)
??hector_2.0_Ubuntu18.04.tar.bz2 (Ubuntu 18.04 LTS)
??hector_2.0_Ubuntu20.04.tar.bz2 (Ubuntu 20.04 LTS)
??hector_2.0_Ubuntu21.04.tar.bz2 (Ubuntu 21.04)
??hector_2.1_Ubuntu20.04.tar.bz2 (Ubuntu 20.04 LTS)
??hector_2.1_Ubuntu21.04.tar.bz2 (Ubuntu 21.04)
??hector_2.1_Ubuntu22.04.tar.bz2 (Ubuntu 22.04 LTS)
??hector-2.1_CentOS7.tar.bz2 (CentOS7)
??hector-2.1_CentOS9.tar.bz2 (CentOS9)
??source code hector-2.0
??source code hector-2.1
??Python3 scripts hector-2.0
??Python3 scripts hector-2.1
??examples
??manual hector-2.0
??manual hector-2.1
(4)Hector使用
如果在Linux中,可以直接運行程序
而在mac系統中,則需要先安裝一個Docker,配置一個linux環境
1?? 安裝 Docker Desktop
前往官網下載安裝:
🔗?https://www.docker.com/products/docker-desktop/
安裝后打開 Docker,確保狀態欄圖標為綠色,表示運行正常。
2?? 創建一個 Linux 容器(如 Ubuntu)
docker pull ubuntu:22.04
然后啟動一個交互式容器:
docker run -it --name hector_env ubuntu:22.04
第一次運行會進入 Linux shell,類似 Ubuntu 終端環境。
執行數據處理命令:
./estimatetrend estimatetrend.ctl
可以得到以下的結果:
后續還可以估計時間序列的頻譜信號特征,以及建模的信號特征:
./estimatespectrum estimatespectrum.ctl
./modelspectrum modelspectrum.ctl
更具體的處理流程需要參見說明手冊。
??歡迎點贊收藏??