無粋な日々に

頭の中のメモ。分からないことを整理する

時系列分析:移動平均過程(MAモデル)の性質と定常性

時系列分析では、系列の統計量が時点tに依存しないというシンプルな構造が基本となっています。まず定常性の元に基本的なモデルが構築され、そこから非定常のモデルに拡張されていくようです。そのため「定常かどうか」を議論されることが多いです。本投稿ではMA(q)モデルの性質と定常性を確認します。

定常性

我々が定常性を見る場合、以下2つのケースがあると思います

  1. データの定常性の確認(定常性の推定)

  2. モデルの定常性の確認

前者は観測したデータの構造を理解して、モデル化出来る構造があるかどうか見る際に行います。グラフを確認したり、検定したりです。後者は色々な時系列モデルの性質を理解するために行います。この際モデルは定式化されているので、その式を展開し、定常性の条件を満たしているか確認します。この投稿では[2]の定常性確認をMA(q)モデルに対して行います。

定常性の定義

\muを任意の定数とすると


\begin{eqnarray}
&E[y_t] = \mu \tag{1}\\
\\
&\operatorname{Cov}(y_t, y_{t+k}) = \gamma_k \tag{2}\\
\end{eqnarray}

を満たす時、その系列は弱定常といえます。tは時点、\gammaは自己共分散、kは時点のラグを表します。言葉でいうと系列の期待値と自己共分散が時点tに依存しない ということです。自己共分散は\gamma_kの下付きkは時刻tに依存してないが、ラグkには依存しても良いという気持ちが現れているのでしょう

移動平均過程 MA(q)​の性質と定常性

ここから移動平均過程の性質と定常性について、一つ一つ確認していきます。

移動平均過程 MA(q)​とは

移動平均過程では、現在の値y_t は過去のノイズからの影響を引きずっている(記憶している)と仮定します。 ここでは次のように定義します。



\begin{align}
&y_t = \beta_0\varepsilon_t + \beta_1\varepsilon_{t-1} + .. + \beta_q\varepsilon_{t-q} \\
\\
&\varepsilon_t \sim W.N.(0, \mu)

\end{align}

ここで\varepsilon_tはホワイトノイズ

直感的に理解しにくいですが、以下に具体例としてスーパーマーケットの売上の例が書いてあります。

time series - Real-life examples of moving average processes - Cross Validated

リンクでは分析者が知らないところで発行されている裏クーポンがあるケースを考えています。分析者はクーポンの存在を知らないため、このクーポンによる売上増加は分析者からノイズに含まれて見えます。ノイズは裏クーポン有効開始日に跳ね上がって、徐々に減衰していきます。売上はこのノイズの影響を受け、自己相関関係が生まれます。MA(q)はこういった構造を記述できるようです。

ma(q) モデルの性質と定常であるか確認してみます。

1. 期待値

移動平均過程y_tの期待値をとってみるだけです


\begin{align}
E[y_t] &= E[\beta_0\varepsilon_t + \beta_1\varepsilon_{t-1} + .. + \beta_q\varepsilon_{t-q}] \\
& = E[\beta_0\varepsilon_t] + E[\beta_1\varepsilon_{t-1}] + ... + E[\beta_q\varepsilon_{t-q}] \\
& = \beta_0E[\varepsilon_t] + \beta_1E[\varepsilon_{t-1}] + ... + \beta_qE[\varepsilon_{t-q}] 
\\
& = 0
\end{align}

これは常に0で一定なので、期待値は時点tに依存しません

式展開では期待値の線形性と \varepsilon_t \sim W.N(0, \mu) なので E[\varepsilon_t] = 0を使っています。

統計学習メモ:期待値 - 無粋な日々に

2. 自己共分散

MA(q)​のラグkでの自己共分散\operatorname{Cov}(y_t, y_{t+k})は以下の様に書き下せます


\begin{eqnarray}

