ここではNCLを用いた基本的な解析のやり方について紹介します
平均・偏差・分散など †
単純平均 †
単純に平均を求める関数にもいくつかある。
- avg
最も単純な平均を求める関数。配列の次元に関わらずすべての要素の平均を計算する。
移動平均 †
移動平均には単純な移動平均と重み付き移動平均がある。
- runave
重みなし移動平均を計算する(最も右の次元について)。
重み付き移動平均は畳み込み積分と等価であるからフィルターなどにも用いる。
単純偏差 †
各データの生の値から平均を取り去ったものを偏差(平均偏差)という。したがって,上に挙げたような関数で平均を計算して引き算すれば偏差は求まるが,以下のような関数も用意されている。
年平均 †
年平均の計算には以下の関数が用意されている。
季節平均 †
月ごとのデータからの季節平均(3か月平均)の計算には以下のような関数が用意されている。
※ DJFとNDJは年をまたぐ。そのため,最初のDJF平均はJFの,最後のNDJ平均はNDの2ヶ月平均となることに注意。
月平均気候値 †
月平均気候値の計算には以下の関数が用意されている。
- clmMonTLLL
入力変数の次元が(time,lev,lat,lon)の順となっているときに用いる
- clmMonLLLT
入力変数の次元が(lev,lat,lon,time)の順となっているときに用いる
- clmMonTLL
入力変数の次元が(time,lat,lon)の順となっているときに用いる
- clmMonLLT
入力変数の次元が(lat,lon,time)の順となっているときに用いる
月平均偏差 †
元データから平均を除けば偏差となるが,monthlyデータの偏差は月ごとに異なる気候値を引くことがほとんどである。その時には以下の関数が使える。
気候値自体が必要ない場合には,以下の関数を用いて,途中で気候値の計算をはさむことなく偏差にすることができる。
日平均気候値 †
日平均気候値の計算に関連して,以下の関数が用意されている。clmDayTLLLとclmDayTLLでは,時間に対して各年の何日目かを表す配列が入力変数として必要になり,これはday_of_yearでつくることが可能だ。
- clmDayTLLL
入力変数の次元が(time,lev,lat,lon)の順となっているときに用いる
- clmDayTLL
入力変数の次元が(time,lat,lon)の順となっているときに用いる
上の関数は単に各 day of year に対して平均を計算するだけであるが,このように計算された日平均気候値は"ガタガタ"であることが多く,しばしば平滑化を必要とする。runave_n等を用いて移動平均をかけることもできるし,以下の関数を用いて,1年周期とその高調波成分(次数指定可能)のみを取り出すこともできる。
- smthClmDayTLLL
日平均気候値の平滑化を行う関数。入力変数の次元が(time,lev,lat,lon)の順となっているときに用いる
- smthClmDayTLL
日平均気候値の平滑化を行う関数。入力変数の次元が(time,lat,lon)の順となっているときに用いる
また,月平均気候値から線形内挿によって日平均気候値をつくる関数も用意されている。
- clmMon2clmDay
月平均気候値を各月の真ん中の日平均気候値とし,そこから線形内挿によって毎日の日平均気候値をつくる関数。
日平均偏差 †
日別データから日付ごとに異なる(季節サイクルを含む)気候値を取り除き,日平均偏差を求めるには次の関数が使える。
領域平均 †
領域平均の計算には以下の関数がある。重みを付けることができるので,cos(緯度)の重み付き平均も簡単に計算できる。
空間平滑化 †
空間平滑化には9点スムージングの関数が用意されている。パラメータを変えることで平滑化の強さを調節することや5点スムージングにすることが可能。
分散・標準偏差 †
分散や標準偏差を求める関数を紹介する。ここに示す関数は全て不偏分散,不偏標準偏差を計算することに注意(つまりN-1で割っている)。母分散,母標準偏差を計算したいときは修正する必要がある。
- variance
最も単純な不偏分散を求める関数。配列の次元に関わらずすべての要素の分散を計算する。
- stddev
最も単純な不偏標準偏差を求める関数。配列の次元に関わらずすべての要素の標準偏差を計算する。
月平均の標準偏差を計算したいときも多いだろう。そのような時には以下の関数が使える。
- stdMonTLLL
入力変数の次元が(time,lev,lat,lon)の順となっているときに用いる
- stdMonLLLT
入力変数の次元が(lev,lat,lon,time)の順となっているときに用いる
- stdMonTLL
入力変数の次元が(time,lat,lon)の順となっているときに用いる
- stdMonLLT
入力変数の次元が(lat,lon,time)の順となっているときに用いる
また,解析を行っていると,標準偏差で規格化したいときがあるだろう。そんなときに以下の関数が使える。
微積分演算 †
ここでは,微積分演算,特にベクトル解析に関する関数を中心に紹介する。大気海洋分野で頻出の渦度や発散などを球面調和関数を用いて計算する関数が豊富に用意されているが,配列の座標等に制限があることを認識して使わなくてはならない。
差分・勾配 †
中心差分を行う関数。
スプライン補間を用いて微分値を計算する関数。
球面調和関数を用いて勾配を求めるprocedure
- gradsf
等間隔の緯度経度グリッド上の値から球面調和関数を用いて勾配を求めるprocedure
- gradsg
ガウス格子上の値から球面調和関数を用いて勾配を求めるprocedure
球面調和関数を用いて勾配の逆演算を行うprocedure
- igradsf
等間隔の緯度経度グリッド上の勾配の値から球面調和関数を用いてもとの値を求めるprocedure
- igradsg
ガウス格子上の勾配の値から球面調和関数を用いてもとの値を求めるprocedure
移流 †
任意の変数と速度ベクトルから移流を求める関数
発散・渦度 †
速度ベクトルから発散を求める関数やprocedure
- uv2dvf
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて発散を求めるprocedure
- uv2dvF
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて発散を求める関数
- uv2dvF_Wrap
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて発散を求める関数。メタデータを残したいときにはこれを使う。
- uv2dvg
ガウス格子上の東西風,南北風成分から球面調和関数を用いて発散を求めるprocedure
- uv2dvG
ガウス格子上の東西風,南北風成分から球面調和関数を用いて発散を求める関数
- uv2dvG_Wrap
ガウス格子上の東西風,南北風成分から球面調和関数を用いて発散を求める関数。メタデータを残したいときにはこれを使う。
速度ベクトルから渦度を求める関数やprocedure
- uv2vrf
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて渦度を求めるprocedure
- uv2vrF
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて渦度を求める関数
- uv2vrF_Wrap
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて渦度を求める関数。メタデータを残したいときにはこれを使う。
- uv2vrg
ガウス格子上の東西風,南北風成分から球面調和関数を用いて渦度を求めるprocedure
- uv2vrG
ガウス格子上の東西風,南北風成分から球面調和関数を用いて渦度を求める関数
- uv2vrG_Wrap
ガウス格子上の東西風,南北風成分から球面調和関数を用いて渦度を求める関数。メタデータを残したいときにはこれを使う。
速度ベクトルから渦度と発散を同時に求める関数やprocedure
- uv2vrdvf
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて渦度と発散を求めるprocedure
- uv2vrdvF
等間隔の緯度経度グリッド上の東西風,南北風成分から球面調和関数を用いて渦度と発散を求める関数
- uv2vrdvg
ガウス格子上の東西風,南北風成分から球面調和関数を用いて渦度と発散を求めるprocedure
- uv2vrdvG
ガウス格子上の東西風,南北風成分から球面調和関数を用いて渦度と発散を求める関数
渦度と発散から速度ベクトルを求める関数やprocedure
- vrdv2uvf
等間隔の緯度経度グリッド上の渦度,発散から球面調和関数を用いて速度場を求めるprocedure
- vrdv2uvF
等間隔の緯度経度グリッド上の渦度,発散から球面調和関数を用いて速度場を求める関数
- vrdv2uvg
ガウス格子上の渦度,発散から球面調和関数を用いて速度場を求めるprocedure
- vrdv2uvG
ガウス格子上の渦度,発散から球面調和関数を用いて速度場を求める関数
発散風・回転風 †
発散のみから速度ベクトルを求める関数やprocedure。したがって,求まる速度は発散風成分のみ。
- dv2uvf
等間隔の緯度経度グリッド上の発散から球面調和関数を用いて発散風を求めるprocedure
- dv2uvF
等間隔の緯度経度グリッド上の発散から球面調和関数を用いて発散風を求める関数
- dv2uvg
ガウス格子上の発散から球面調和関数を用いて発散風を求めるprocedure
- dv2uvG
ガウス格子上の発散から球面調和関数を用いて発散風を求める関数
渦度のみから速度ベクトルを求める関数やprocedure。したがって,求まる速度は回転風成分のみ。
- vr2uvf
等間隔の緯度経度グリッド上の渦度から球面調和関数を用いて回転風を求めるprocedure
- vr2uvF
等間隔の緯度経度グリッド上の渦度から球面調和関数を用いて回転風を求める関数
- vr2uvg
ガウス格子上の渦度から球面調和関数を用いて回転風を求めるprocedure
- vr2uvG
ガウス格子上の渦度から球面調和関数を用いて回転風を求める関数
ラプラシアン †
スカラーラプラシアンを計算する関数やprocedure
- lapsf
等間隔の緯度経度グリッド上のスカラーの2次元ラプラシアンを球面調和関数を用いて求めるprocedure
- lapsF
等間隔の緯度経度グリッド上のスカラーの2次元ラプラシアンを球面調和関数を用いて求める関数
- lapsg
ガウス格子上のスカラーの2次元ラプラシアンを球面調和関数を用いて求めるprocedure
- lapsG
ガウス格子上のスカラーの2次元ラプラシアンを球面調和関数を用いて求める関数
逆スカラーラプラシアンを計算する関数やprocedure
- ilapsf
等間隔の緯度経度グリッド上のスカラーの2次元逆ラプラシアンを球面調和関数を用いて求めるprocedure
- ilapsF
等間隔の緯度経度グリッド上のスカラーの2次元逆ラプラシアンを球面調和関数を用いて求める関数
- ilapsg
ガウス格子上のスカラーの2次元逆ラプラシアンを球面調和関数を用いて求めるprocedure
- ilapsG
ガウス格子上のスカラーの2次元逆ラプラシアンを球面調和関数を用いて求める関数
ベクトルラプラシアンを計算する関数やprocedure
- lapvf
等間隔の緯度経度グリッド上のベクトルの2次元ラプラシアンを球面調和関数を用いて求めるprocedure
- lapvg
ガウス格子上のベクトルの2次元ラプラシアンを球面調和関数を用いて求めるprocedure
逆ベクトルラプラシアンを計算する関数やprocedure
- ilapvf
等間隔の緯度経度グリッド上のベクトルの2次元逆ラプラシアンを球面調和関数を用いて求めるprocedure
- ilapvg
ガウス格子上のベクトルの2次元逆ラプラシアンを球面調和関数を用いて求めるprocedure
流線関数・速度ポテンシャル †
速度ベクトルから流線関数と速度ポテンシャルを計算する関数やprocedure
- uv2sfvpf
等間隔の緯度経度グリッド上の速度ベクトルから球面調和関数を用いて流線関数と速度ポテンシャルを求めるprocedure
- uv2sfvpF
等間隔の緯度経度グリッド上の速度ベクトルから球面調和関数を用いて流線関数と速度ポテンシャルを求める関数
- uv2sfvpg
ガウス格子上の速度ベクトルから球面調和関数を用いて流線関数と速度ポテンシャルを求めるprocedure
- uv2sfvpG
ガウス格子上の速度ベクトルから球面調和関数を用いて流線関数と速度ポテンシャルを求める関数
流線関数と速度ポテンシャルから速度ベクトルを計算する関数やprocedure
- sfvp2uvf
等間隔の緯度経度グリッド上の流線関数と速度ポテンシャルから球面調和関数を用いて速度ベクトルを求めるprocedure
- sfvp2uvg
ガウス格子上の流線関数と速度ポテンシャルから球面調和関数を用いて速度ベクトルを求めるprocedure
鉛直微分 †
鉛直微分の関数ではないが,スプライン補間を行い微分値を計算する関数ftcurvdを用いて鉛直微分を計算することが可能である。
また,中心差分の関数であるcenter_finite_diffやcenter_finite_diff_nも用いることができる。
鉛直積分 †
鉛直積分の関数としてvibetaがある。
また,鉛直積分の関数ではないが,スプライン補間を行い積分値を計算する関数ftcurviを用いて鉛直積分を計算することも可能である。
相関・回帰解析 †
相関解析,回帰解析を行うときに用いる関数を紹介する。
相関係数 †
相関係数を求める。
- escorc
xとyの相関係数を求める(最も右の次元について)。
- esccr
xとyの相互相関係数を求める(最も右の次元について)。
- esacr
xの自己相関係数を求める(最も右の次元について)。
パターン相関 †
パターン相関の計算には以下の関数を用いる。
- pattern_cor
xとyのパターン相関を求める。空間平均からのずれに対する相関(centered correlation, いわゆる普通の相関係数)か,空間平均を引かない生の値から求めた相関(uncentered correlation, コサイン類似度)か選ぶことができる。
1次元データのトレンド・回帰係数 †
ここでは,回帰係数の計算に用いる関数を紹介する。まず,最も簡単な1次元配列を扱う関数について。
- regline
1次元配列の回帰。回帰係数のattributeとして,平均値やt値などを返してくれる。
- regline_stats
reglineと同じであるが,より多くの統計値を返してくれる。詳細は省略する。
多次元データのトレンド・回帰係数 †
多次元配列に対して回帰係数を計算する関数を紹介する。
- regCoef
yをxに回帰した回帰係数を計算する(最も右の次元について)。
トレンドの除去 †
トレンドの計算は,実際にはトレンドを除くために用いることの方が多いかもしれない。回帰係数を求める関数を用いて回帰直線を求め,差し引いて計算してもよいが,一度にトレンドを除く関数も用意されている。
- dtrend
トレンドを除去する(最も右の次元について,欠損なし,x方向に等間隔)。
- dtrend_n
トレンドを除去する(指定した次元について,欠損なし,x方向に等間隔)。
- dtrend_msg
トレンドを除去する(最も右の次元について,欠損あってもよい,x方向に等間隔でなくてもよい)。
下二つの関数は時間方向のトレンドを除くこと以外にも使えて,例えば変数yからENSOと相関するシグナルを簡単に除きたい時にはxにENSOのインデックスを入れれば計算できることになる。
コンポジット解析 †
コンポジット(合成図)解析は基本的な解析手法であるが,単なる平均操作に過ぎないために特に関数は用意されていない。平均の関数や関数indなどを用いて計算しよう。
例として,変数y(時間×緯度×経度の3次元配列)を変数x(時間次元のみの1次元配列)に基づいてコンポジットすることを考える。コンポジットの基準は,正のイベントをxがその1標準偏差を超えるとき,負のイベントを-1標準偏差を下回るときで定義する。例えば,yが月平均降水量のマップで,xが月平均Niño3.4 SSTのような場合を想定している。
x = x/stddev(x) ; 標準偏差で規格化
POS = ind(x.gt. 1.) ; 正のイベントに対応する時間次元のインデックス
NEG = ind(x.lt.-1.) ; 負のイベントに対応する時間次元のインデックス
y_pos = dim_avg_n_Wrap(y(POS,:,:),0) ; 正のイベントのコンポジット
y_neg = dim_avg_n_Wrap(y(NEG,:,:),0) ; 負のイベントのコンポジット
スペクトル解析 †
スペクトル †
1つの時系列データに対しては以下の関数を用いる。
2つの時系列データに対するスペクトル(クロススペクトル)解析を行う際には、次の関数が用意されている。
なお,スペクトル解析を行う前にはいろいろと前処理が必要となるだろう。例えば,トレンドの除去はdtrendやdtrend_nなど,テーパリングはtaperやtaper_nで行うことができる。
フィルター †
Lanczos窓(sinc関数を用いた窓)を用いて時系列データにフィルターをかける際には以下の関数を用いる。
- filwgts_lanczos
Lanczosフィルターの重み(応答関数)を計算する関数。
本関数で計算された重みに対して、wgt_runaveなど、重み付き移動平均を計算する関数を用いることで、
任意の周波数帯域でフィルターされたデータを求めることができる。
Butterworthフィルターの関数もある。
フーリエ展開 †
スペクトルに載せた関数以外にも,フーリエ変換に関連する関数はいろいろあり,一部を紹介する。関数名末尾の"f"は"forward","b"は"backward"の頭文字。
- ezfftf
配列の最も右の次元についてフーリエ変換する関数
- cfftf
配列の最も右の次元について複素フーリエ変換する関数
- ezfftb
配列の最も右の次元についてフーリエ逆変換する関数
- cfftb
配列の最も右の次元について複素フーリエ逆変換する関数
球面調和関数展開 †
フーリエ展開と同様に球面調和関数展開を行う関数も用意されている。関数名の"sh"(spherical harmonics)に続く"a"は"analysis","s"は"synthesis"の頭文字。
- shaec
等間隔の緯度経度グリッド上のスカラー場に対して球面調和関数展開を行うprocedure。
- shaeC
等間隔の緯度経度グリッド上のスカラー場に対して球面調和関数展開を行う関数。
- shagc
ガウス格子上のスカラー場に対して球面調和関数展開を行うprocedure。
- shagC
ガウス格子上のスカラー場に対して球面調和関数展開を行う関数。
- shsec
球面調和関数展開された等間隔の緯度経度グリッド上のスカラー場を復元するprocedure。
- shseC
球面調和関数展開された等間隔の緯度経度グリッド上のスカラー場を復元する関数。
- shsgc
球面調和関数展開されたガウス格子上のスカラー場を復元するprocedure。
- shsgC
球面調和関数展開されたガウス格子上のスカラー場を復元する関数。
また,球面調和関数展開係数に対して波数切断を施す関数は以下の通り。
EOF・SVD解析 †
主成分分析(PCA)あるいは経験的直交関数(EOF)解析を行う関数と,特異値分解(SVD)解析を行う関数について紹介する。
経験的直交関数(EOF)解析 †
NCLではEOF解析を行うために、以下のような関数が用意されている。
スクリプト例:SST偏差のEOF解析も参照。
- eofunc
データ行列から,その共分散(または相関)行列の固有値・固有ベクトルを求める関数。
回転EOFを行う関数も用意されている。
特異値分解(SVD)解析 †
NCLではSVD解析を行うために、以下のような関数が用意されている。スクリプト例:高度場偏差とSST偏差のSVD解析も参照。
- svdcov_sv
共分散行列に対してSVDを行い,右特異行列,左特異行列を出力する関数。
- svdstd_sv
共分散行列を標準偏差で規格化したもの,つまり相関行列に対してSVDを行い,右特異行列,左特異行列を出力する関数。
- svdcov
共分散行列に対してSVDを行い,時間関数,同質相関マップ,異質相関マップを出力する関数。
- svdstd
共分散行列を標準偏差で規格化したもの,つまり相関行列に対してSVDを行い,時間関数,同質相関マップ,異質相関マップを出力する関数。
統計検定 †
統計検定において使える関数の一部を紹介する。
- ttest
平均値の差に対して両側t検定を行い,p値を返す関数。
- rtest
相関係数に対して両側t検定を行い,p値を返す関数。
- ftest
分散の比に対してF検定を行い,p値を返す関数。
- cdft_p
与えられた自由度のt分布に基づき,t値に対応する累積確率を返す関数。
- cdft_t
与えられた自由度のt分布に基づき,累積確率に対応するt値を返す関数。
- cdfnor_p
与えられた平均と標準偏差の正規分布に基づき,ある値に対応する累積確率を返す関数。
- cdfnor_x
与えられた平均と標準偏差の正規分布に基づき,累積確率に対応する値を返す関数。
- cdfchi_p
与えられた自由度のχ二乗分布に基づき,ある値に対応する累積確率を返す関数。
- cdfchi_x
与えられた自由度のχ二乗分布に基づき,累積確率に対応する値を返す関数。