検証済みアルゴリズム
以下のアルゴリズムは、厳密な独立レビューと確立された参考文献との相互検証(2026-02-01)により妥当性が確認されました。 このページでは、検証済み実装とその参考文献を記載しています。
k-space計算
関数: gwexpy.fields.ScalarField.fft_space()
状態: 確立された参考文献に対して検証済み
角波数の計算は物理学の標準定義に従っています:
これは \(k = 2\pi / \lambda\) を満たし、以下と一致しています:
Press et al., Numerical Recipes (3rd ed., 2007), §12.3.2
NumPy
fftfreqドキュメントGWpy FrequencySeries (Duncan Macleod et al., SoftwareX 13, 2021)
2π 係数は正しく適用され、単位は 1/dx_unit (rad/length) として
適切に設定されています。
振幅スペクトル(トランジェントFFT)
関数: TimeSeries._fft_transient
状態: 確立された参考文献に対して検証済み
トランジェントFFTは密度スペクトルではなく、振幅スペクトル を返します:
DCとナイキスト周波数を除く片側成分は2倍されます。
この規約により、正弦波のピーク振幅を直接読み取ることができます。
dt を掛けるべきという提案は密度スペクトル (V/√Hz) に適用されるもので、
用途が異なります。
参考文献:
Oppenheim & Schafer, Discrete-Time Signal Processing (3rd ed., 2010), §8.6.2
SciPy
rfftドキュメント
VIF(分散膨張率)
関数: gwexpy.spectral.estimation.calculate_correlation_factor()
状態: 確立された参考文献に対して検証済み
VIF計算式はPercival & Walden (1993) に準拠しています:
重要: これは多重共線性診断に使用される回帰VIF (1/(1-R²)) とは異なります。 名称の衝突が混乱を招きましたが、スペクトル解析においては実装は正しいです。
参考文献:
Percival, D.B. & Walden, A.T., Spectral Analysis for Physical Applications (1993), Ch. 7.3.2, Eq.(56)
Bendat, J.S. & Piersol, A.G., Random Data (4th ed., 2010)
予測タイムスタンプ(ARIMA)
関数: gwexpy.timeseries.arima.ArimaResult.forecast()
状態: 確立された参考文献に対して検証済み
予測開始時刻は以下のように計算されます:
これは等間隔・ギャップなしのデータを前提としています。 GPS時刻はTAI連続秒数を使用するLIGO/GWpy規約に従っています。
UTC時刻系で時々指摘されるうるう秒の懸念は、重力波データ解析で使用される GPS/TAI時刻系には該当しません。
参考文献:
GWpy TimeSeries.epoch ドキュメント
LIGO GPS時刻規約 (LIGO-T980044)
Box, G.E.P. & Jenkins, G.M., Time Series Analysis (1976), Ch. 4
前提条件と規約
以下のセクションでは、これらのアルゴリズムを使用する際に ユーザーが認識すべき重要な前提条件と規約を説明します。
MCMC固定共分散前提
関数: gwexpy.fitting.FitResult.run_mcmc()
前提: 共分散行列 Σ は パラメータ非依存(固定) であること。
この前提の下では、対数行列式項 log|Σ| は定数であり、
対数尤度から正しく省略できます:
Σ がモデルパラメータ θ に依存する場合は、log|Σ| を含む
完全な対数尤度を使用する必要があり、実装の修正が必要です。
複素データ: 複素数値データの場合、エルミート形式
r.conj() @ cov_inv @ r は 円形複素ガウス 分布
(実部と虚部が等分散で無相関)を仮定しています。
参考文献:
Rasmussen & Williams, Gaussian Processes for Machine Learning (2006), Ch. 2.2
Gelman et al., Bayesian Data Analysis (3rd ed., 2013), §14.2
角波数 vs サイクル波数
関数: gwexpy.fields.ScalarField.fft_space()
規約: k 軸は 角波数 [rad/length] を返します。
サイクル波数 [1/length] ではありません。
角波数: \(k = 2\pi / \lambda\)
サイクル波数: \(\nu = 1 / \lambda\)
変換: \(\nu = k / (2\pi)\)
降順軸の符号規約
関数: gwexpy.fields.ScalarField.fft_space()
規約: 空間軸が降順 (dx < 0) の場合、k軸は位相因子規約 \(e^{+ikx}\) との物理的整合性を保つために 符号反転 されます。
これにより、データ格納順序に関係なく、正の k が
正のx方向に伝播する波に対応することが保証されます。
参考文献: Jackson, Classical Electrodynamics (3rd ed., 1998), §4.2
ブートストラップにおけるVIF適用
関数: gwexpy.spectral.estimation.bootstrap_spectrogram()
条件付き動作:
標準ブートストラップ (
block_size=None): Welchオーバーラップ相関を 補正するためにVIF補正が適用されます。ブロックブートストラップ (
block_size指定): 二重補正を防ぐため VIF補正は 無効化 (factor=1.0) されます。
これにより、ブロック構造と解析的VIFの両方が同時に適用された場合の 分散推定の過大評価を防止します。
ブートストラップの定常性前提
関数: gwexpy.spectral.estimation.bootstrap_spectrogram()
前提: 入力データは 定常過程 であること。
Moving Block Bootstrap は、データの統計的性質が時間とともに 変化しないことを仮定しています。非定常データ(グリッチ、トランジェント、 ドリフトするノイズフロア)では、信頼区間が偏る可能性があります。
推奨 block_size: 時間相関のあるスペクトログラムでは、
少なくともストライド長(セグメント間隔)以上を設定してください。
floatまたはQuantityで秒単位で指定します。
参考文献:
Künsch, H.R., “The jackknife and the bootstrap for general stationary observations”, Ann. Statist. 17(3), 1989
Politis, D.N. & Romano, J.P., “The stationary bootstrap”, J. Amer. Statist. Assoc. 89(428), 1994
検証について
このページに記載されているすべてのアルゴリズムは、ユニットテスト、既存文献との 比較検証、および独立した技術レビューにより検証されています。実装は確立された 参考文献と照合され、正確性が確認されています。
詳細な検証レポートと技術的な検証データについては、開発者向けドキュメントを 参照してください。