\operatorname{Cov}(y_t, y_{t+k}) &= E[y_ty_{t+k}]  - E[y_t]E[y_{t+k}] \\
&= E[(\beta_0\epsilon_t + \beta_1\epsilon_{t-1} + .. + \beta_q\epsilon_{t-q})
(\beta_0\epsilon_{t+k} + \beta_1\epsilon_{t+k-1} + .. + \beta_q\epsilon_{t+k-q})] \tag{3}\\

\\
 &= E\left(
\begin{array}{l}
\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t+k}+\beta_{0} \beta_{1} \varepsilon_{t} \varepsilon_{t+k-1}+\cdots+\beta_{0} \beta_{q} \varepsilon_{t} \varepsilon_{t+k-q} \\
\hspace{4cm} + \\
\beta_{1} \beta_{0} \varepsilon_{t-1} \varepsilon_{t+k}+\beta_{1}\beta_{1} \varepsilon_{t-1} \varepsilon_{t+k-1}+\cdots+\beta_{1} \beta_{q} \varepsilon_{t-1} \varepsilon_{t+k-q}\\
\vdots  \hspace{3.7cm} + \hspace{4cm} \vdots \\
\beta_{q}\beta_{0} \varepsilon_{t-q} \varepsilon_{t+k} + \beta_{q}\beta_{1} \varepsilon_{t-q} \varepsilon_{t+k-1}+\cdots+\beta_{q} \beta_{q} \varepsilon_{t-q} \varepsilon_{t+k-q}
\end{array}
\right) \tag{4}
\end{eqnarray}

統計学習メモ:分散、共分散 - 無粋な日々に

(4)の括弧の中は、式(3)多項式の積の展開を行列の様に縦に方向に積み上げて表記したものです。なので式(4)の括弧の中の項をすべて足し合わせ、期待値をとったものが\operatorname{Cov}(y_t, y_{t+k})になります。

ここでホワイトノイズの性質から次が成り立ちます


\begin{align}
E[\varepsilon_i\varepsilon_j]
&= 
\left\{
\begin{array}{ll}
E[\varepsilon_i^2] = \sigma^2 & i = j \\
\tag{5}\\
E[\varepsilon_i]E[\varepsilon_j] = 0 & i\neq j
\end{array}
\right.

\end{align}

つまり式(4)の括弧の中にある、例えば最初の項\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t+k}を考えると、2つの\varepsilonの下付きのtt+kが一致しない場合、この項の期待値は0になります。結局2つの\varepsilonの下付きの値が一致する項のみを考慮すれば良いことになります。\varepsilonの下付きの値が一致する項はどういう時に現れるでしょうか。具体例で見てみます。

MA(2), k=0の場合:

2次の移動平均過程のラグが2での例をみてみます。つまりMA(q=2), k=0の自己共分散は

(4)q=2, k=0を代入して


\begin{eqnarray}
\operatorname{Cov}(y\_t, y\_{t})

&= E\left(

\begin{array}{l}

\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t}\ \ \ +
\beta_{0} \beta_{1} \varepsilon_{t} \varepsilon_{t-1}\ \ \ +
\beta_{0} \beta_{2} \varepsilon_{t} \varepsilon_{t-2} \\
\hspace{4cm}+\\
\beta_{1} \beta_{0} \varepsilon_{t-1} \varepsilon_{t}+
\beta_{1}\beta_{1} \varepsilon_{t-1} \varepsilon_{t-1}+
\beta_{1} \beta_{2} \varepsilon_{t-1} \varepsilon_{t-2}\\
\hspace{4cm}+\\
\beta_{2}\beta_{0} \varepsilon_{t-2} \varepsilon_{t} + 
\beta_{2}\beta_{1} \varepsilon_{t-2} \varepsilon_{t-1}+
\beta_{2} \beta_{2} \varepsilon_{t-2} \varepsilon_{t-2}

\end{array}
\right) \tag{4-0}
\end{eqnarray}

2つの\varepsilonの下付きの値が一致するのは、括弧内の対角にある項のみで


\begin{align}
\operatorname{Cov}(y_t, y_{t}) 
&= E[\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t}] + 
E[\beta_{1}\beta_{1} \varepsilon_{t-1} \varepsilon_{t-1}] +
E[\beta_{2} \beta_{2} \varepsilon_{t-2} \varepsilon_{t-2}]\\

&= \beta_{0}\beta_{0}E[\varepsilon_{t} \varepsilon_{t}] + 
\beta_{1}\beta_{1}E[ \varepsilon_{t-1} \varepsilon_{t-1}] +
\beta_{2} \beta_{2}E[ \varepsilon_{t-2} \varepsilon_{t-2}]\\

&= \beta_{0}\beta_{0}\sigma^2 + 
\beta_{1}\beta_{1}\sigma^2 +
\beta_{2} \beta_{2}\sigma^2\\

&= \sigma^2\sum_{i}^2\beta_{i}\beta_{i}
\end{align}

2行目から3行目の展開は式(5)を利用しています。

MA(2), k=1の場合:

同様にma(q=2), k=1の自己共分散は、式(4)q=2, k=1を代入すると


\begin{align}
\operatorname{Cov}(y_t, y_{t+1})

&= E\left(

\begin{array}{l}

\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t+1}\ \ \ +
\beta_{0} \beta_{1} \varepsilon_{t} \varepsilon_{t}\ \ \ +
\beta_{0} \beta_{2} \varepsilon_{t} \varepsilon_{t-1} \\
\hspace{4cm}+\\
\beta_{1} \beta_{0} \varepsilon_{t-1} \varepsilon_{t+1}+
\beta_{1}\beta_{1} \varepsilon_{t-1} \varepsilon_{t}+
\beta_{1} \beta_{2} \varepsilon_{t-1} \varepsilon_{t-1}\\
\hspace{4cm}+\\
\beta_{2}\beta_{0} \varepsilon_{t-2} \varepsilon_{t+1} + 
\beta_{2}\beta_{1} \varepsilon_{t-2} \varepsilon_{t}+
\beta_{2} \beta_{2} \varepsilon_{t-2} \varepsilon_{t-1}

\end{array}
\right) \tag{4-1}\\
\\
&= E[\beta_{0}\beta_{1} \varepsilon_{t} \varepsilon_{t}] + 
E[\beta_{1} \beta_{2} \varepsilon_{t-1} \varepsilon_{t-1}]\\
\\
&= \beta_{0}\beta_{1}\sigma^2 + 
\beta_{1} \beta_{2}\sigma^2\\

&= \sigma^2\sum_{i}^{1}\beta_{i}\beta_{i+1}

\end{align}

MA(2), k=2の場合:

同様に式(4)q=2, k=2を代入して


\begin{align}
\operatorname{Cov}(y_t, y_{t+2})

&= E\left(

\begin{array}{l}

\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t+2}\ \ \ +
\beta_{0} \beta_{1} \varepsilon_{t} \varepsilon_{t+1}\ \ \ +
\beta_{0} \beta_{2} \varepsilon_{t} \varepsilon_{t} \\
\hspace{4cm}+\\
\beta_{1} \beta_{0} \varepsilon_{t-1} \varepsilon_{t+2}+
\beta_{1}\beta_{1} \varepsilon_{t-1} \varepsilon_{t+1}+
\beta_{1} \beta_{2} \varepsilon_{t-1} \varepsilon_{t}\\
\hspace{4cm}+\\
\beta_{2}\beta_{0} \varepsilon_{t-2} \varepsilon_{t+2} + 
\beta_{2}\beta_{1} \varepsilon_{t-2} \varepsilon_{t+1}+
\beta_{2} \beta_{2} \varepsilon_{t-2} \varepsilon_{t}

\end{array}
\right) \tag{4-2}\\
\\
&= E[\beta_{0}\beta_{2} \varepsilon_{t} \varepsilon_{t}]\\
\\
&= \beta_{0}\beta_{2}\sigma^2\\

&= \sigma^2\sum_{i=0}^{0}\beta_{i}\beta_{i+2}

\end{align}

MA(2), k=3の場合:

さらにk=3でも自己共分散を見てみましょう


\begin{align}
\operatorname{Cov}(y_t, y_{t+3})

&= E\left(

\begin{array}{l}

\beta_{0}\beta_{0} \varepsilon_{t} \varepsilon_{t+3}\ \ \ +
\beta_{0} \beta_{1} \varepsilon_{t} \varepsilon_{t+2}\ \ \ +
\beta_{0} \beta_{2} \varepsilon_{t} \varepsilon_{t+1} \\
\hspace{4cm}+\\
\beta_{1} \beta_{0} \varepsilon_{t-1} \varepsilon_{t+3}+
\beta_{1}\beta_{1} \varepsilon_{t-1} \varepsilon_{t+2}+
\beta_{1} \beta_{2} \varepsilon_{t-1} \varepsilon_{t+1}\\
\hspace{4cm}+\\
\beta_{2}\beta_{0} \varepsilon_{t-2} \varepsilon_{t+3} + 
\beta_{2}\beta_{1} \varepsilon_{t-2} \varepsilon_{t+2}+
\beta_{2} \beta_{2} \varepsilon_{t-2} \varepsilon_{t+1}

\end{array}
\right) \tag{4-2}\\
\\
&= 0


\end{align}

k = 3では\varepsilonの下付きが一致する項は存在しないので、すべての項の期待値は0になります。MA過程の次数qより大きいラグkk > q)での自己共分散は0になります

一般に:

MA(q)の自己共分散は、k \leq qにおいて


\operatorname{Cov}(y_t, y_{t+k}) = \sigma^2\sum_{i=0}^{q-k}\beta_{i}\beta_{i+k} =\gamma_k

k > qでは0になります。自己共分散はラグkにのみ依存してtに依存しません

3. 分散

分散は共分散のk=0の場合なので


\gamma_0 = \sigma^2\sum_{i=0}^{q}\beta_{i}^2

4. 自己相関係数

さらに自己相関係数は、共分散を分散で正規化したものなので


\rho_k = \frac{\gamma_k}{\gamma_0} = \frac{\sum_{i=0}^{q-k}\beta_i\beta_{i+k}}{\sum_{i=0}^{q}\beta_i^2}

5.MA(q)の定常性

MA(q)の期待値と自己共分散は時点tに依存しないため、移動平均過程は弱定常であるといえます

まとめ

移動平均過程MA(q)  y_{t} = \beta_{0}\varepsilon_{t} + \beta_{1}\varepsilon_{t-1} + .. + \beta_{q}\varepsilon_{t-q} において

統計量
期待値 \mu = E[y_t = 0]
自己共分散  \gamma_k = \operatorname{Cov}(y_t, y_{t+k}) = \sigma^{2}\sum_{i=0}^{q-k}\beta_{i}\beta_{i+k}
分散  \gamma_0 = \operatorname{Var}(y_{t}) = \sum_{i=0}^{q}\beta_{i}^{2}
自己相関  \rho = \frac{\gamma_{k}}{\gamma_{0}} = \frac{\sum_{i=0}^{q-k}\beta_{i}\beta_{i+k}}{\sum_{i=0}^{q}\beta_i^{2}}
定常性 常に弱定常を満たす

以上です。時系列モデルは頭が混乱します。日々精進

参考

統計学習メモ:分散、共分散

データ分析の勉強をしていると期待値や分散の計算は非常によく使う。ほとんどこればっかりやっている感じ。 なので期待値や分散の性質は、一度納得したら覚えておくとスムーズ。 本記事では分散、共分散の定義や性質をまとめます。期待値のまとめはこちらから統計学習メモ:期待値 - 無粋な日々に

※本記事の定義や式の展開はソラで書いています。違和感や間違いがありましたら教えてもらえると嬉しいです。

定義

分散の定義

分散は変数の平均(重心)からの距離の期待値で定義される。変数の散らばりの程度を表すような統計量。 変数 X の分散は


\begin{align}

\operatorname{Var}_{X}[X] &=E_{X}[X-E_{X}[X]^{2}]\\
&=E_{X} [ \left(X-\mu_{X}\right)^{2}] \\
&=\int_{\mathbb{R}}\left(X-\mu_{X}\right)^{2} p(x)dx

\end{align}

で定義される。ここで E_{X}[\cdot]は Xに関して期待値をとる操作を表す。どの変数に関して期待値を取るかが明確な場合は省略して E[\cdot]と表記することにする

共分散の定義

中心化された2変数の積の期待値で定義される。共分散は2変数の類似度を表すような統計量。 変数  X, Yの共分散は


\begin{align}

\operatorname{Cov}(X, Y) &=E_{XY}[(X-E_{X}[X])(Y-E_{Y}[Y])] \\
&=E_{XY}[\left(X-\mu_{X}\right)\left(Y-\mu_{Y}\right)] \\
&=\iint_{\mathbb{R}}\left(x-\mu_{x}\right)\left(y-\mu_{y}\right) p(x, y) d x d y

\end{align}

で定義される。共分散を X Y標準偏差で正規化すると相関係数になる。分散は共分散の X=Yのケースといえる

よく使う性質

1. 定数倍

変数 Xを定数した変数 kXの分散は、 Xの分散の k^{2}倍になる。つまり kを定数とすると次が成り立つ



\operatorname{Var}[kX]  =k^{2}\operatorname{Var}[X]


2. 分散公式

分散は(二乗の期待値) - (期待値の二乗) で計算できる。分散公式と呼ばれているらしい


\operatorname{Var}[X]  =E[X^{2}]-E[X]^{2}

次の展開を行えば導ける


\begin{align}

\operatorname{Var}[X] &=E [X-E[X]^{2}] \\
&=E[ \left(X-\mu_{X}\right)^{2}] \\
&=E[X^{2}-2 X \mu_{X}+\mu_{X}^{2}] \\
&=E[X^{2}]-2 \mu_{X} E[X]+\mu_{X}^{2} \\
&=E[X^{2}]-E[X]^{2}

\end{align}

分散は共分散の X=Yのケースと考えられるため、分散公式は共分散を以下のように展開し  X = Y と考えても導ける


\begin{aligned}

\operatorname{Cov}(X, Y) &=E_{XY}[(X-E_X[X])(Y-E_Y[Y])] \\
&=E_{XY}[\left(X-\mu_X\right)\left(Y-\mu_Y\right)] \\
&=E_{XY}[\left(XY - X\mu_Y - Y\mu_X + \mu_X\mu_Y\right)] \\
&=E_{XY}[XY] - E_X[X]\mu_Y - E_Y[Y]\mu_X + \mu_X\mu_Y \\
&=E_{XY}[XY] - \mu_X\mu_Y \\
&=E_{XY}[XY] - E_X[X]E_Y[Y]

\end{aligned}

 X = Yのとき


\begin{aligned}

\operatorname{Var}[X]  &=\operatorname{Cov}(X, X) \\
&= E_{X}[X \cdot X] - E_X[X]E_X[X] \\
&=E[X^{2}]-E[X]^{2}

\end{aligned}

2. 独立な2変数の共分散は0

変数 X Yが独立なとき \operatorname{Cov}(X, Y) = 0 となる


\begin{aligned}

\operatorname{Cov}(X, Y) &=E_{XY}[XY] - E_X[X]E_Y[Y]

\end{aligned}

ここで X, Yが互いに独立のとき p(x, y) = p(x)p(y)が成立するため


\begin{aligned}
E_{XY}[XY] &= \iint{xyp(x, y)}dxdy \\
&=\iint{xyp(x)p(y)}dxdy \\
&=\int{y\left[\int{xp(x)}dx\right]p(y)}dy \\
&=\mu_X\int{yp(y)}dy \\
&=\mu_X\mu_Y \\
&=E_X[X]E_Y[Y] \\

\end{aligned}

 E_{XY}[XY] = E_X[X]E_Y[Y]  となり \operatorname{Cov}(X, Y) = 0

3.分散の和

和の変数 X+Yの分散は、分散の和 Var[X] + Var[Y] から共分散の2倍を足したものになる。つまり


\begin{align}

\operatorname{Var}_{XY}[X+Y] =\operatorname{Var}_{X}[X]+\operatorname{Var}_{Y}[Y]+2 \operatorname{Cov}(X, Y)

\end{align}

ここで X, Yが互いに独立のとき \operatorname{Cov}(X, Y) = 0となるため


\operatorname{Var}_{XY}[X+Y] = \operatorname{Var}_{X}[X] + \operatorname{Var}_{Y}[Y]

分散の和についての導出は


\begin{align}

\operatorname{Var}_{XY}[X+Y] &=E_{XY}[(X+Y)^{2}]-E_{XY}[X+Y]^{2} \\
&=E_{XY}[X^{2}+2 XY+Y^{2}]-(E_{X}[X]+E_{Y}[Y])^{2} \\
&=E_{X}[X^{2}]+2 E_{XY}[XY]+E_{Y}[Y^{2}]-E_{X}[X]^{2}-2E_{X}[X] E_{Y}[Y] - E_{Y}[Y]^{2}  \\
&=(E_{X}[X^{2}]-E_{X}[X]^{2})+(E_{Y}[Y^{2}]-E_{Y}[Y]^{2}) + 2(E_{XY}[XY]-E_{X}[X]E_{Y}[Y])\\
&=\operatorname{Var}_{X}[X]+\operatorname{Var}_{Y}[Y]+2 \operatorname{Cov}(X, Y)

\end{align}

展開では以下を用いている

  • 1行目は分散公式
  • 1行目から2行目、2行目から3行目は期待値の線形性と E_{XY}[X] = E_{X}[X] を利用
  • 3行目から4行目は分散公式、分散・共分散の定義

はてなブログTEX入力がQiitaとくらべてすごく面倒ですね。。。すごく時間かかります。日々精進

統計学習メモ:期待値

データ分析の勉強をしていると期待値や分散の計算は非常によく使う。ほとんどこればっかりやっている感じ。 なので期待値や分散の性質は、一度納得したら覚えておくとスムーズ。 本記事では期待値の定義や性質をまとめます。分散、共分散のまとめはこちらから

統計学習メモ:分散、共分散 - 無粋な日々に

※本記事の定義や式の展開はソラで書いています。違和感や間違いがありましたら教えてもらえると嬉しいです。

期待値の定義

連続型確率変数Xに関するf(X) の期待値は


E_{X}[f(X)] = \int_{\mathbb{R}} f(x) p(x) d x

E_{X}[\cdot] はXに関して期待値をとる操作とする。

この期待値の定義や次の期待値の性質は分布を仮定せず、どんな分布でも使うことができる。 また具体的な期待値を計算する際は、確率密度関数(PDF)や確率質量関数(PMF)を設定して使うことになる。たとえば正規分布だと  p(x) = \frac{1}{\sqrt{2\pi\sigma^{2}}} \exp\left(-\frac{(x - \mu)^{2}}{2\sigma^{2}}\right)

よく使う期待値の性質

1. 定数の期待値

定数の期待値は定数になる(aは定数)


E_{X}[a] = a

2. 線形性

期待値は線形性をもつ


E_{XY}[af(X) + bg(Y)] = aE_{X}[f(X)] + bE_{Y}[g(Y)]

​上の式は、X, Yが互いに独立でなくても成立する

3. 依存しない変数まわりの期待値

 f(X)は変数 Yに依存しないので、 Yに関する操作は考えず、 Xに関する期待値のみ考えれば良い


E_{XY}[f(X)] = E_{X}[f(X)]

証明

1. 定数の期待値

定数は  f(x) = a のケースで、 f(X) が確率変数 Xに関係なく一定の値を取る場合に相当する


\begin{align}

E_{X} [ a ] &=\int a p(x) d x \\
&=a \int p(x) d x=a

\end{align}

2. 線形性

複数の確率変数X, Y の場合、期待値は同時確率 p(x, y) の計算となるため注意が必要だが、周辺化されるため結果は単純になる


\begin{align}

E_{XY}[af(X)+bg(Y)] &=\iint \{ af(x)+bg(y) \} p(x, y) d x d y \\
&=\iint af(x) p(x, y) d x d y+\iint bg(y) p(x, y) d x d y \\
&=a\int f(x)[\int p(x, y) d y] d x+b\int g(y)[\int p(x, y) d x] d y \\
&=a\int f(x) p(x) d x+b\int g(y) p(y) d y \\
&= aE_{X}[f(X)] + bE_{Y}[g(Y)]

\end{align}

2行目から3行目の変形は周辺化  p(x)= \int p(x, y)dy を用いた。  X が離散型確率変数の場合、期待値は総和  \sum{f(X)p(X)} で定義されるが、この場合も次の期待値の性質は同様に成り立つ

3. 依存しない変数まわりの期待値

 Yは周辺化により積分消去されるので関係なくなる


\begin{align}

E_{XY}[f(X)] &=\iint f(x) p(x, y) d x d y \\
&=\int f(x)[\int p(x, y) d y] d x\\
&=\int f(x) p(x) d x\\
&= E_{X}[f(X)]

\end{align}

2行目から3行目の変形が周辺化  p(x)= \int p(x, y)dy を用いている

期待値の線形性から和の期待値は期待値の和となるが、これはよく使う


E_{XY}[X + Y] = E_{X}[X] + E_{Y}[Y]

例えば、正規分布に従う2つの変数XY があり、平均がそれぞれ \mu_{X}, \mu_{Y}正規分布に従うとする


\begin{array}{l}
X \sim \mathcal{N}\left(\mu_{X}, \sigma_{X}^{2}\right) \\
Y \sim \mathcal{N}\left(\mu_{X}, \sigma_{Y}^{2}\right) \\
\end{array}

XYの 和の確率変数X + Y の平均は  \mu_{X}+\mu_{Y} となる


{E[X+Y]=E[X]+E[Y]=\mu_{X}+\mu_{Y}}

誤差解析とか時系列、カルマンフィルタとかは比較的こういう考え方がよく出てくる印象


私は日頃よく以下が分からなくなることが多いです。

  • 何周りの期待値を取っているのか
  • 変数同士の独立を仮定しているのか

その整理のため書きました。日々精進

Python: 多次元のnumpy.arrayを1次元にするreshapeとravel

numpyの多次元配列を一次元配列にしたいときは、reshape(-1,)ravel()を使えば良い

import numpy as np

# サンプルデータ生成(3 × 3)
> x = np.arange(9).reshape(3, 3)

# 表示
> x

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

# 方法1
> x.reshape(-1,)

array([0, 1, 2, 3, 4, 5, 6, 7, 8])


# 方法2
> np.ravel(x)

array([0, 1, 2, 3, 4, 5, 6, 7, 8])

ねむい。ごきげんよう

Python: print関数の仕様

print関数って、意識せず使ってたけどこんな仕様なんですねぇ 面白かったので、いくつか見てみましょう。

複数引数がとれて、一気にprintできる

複数引数を渡すと、スペースで区切られて出力される

# 複数引数を与えてみる
print('str1', 'str2', 'str3')

#> str1 str2 str3

セパレタも選択できる

複数引数を出力する際のデフォルトのセパレタはスペースですが、これも変えられる これって、Rでいうpasteとprintを両方兼ね添えた感じですね

# セパレタを変えてみる
print('str1', 'str2', 'str3', sep=':')

#> str1:str2:str3

ってことはlistをアンパックしたりすればこんな事もできますね

# リストをアンパックして渡して、全部の要素を接続
x = ['a', 'b', 'c']
print(*x, sep='')

#> abc

引数渡さなくてもいい(笑)

何も引数を渡さないと、end仮引数でデフォルトで指定されている\n改行が出力される。 endを指定することで、第1引数の出力後のお尻を何で締めくくるか決めれるみたい

# エラーにはならず、改行が出力(見えんけど)
print()

#>

# end引数に値を渡すと、出力のお尻を何で締めくくるか決められる
print('str1', end='end')

#> str1end

出力先も変えられる

標準出力(sys.stdout)以外にもwrite(string) メソッドを持つオブジェクトならなんでも出力できるみたいです。 例えば普通にファイルにも出力できる

# out.txtファイルに`str`が出力されます
with open('out.txt', 'w') as f:
    print('str', file=f)

flushオプションはわからん

バッファするかどうか、指定するみたいですが私にはわからなかったのでどう使うのか、誰か教えてください。

ドキュメントに書いてること

2. 組み込み関数 print

print(*objects, sep=‘ ’, end=‘\n’, file=sys.stdout, flush=False)
objects (単数でも複数でも可) を sep で区切りながらテキストストリーム file に表示し、最後に end を表示します。sep、end、file を与える場合、キーワード引数として与える必要があります。 キーワードなしの引数はすべて、 str() がするように文字列に変換され、 sep で区切られながらストリームに書き出され、最後に end が続きます。 sep と end の両方とも、文字列でなければなりません。これらを None にすると、デフォルトの値が使われます。 objects が与えられなければ、 print() は end だけを書き出します。 file 引数は、 write(string) メソッドを持つオブジェクトでなければなりません。指定されないか、 None である場合、 sys.stdout が使われます。表示される引数は全てテキスト文字列に変換されますから、 print() はバイナリモードファイルオブジェクトには使用できません。代わりに file.write(…) を使ってください。 出力がバッファ化されるかどうかは通常 file で決まりますが、flush キーワード引数が真ならストリームは強制的にフラッシュされます。 バージョン 3.3 で変更: キーワード引数 flush が追加されました。

ではごきげんよう。

pandas.DataFrameのplotメソッドとsubplotを使って、複数グラフを柔軟にプロットする

pandasのデータフレームのplotメソッドは超便利でよくお世話になる。 複数カラムを別々のグラフに出力したい場合もsubplot=Trueを指定するだけいいので結構程度便利なんだけど、 もう少し柔軟にプロットしたい時がある。

例えば、

  • カラム1とカラム2は1つ目のグラフに表示、カラム3とカラム4は2つ目のグラフに表示したい
  • グラフごとにタイトル変えたい
  • 軸をグラフごとに柔軟に変更したい

こういうときは、pyplotのsubplotとpandas.DataFrame.plotのあわせ技でプロットすると良いんではないだろうか 例えば以下のような感じ。あとは必要に応じて軸のformatterとか個別に設定するば良いんじゃないかと

Python: jsonな文字列に対してformatメソッドを使う

jsonな文字列に対してformatメソッドを使う方法

pythonjson形式を含む文字列をformatメソッドを使う場合ちょっと工夫が必要だ。 例えば、以下のような文字列に対してformatメソッドを使うとエラーが出る

# jsonな文字列
json_str = """\
{'member':'{name}', 'age': 26}
"""

# formatメソッドで値を指定しようとすると
prof = json_str.format(name='john')

# エラーが出る
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-44-686c908f6197> in <module>()
----> 1 json_str.format(**{name='john'})

KeyError: "'member'"

これはプレースホルダのkeyとjsonのフォーマットのkeyをformatメソッドが区別できないかららしい。以下のように文字列中のjson用の{}を二重にしてあげるとエラーは出ない。(深い理由は知らないです。ご存知のかた教えてください)

# jsonな文字列。{}を2重にする
json_str = """\
{{'member':'{name}', 'age': 26}}
"""

prof = json_str.format(name='john')

# エラーは出ない。
print(eval(prof))

#> {'age': 26, 'member': 'john'}

json形式の文字列から、eval関数を使ってdict型のデータを生成することはよくあるので知っておくとよい。

参考