ブログ

Ch.22 「固有値と固有ベクトル」の演習問題の解答例 〜統計学のための数学入門30講〜

当記事は「統計学のための数学入門$30$講(朝倉書店)」の読解サポートにあたってChapter.$22$の「固有値と固有ベクトル」の章末問題の解答の作成を行いました。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・書籍解答まとめ
https://www.hello-statisticians.com/answer_textbook_math#math_stat

本章のまとめ

固有値・固有ベクトルの性質

問題$22.1$で使用するので、$22.1$節、P.$140$の「固有値・固有ベクトルの性質」の内容を以下にまとめる。

$p$次の正方行列$A$の固有値$\lambda_i$に関して下記が成立する。
$(1) \,$ 固有方程式は$p$次方程式であり、固有値は$p$個ある。ただし、重根の場合には重複度を含めて$p$個と考える。
$(2) \,$ $\lambda_{1} + \lambda_{2} + \cdots \lambda_{p} = \mathrm{Tr}(A)$
$(3) \,$ $\lambda_{1} \lambda_{2} \cdots \lambda_{p} = |A|$
$(4) \,$ $|A| \, \iff \,$ 少なくとも$1$つの固有値が$0$
$(5) \,$ $A$の逆行列が存在する $\, \iff \,$ 全ての固有値が$0$ではない
$(6) \,$ $A$の逆行列$A^{-1}$が存在するとき、$A$の固有値が$\lambda_{1}, \lambda_{2}, \cdots \lambda_{p}$であれば$A^{-1}$の固有値は$1/\lambda_{1}, 1/\lambda_{2}, \cdots 1/\lambda_{p}$である。また$\lambda_i$に対応する$A$の固有ベクトルが$\mathbf{x}_{i}$であれば、$1/\lambda_i$に対応する$A^{-1}$の固有ベクトルは$\mathbf{x}_{i}$である。
$(7) \,$ $A$の固有値と$A^{\mathrm{T}}$の固有値は同じである。

対角化可能なための条件

$p$次の正方行列$A \in \mathbb{R}^{p \times p}$は下記が成立するとき対角化可能である。
$(1) \,$ 正方行列$A$の$p$個の固有値が全て異なる
$(2) \,$ 正方行列$A$に$p$本の一次独立な固有ベクトルが存在する

演習問題解答

問題$22.1$

$$
\large
\begin{align}
A = \left( \begin{array}{cc} 1 & 1 \\ 0 & 2 \end{array} \right)
\end{align}
$$

上記の$A$の逆行列$A^{-1}$は下記のように表せる。
$$
\large
\begin{align}
A^{-1} &= \frac{1}{2-0} \left( \begin{array}{cc} 2 & -1 \\ 0 & 1 \end{array} \right) \\
&= \frac{1}{2} \left( \begin{array}{cc} 2 & -1 \\ 0 & 1 \end{array} \right) \\
&= \left( \begin{array}{cc} 1 & -1/2 \\ 0 & 1/2 \end{array} \right)
\end{align}
$$

$A$の固有値・固有ベクトル

固有方程式$\det(A – \lambda I_2)=0$は下記のように解ける。
$$
\large
\begin{align}
\det(A – \lambda I_2) &= \left| \begin{array}{cc} 1-\lambda & 1 \\ 0 & 2-\lambda \end{array} \right| \\
&= (1-\lambda)(2-\lambda) = 0 \\
\lambda &= 1, \, 2
\end{align}
$$

上記の長さ$1$の固有ベクトルを$\displaystyle \mathbf{u} = \left( \begin{array}{c} x \\ y \end{array} \right)$とおくと、$\lambda = 1, \, 2$に対応する$\mathbf{u}$はそれぞれ下記のように得られる。

・$\lambda = 1$
$$
\large
\begin{align}
\left( \begin{array}{cc} 1 & 1 \\ 0 & 2 \end{array} \right)\left( \begin{array}{c} x \\ y \end{array} \right) &= \left( \begin{array}{c} x \\ y \end{array} \right) \\
\left( \begin{array}{c} x+y \\ 2y \end{array} \right) &= \left( \begin{array}{c} x \\ y \end{array} \right) \\
\mathbf{u} &= \left( \begin{array}{c} x \\ y \end{array} \right) = \left( \begin{array}{c} 1 \\ 0 \end{array} \right)
\end{align}
$$

・$\lambda = 2$
$$
\large
\begin{align}
\left( \begin{array}{cc} 1 & 1 \\ 0 & 2 \end{array} \right)\left( \begin{array}{c} x \\ y \end{array} \right) &= 2 \left( \begin{array}{c} x \\ y \end{array} \right) \\
\left( \begin{array}{c} x+y \\ 2y \end{array} \right) &= \left( \begin{array}{c} 2x \\ 2y \end{array} \right) \\
\mathbf{u} &= \left( \begin{array}{c} x \\ y \end{array} \right) = \frac{1}{\sqrt{2}} \left( \begin{array}{c} 1 \\ 1 \end{array} \right)
\end{align}
$$

$A^{-1}$の固有値・固有ベクトル

固有方程式$\det(A^{-1} – \lambda I_2)=0$は下記のように解ける。
$$
\large
\begin{align}
\det(A^{-1} – \lambda I_2) &= \left| \begin{array}{cc} 1-\lambda & -1/2 \\ 0 & 1/2-\lambda \end{array} \right| \\
&= \left( 1-\lambda \right) \left( \frac{1}{2} – \lambda \right) = 0 \\
\lambda &= 1, \, \frac{1}{2}
\end{align}
$$

上記の長さ$1$の固有ベクトルを$\displaystyle \mathbf{u} = \left( \begin{array}{c} x \\ y \end{array} \right)$とおくと、$\lambda = 1, \, 1/2$に対応する$\mathbf{u}$はそれぞれ下記のように得られる。

・$\lambda = 1$
$$
\large
\begin{align}
\left( \begin{array}{cc} 1 & -1/2 \\ 0 & 1/2 \end{array} \right)\left( \begin{array}{c} x \\ y \end{array} \right) &= \left( \begin{array}{c} x \\ y \end{array} \right) \\
\left( \begin{array}{c} x-y/2 \\ y/2 \end{array} \right) &= \left( \begin{array}{c} x \\ y \end{array} \right) \\
\mathbf{u} &= \left( \begin{array}{c} x \\ y \end{array} \right) = \left( \begin{array}{c} 1 \\ 0 \end{array} \right)
\end{align}
$$

・$\lambda = 1/2$
$$
\large
\begin{align}
\left( \begin{array}{cc} 1 & -1/2 \\ 0 & 1/2 \end{array} \right)\left( \begin{array}{c} x \\ y \end{array} \right) &= \frac{1}{2} \left( \begin{array}{c} x \\ y \end{array} \right) \\
\left( \begin{array}{c} x-y/2 \\ y/2 \end{array} \right) &= \left( \begin{array}{c} x/2 \\ y/2 \end{array} \right) \\
\mathbf{u} &= \left( \begin{array}{c} x \\ y \end{array} \right) = \frac{1}{\sqrt{2}} \left( \begin{array}{c} 1 \\ 1 \end{array} \right)
\end{align}
$$

上記に対し、$(1)$〜$(3)$と$(5)$、$(6)$が成立することを以下確認を行う。
$(1) \,$ $2$次の正方行列$A, A^{-1}$に対し、固有方程式$\det(A – \lambda I_2)=0, \det(A^{-1} – \lambda I_2)$はそれぞれ$2$次方程式であり、それぞれ$2$個の方程式の解に対応する固有値を持つ。
$(2) \,$ $A$に関して$\lambda_1+\lambda_2 = 1+2 = 3 = \mathrm{Tr}(A)$が成立し、同様に$A^{-1}$に関して$\lambda_1+\lambda_2 = 1+1/2 = 3/2 = \mathrm{Tr}(A^{-1})$が成立する。
$(3) \,$ $A$に関して$\lambda_1 \times \lambda_2 = 2 = |A|$が成立し、同様に$A^{-1}$に関して$\lambda_1 \times \lambda_2 = 1/2 = |A^{-1}|$が成立する。
$(5) \,$ $A$の固有値は$1 \neq 0, 2 \neq 0$である。また、$A^{-1}$も存在する。
$(6) \,$ $A, A^{-1}$の固有値・固有ベクトルをそれぞれ確認することで、確認できる。

$A^{n}$の計算

$A$に関する固有ベクトルを縦に並べた行列を$U$、固有値を対角に並べた行列を$\Lambda$とおくと、$U, \Lambda$は下記のように表せる。
$$
\large
\begin{align}
U &= \left( \begin{array}{cc} 1 & 1/\sqrt{2} \\ 0 & 1/\sqrt{2} \end{array} \right) \\
\Lambda &= \left( \begin{array}{cc} 1 & 0 \\ 0 & 2 \end{array} \right)
\end{align}
$$

このとき、$A, U, \Lambda$に関して下記が成立する。
$$
\large
\begin{align}
AU &= U \Lambda \\
U^{-1}AU &= \Lambda \\
(U^{-1}AU)^{n} &= \Lambda^{n} \\
U^{-1} A^{n} U &= \Lambda^{n} \\
A^{n} &= U \Lambda^{n} U^{-1} \\
A^{n} &= \left( \begin{array}{cc} 1 & 1/\sqrt{2} \\ 0 & 1/\sqrt{2} \end{array} \right) \left( \begin{array}{cc} 1 & 0 \\ 0 & 2^{n} \end{array} \right) \left( \begin{array}{cc} 1 & -1 \\ 0 & \sqrt{2} \end{array} \right) \\
&= \left( \begin{array}{cc} 1 & 2^{n}/\sqrt{2} \\ 0 & 2^{n}/\sqrt{2} \end{array} \right) \left( \begin{array}{cc} 1 & -1 \\ 0 & \sqrt{2} \end{array} \right) \\
&= \left( \begin{array}{cc} 1 & 2^{n}-1 \\ 0 & 2^{n} \end{array} \right)
\end{align}
$$

問題$22.2$

$$
\large
\begin{align}
B = \left( \begin{array}{ccc} 0 & 0 & 2 \\ 0 & 2 & 0 \\ 2 & 0 & 0 \end{array} \right), \, C = \left( \begin{array}{ccc} 1 & 1 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right)
\end{align}
$$

行列$B$の対角化

行列$B$の固有多項式$\det{(\lambda I_{3} \, – \, B)}$は下記のように計算することができる。
$$
\large
\begin{align}
\det{(\lambda I_{3} \, – \, B)} &= \left| \begin{array}{ccc} \lambda & 0 & -2 \\ 0 & \lambda \, – \, 2 & 0 \\ -2 & 0 & \lambda \end{array} \right| \\
&= \lambda \cdot (-1)^{1+1} \left| \begin{array}{cc} \lambda \, – \, 2 & -2 \\ 0 & \lambda \end{array} \right| + (-2) \cdot (-1)^{1+3} \left| \begin{array}{cc} 0 & -2 \\ \lambda \, – \, 2 & 0 \end{array} \right| \\
&= \lambda^{2}(\lambda \, – \, 2) \, – \, 4(\lambda \, – \, 2) \\
&= (\lambda \, – \, 2)(\lambda^{2} \, – \, 4) \\
&= (\lambda \, – \, 2)^{2} (\lambda + 2)
\end{align}
$$

よって行列$B$の固有値は$\lambda=2, -2$である。以下、それぞれの固有値に対して長さ$1$の固有ベクトルを求める。

・$\lambda=2$
長さ$1$の固有ベクトルを$\displaystyle \mathbf{u} = \left( \begin{array}{c} x \\ y \\ z \end{array} \right)$とおくとき、$B \mathbf{u} = 2 \mathbf{u}$より下記が得られる。
$$
\large
\begin{align}
B \mathbf{u} &= 2 \mathbf{u} \\
\left( \begin{array}{ccc} 0 & 0 & 2 \\ 0 & 2 & 0 \\ 2 & 0 & 0 \end{array} \right) \left( \begin{array}{c} x \\ y \\ z \end{array} \right) &= 2 \left( \begin{array}{c} x \\ y \\ z \end{array} \right) \\
\left( \begin{array}{c} z \\ y \\ x \end{array} \right) &= \left( \begin{array}{c} x \\ y \\ z \end{array} \right)
\end{align}
$$

$x=z$かつ$|\mathbf{u}|=1$であるので、$\mathbf{u}$は下記のように表すことができる1
$$
\large
\begin{align}
\mathbf{u} = \left( \begin{array}{c} 0 \\ 1 \\ 0 \end{array} \right), \, \frac{1}{\sqrt{2}} \left( \begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right) \quad (1)
\end{align}
$$

・$\lambda=-2$
長さ$1$の固有ベクトルを$\displaystyle \mathbf{u} = \left( \begin{array}{c} x \\ y \\ z \end{array} \right)$とおくとき、$B \mathbf{u} = -2 \mathbf{u}$より下記が得られる。
$$
\large
\begin{align}
B \mathbf{u} &= -2 \mathbf{u} \\
\left( \begin{array}{ccc} 0 & 0 & 2 \\ 0 & 2 & 0 \\ 2 & 0 & 0 \end{array} \right) \left( \begin{array}{c} x \\ y \\ z \end{array} \right) &= -2 \left( \begin{array}{c} x \\ y \\ z \end{array} \right) \\
\left( \begin{array}{c} z \\ y \\ x \end{array} \right) &= \left( \begin{array}{c} -x \\ -y \\ -z \end{array} \right)
\end{align}
$$

$x=-z$かつ$|\mathbf{u}|=1$であるので、$\mathbf{u}$は下記のように表すことができる。
$$
\large
\begin{align}
\mathbf{u} = \frac{1}{\sqrt{2}} \left( \begin{array}{c} 1 \\ 0 \\ -1 \end{array} \right) \quad (2)
\end{align}
$$

$(1), \, (2)$より$3$本の$1$次独立な固有ベクトルを持つので、$B$は対角化可能である。

行列$C$の対角化

行列$C$の固有多項式$\det{(\lambda I_{3} \, – \, C)}$は下記のように計算することができる。
$$
\large
\begin{align}
\det{(\lambda I_{3} \, – \, C)} &= \left| \begin{array}{ccc} \lambda \, – \, 1 & -1 & 0 \\ 0 & \lambda \, – \, 1 & 0 \\ 0 & 0 & \lambda \, – \, 1 \end{array} \right| \\
&= (\lambda \, – \, 1) \cdot (-1)^{1+1} \left| \begin{array}{cc} \lambda \, – \, 1 & 0 \\ 0 & \lambda \, – \, 1 \end{array} \right| \\
&= (\lambda \, – \, 1)^{3}
\end{align}
$$

よって行列$C$の固有値は$\lambda=1$である。以下、固有値$\lambda=1$に対して長さ$1$の固有ベクトルを求める。

長さ$1$の固有ベクトルを$\displaystyle \mathbf{u} = \left( \begin{array}{c} x \\ y \\ z \end{array} \right)$とおくとき、$C \mathbf{u} = \mathbf{u}$より下記が得られる。
$$
\large
\begin{align}
C \mathbf{u} &= \mathbf{u} \\
\left( \begin{array}{ccc} 1 & 1 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) \left( \begin{array}{c} x \\ \ z \end{array} \right) &= \left( \begin{array}{c} x \\ y \\ z \end{array} \right) \\
\left( \begin{array}{c} x+y \\ y \\ z \end{array} \right) &= \left( \begin{array}{c} x \\ y \\ z \end{array} \right)
\end{align}
$$

上記より$y=0$が得られる。$|\mathbf{u}|=1$であるので、一次独立な$\mathbf{u}$は下記のように表すことができる。
$$
\large
\begin{align}
\mathbf{u} = \left( \begin{array}{c} 1 \\ 0 \\ 0 \end{array} \right), \, \left( \begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right) \quad (3)
\end{align}
$$

$(3)$より、$1$次独立な固有ベクトルは$2$本のみであるので$C$は対角化することができない。

  1. $\lambda=2$が重解であるので、固有ベクトル本数の上限は$2$であることに注意しておくと良いです。 ↩︎

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問5~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

[1] 解答

$\boxed{\mathsf{3}}$ : $③$

$n$ 人からの回答をそれぞれ $X_1, X_2, \dots, X_n$ とする.帰無仮説 $p = 0.4$ の下で,$\displaystyle{\sum_{i = 1}^n X_i}$ は二項分布 $B(n,p) = B(600,0.4)$ に従う.$n=600$ は十分大きいので,$B(600,0.4)$ は正規分布 $N(600 \times 0.4, 600 \times 0.4 \times 0.6$) で近似できる.よって $\dfrac{\sum_{i=1}^{600} X_i}{600} \sim N\left(0.4, \dfrac{0.4 \times 0.6}{600}\right)$ となる.標本支持率 $\hat{p}$ は,$\hat{p} = \dfrac{\sum_{i=1}^{600} X_i}{600}$ であるから,$\hat{p} \sim N\left(0.4, \dfrac{0.4 \times 0.6}{600}\right)$となる.したがって, $\dfrac{\hat{p}- 0.4}{\sqrt{0.4 \times 0.6/600}}$ は標準正規分布 $N(0,1)$ に従う.

標準正規分布の $5\%$ 点は $1.645$ であるから,
$$
P\left( \dfrac{\hat{p}- 0.4}{\sqrt{0.4 \times 0./600}} \geq 1.645 \right) = 0.95
$$
となる.したがって,

$$
\begin{align*}
\dfrac{\hat{p}-0.4}{\sqrt{0.4 \times 0.6/600}} &\geq 1.645 \\
\hat{p} &\geq 1.645 \times \sqrt{0.4 \times 0.6/600} + 0.4 \\
&\approx 0.4329 \\
\end{align*}
$$
となる.

[2] 解答

$\boxed{ \mathsf{4} }$ : ⑤
第二種の過誤の確率を $\beta$ とすると,検出力は $1-\beta$ である.第二種の過誤の確率とは,対立仮説の下で有意と判定されない確率のことであるから,$H_1:p= 0.45$の下で,$P(\hat{p} \geq c)$を求めれば良い.(ただし,$[1]$ で求めた $c = 0.433$ を利用する )
$[1]$ と同様に $\dfrac{\hat{p}-0.45}{\sqrt{0.45 \times 0.55/600}} \sim N(0,1)$ であり,また,
$$
\dfrac{\hat{p} – 0.45}{\sqrt{0.45 \times 0.55/600}} \geq \dfrac{c-0.45}{\sqrt{0.45 \times 0.55/600}} = \dfrac{0.433-0.45}{\sqrt{0.45 \times 0.55/600}} \approx -0.84
$$
であるから,
$$
\hat{p} \geq c \Leftrightarrow \dfrac{\hat{p} – 0.45}{\sqrt{0.45 \times 0.55/600}} \geq -0.84.
$$
ここで標準正規分布表から $0.84$ に対する上側確率は $0.2005$ であるから,
$$
P\left( \dfrac{\hat{p} – 0.45}{\sqrt{0.45 \times 0.55/600}} \geq -0.84 \right) = 1-0.2005 = 0.7995
$$
となる.

[3] 解答

$\boxed{ \mathsf{4} }$ : ⑤
$H_0$ の下での支持率を $p_0=0.4$ ,$H_1$ の下での支持率を $p_1=0.45$ とする.
$H_0$ の下で,$P(\hat{p} \geq c) = 0.05$ かつ $H_1$ の下で,$P(\hat{p} \geq c) = 0.95$ となるような必要最低限のサンプルサイズ $n$ を求める.
$H_0$ の下で $\dfrac{\hat{p}-p_0}{\sqrt{p_0(1-p_0)/n}} \sim N(0,1)$であるから,このとき
$$
\begin{align}
\dfrac{\hat{p}-p_0}{\sqrt{p_0(1-p_0)/n}} \geq 1.645
\end{align}
$$
また,$H_1$ の下でも同様に,$\dfrac{\hat{p}-p_1}{\sqrt{p_1(1-p_1)/n}} \sim N(0,1)$ であるから,
$$
\begin{align}
\dfrac{\hat{p}-p_0}{\sqrt{p_1(1-p_1)/n}} \geq -1.645
\end{align}
$$ である.
これら $2$ つの不等式の左辺は $n$ について単調増加であるから.両式の不等号を等号に置き換えた連立方程式を解けば条件を満たすために最低限必要なサンプルサイズ $n$ が求まる.


$$
\left\{
\begin{align}
&\dfrac{\hat{p}-0.40}{\sqrt{0.40\cdot 0.60/n}} = 1.645 \\
&\dfrac{\hat{p}-0.45}{\sqrt{0.45\cdot0.55/n}} = -1.645
\end{align}
\right.
$$


この $2$ 式から $\hat{p}$ を消去すると,

$$
\begin{align*}
\sqrt{n} &= \dfrac{1.645(\sqrt{0.45\cdot 0.55}) + \sqrt{0.40 \cdot 0.60})}{0.45-0.40} \\
&= 32.48
\end{align*}
$$


したがって,$n\approx 1055$ .

【Julia入門】Juliaの多次元配列③ 多次元配列の演算とブロードキャスティング

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaの多次元配列の演算とブロードキャスティングについて取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

多次元配列の演算

基本的な四則演算

概要
A+B ABの加算
A-B ABの減算
A*B ABの乗算
A*c Acの乗算
A/B ABの除算

実行例

Juliaの多次元配列は下記のように四則演算を行うことが可能です。

using Random
Random.seed!(1)

A = ones(3,3)
B = rand(3,3)

println(A)
println(B)

println(A+B)
println(A-B)
println(A*B)
println(A*2)
println(A/B)

・実行結果

[1.0 1.0 1.0; 1.0 1.0 1.0; 1.0 1.0 1.0]
[0.0491718221481211 0.024094310524527707 0.08725304891274233; 0.11907881640750706 0.6918572875342215 0.8557176841095734; 0.3932710232252806 0.7675180540873912 0.8025607099234905]
[1.049171822148121 1.0240943105245277 1.0872530489127423; 1.119078816407507 1.6918572875342215 1.8557176841095733; 1.3932710232252807 1.7675180540873912 1.8025607099234904]
[0.9508281778518789 0.9759056894754723 0.9127469510872577; 0.8809211835924929 0.3081427124657785 0.14428231589042662; 0.6067289767747194 0.23248194591260885 0.1974392900765095]
[0.5615216617809088 1.4834696521461403 1.7455314429458062; 0.5615216617809088 1.4834696521461403 1.7455314429458062; 0.5615216617809088 1.4834696521461403 1.7455314429458062]
[2.0 2.0 2.0; 2.0 2.0 2.0; 2.0 2.0 2.0]
[2.758973532549559 -1.6396138188639022 2.6942730445076255; 2.758973532549559 -1.6396138188639022 2.6942730445076255; 2.758973532549559 -1.6396138188639022 2.6942730445076255]

ブロードキャスティング

概要

ブロードキャスティングはサイズが異なる配列同士の演算を効率よく実行する仕組みです。ブロードキャスティングを行う際は次項で取り扱うドット演算子を用います。

ドット演算子

概要
A .+ B ABの要素単位の加算
A .+ c Acの加算
A .- c Acの減算
A .* c Acの乗算
A ./ B Acの除算

実行例

ブロードキャスティングを用いた演算は下記のように行うことができます。

A = ones(3,3)
B = 2*ones(3,3)
c = 2.0

println(A + B)
println(A .+ c)
println(A .- c)
println(A .* c)
println(A ./ c)

・実行結果

[3.0 3.0 3.0; 3.0 3.0 3.0; 3.0 3.0 3.0]
[3.0 3.0 3.0; 3.0 3.0 3.0; 3.0 3.0 3.0]
[-1.0 -1.0 -1.0; -1.0 -1.0 -1.0; -1.0 -1.0 -1.0]
[2.0 2.0 2.0; 2.0 2.0 2.0; 2.0 2.0 2.0]
[0.5 0.5 0.5; 0.5 0.5 0.5; 0.5 0.5 0.5]

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

逆三角関数(inverse trigonometric function)の微分の公式の導出

三角関数$\sin, \cos, \tan$の逆関数の$\sin^{-1}, \cos^{-1}, \tan^{-1}$は積分の結果の表記などでよく用いられるので、結果の解釈がしやすいように値に関して具体的に抑えておくと良いです。当記事では逆三角関数の微分の公式の導出に関して取りまとめました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

前提の確認

公式一覧

$$
\large
\begin{align}
(\sin^{-1}{x})’ &= \frac{1}{\sqrt{1-x^2}} \\
(\cos^{-1}{x})’ &= -\frac{1}{\sqrt{1-x^2}} \\
(\tan^{-1}{x})’ &= \frac{1}{1+x^2}
\end{align}
$$

逆関数の微分の公式

逆三角関数の微分の公式の導出にあたっては下記で表した逆関数の微分の公式を用いる。
$$
\large
\begin{align}
\frac{dx}{dy} = \left( \frac{dy}{dx} \right)^{-1}
\end{align}
$$

上記の「微分の定義式」に基づく導出は下記で取り扱った。

公式の導出

$\displaystyle (\sin^{-1}{x})’ = \frac{1}{\sqrt{1-x^2}}$の導出

$y=\sin^{-1}{x}$とおくと、$x=\sin{y}$が成立するので、$\displaystyle \frac{dx}{dy}$は下記のように表せる。
$$
\large
\begin{align}
\frac{dx}{dy} &= \frac{d}{dy} (\sin{y}) \\
&= \cos{y}
\end{align}
$$

したがって、$\displaystyle (\sin^{-1}{x})’ = \frac{dx}{dy}$は下記のように考えることができる。
$$
\large
\begin{align}
(\sin^{-1}{x})’ &= \frac{dx}{dy} = \left( \frac{dy}{dx} \right)^{-1} \\
&= \frac{1}{\cos{y}} = \frac{1}{\sqrt{1-\sin^{2}{y}}} \\
&= \frac{1}{\sqrt{1-x^2}}
\end{align}
$$

上記より$\displaystyle (\sin^{-1}{x})’ = \frac{1}{\sqrt{1-x^2}}$が成立する。

$\displaystyle (\cos^{-1}{x})’ = -\frac{1}{\sqrt{1-x^2}}$の導出

$y=\cos^{-1}{x}$とおくと、$x=\cos{y}$が成立するので、$\displaystyle \frac{dx}{dy}$は下記のように表せる。
$$
\large
\begin{align}
\frac{dx}{dy} &= \frac{d}{dy} (\cos{y}) \\
&= -\sin{y}
\end{align}
$$

したがって、$\displaystyle (\cos^{-1}{x})’ = \frac{dx}{dy}$は下記のように考えることができる。
$$
\large
\begin{align}
(\cos^{-1}{x})’ &= \frac{dx}{dy} = \left( \frac{dy}{dx} \right)^{-1} \\
&= -\frac{1}{\sin{y}} = -\frac{1}{\sqrt{1-\cos^{2}{y}}} \\
&= -\frac{1}{\sqrt{1-x^2}}
\end{align}
$$

上記より$\displaystyle (\cos^{-1}{x})’ = -\frac{1}{\sqrt{1-x^2}}$が成立する。

$\displaystyle (\tan^{-1}{x})’ = \frac{1}{1+x^2}$の導出

下記で取り扱った。

参考

【Julia入門】Juliaの多次元配列② 多次元配列の基本的な操作

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaの多次元配列の基本的な操作について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

多次元配列の基本操作

多次元配列の属性の取得

多次元配列の属性の取得にあたっては下記の関数などを用いることができます。

関数 概要
eltype(A) Aの要素の型
length(A) Aの要素数
ndims(A) Aの次元の数
size(A) Aのサイズ
strides(A) Aのストライド

配列の変更・複製など

配列の複製などを行う際は下記の関数などを用います。

関数 概要
fill!(A, x) 配列Aの値にxを割り当てる
similar(A, T, dims...) 配列Aと類似した配列を生成する
reshape(A, dims...) 配列Aのサイズを変更する
copy(A) 配列Aをコピーする
deepcopy(A) 配列Aをコピーし、要素も再帰的にコピーする

関数の使用例

多次元配列の属性の取得

それぞれの関数は下記のように実行することができます。

A = zeros(Int64,2,3)
println(2)
println(eltype(A))
println(length(A))
println(ndims(A))
println(size(A))
println(strides(A))

・実行結果

2
Int64
6
2
(2, 3)
(1, 2)

配列の変更・複製など

それぞれの関数は下記のように実行することができます。

A = zeros(Int64,2,3)
println(A)

fill!(A,2)
println(A)

println(similar(A, Int8, 1, 6))
println(reshape(A, 1, 6))

X = copy(A)
println(X)

Y = deepcopy(A)
println(Y)

・実行結果

[0 0 0; 0 0 0]
[2 2 2; 2 2 2]
Int8[48 -105 -116 11 1 0]
[2 2 2 2 2 2]
[2 2 2; 2 2 2]
[2 2 2; 2 2 2]

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

Ch.4 「非線形計画」の章末問題の解答例 〜数理計画入門(朝倉書店)〜

当記事では「数理計画入門(朝倉書店)」の読解サポートにあたってChapter.$4$の「非線形計画」の章末問題の解答の作成を行いました。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・解答まとめ
https://www.hello-statisticians.com/answer_textbook_math_optimization#green

章末の演習問題について

問題4.1の解答例

問題4.2の解答例

$$
\large
\begin{align}
f(\mathbf{x}) = 4x_1^2 – 2x_1x_2 + x_2^2 – 10x_1 – 8x_2 – 100
\end{align}
$$

上記の勾配ベクトル$\nabla f(\mathbf{x})$は下記のように計算できる。
$$
\large
\begin{align}
\nabla f(\mathbf{x}) &= \left(\begin{array}{c} \displaystyle \frac{\partial f}{\partial x_1} \\ \displaystyle \frac{\partial f}{\partial x_2} \end{array} \right) \\
&= \left(\begin{array}{c} 8x_1 – 2x_2 – 10 \\ -2x_1 + 2x_2 – 8 \end{array} \right)
\end{align}
$$

同様にヘッセ行列$\nabla^{2} f(\mathbf{x})$は下記のように計算できる。
$$
\large
\begin{align}
\nabla^{2} f(\mathbf{x}) &= \left(\begin{array}{cc} \displaystyle \frac{\partial^2 f}{\partial x_1^2} & \displaystyle \frac{\partial^2 f}{\partial x_1 \partial x_2} \\ \displaystyle \frac{\partial^2 f}{\partial x_2 \partial x_1} & \displaystyle \frac{\partial^2 f}{\partial x_2^2} \end{array} \right) \\
&= \left(\begin{array}{cc} 8 & -2 \\ -2 & 2 \end{array} \right)
\end{align}
$$

問題4.3の解答例

$$
\large
\begin{align}
\mathrm{Objective} : \quad & f(\mathbf{x}) = -x_1^4-x_2^4-x_1x_2+4x_2 \, \rightarrow \, \mathrm{Minimize} \\
\mathrm{Constraint} : \quad & c_1(\mathbf{x}) = x_1^3-x_2 \leq 0 \\
& c_2(\mathbf{x}) = x_1^2+x_2^2-2 \leq 0 \\
& c_3(\mathbf{x}) = -x_1 \leq 0
\end{align}
$$

$[a]$

import numpy as np
import matplotlib.pyplot as plt

r = np.sqrt(2)
theta = np.linspace(0,2*np.pi,100)
x_r = np.arange(0., 1.01, 0.01)

plt.plot(np.arange(-1.2,1.21,0.01), np.arange(-1.2,1.21,0.01)**3, "k--")
plt.plot(r*np.cos(theta),r*np.sin(theta),"k--")
plt.plot(np.arange(-1.7,1.71,0.01)*0, np.arange(-1.7,1.71,0.01), "k--")

plt.fill_between(x_r, x_r**3, np.sqrt(2-x_r**2), color="lightgreen")
plt.scatter([1., 0., 0.], [1., np.sqrt(2), 0.], marker="*", s=500, color="blue")

plt.show()

・実行結果

上図より$\mathbf{a}$〜$\mathbf{c}$が全て実行可能解であることが確認できる。また、有効制約は$\mathbf{a}$が$c_1$と$c_2$、$\mathbf{b}$が$c_2$と$c_3$、$\mathbf{c}$が$c_1$と$c_3$であることも同時に確認できる。

問題4.4の解答例

問題4.5の解答例

問題4.6の解答例

まとめ

【Julia入門】Juliaのコレクション① タプル型オブジェクト

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaのタプル型オブジェクトについて取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

タプル

タプルの生成

タプルは複数の変数などをまとめるオブジェクトで、(1,2,3)のように括弧を用いて下記のように表記します。

t = (1, 2, 3)
println(t)

・実行結果

(1, 2, 3)

タプルの型の確認や要素の取得は下記のように行うことができます。

println(t[1])
println(typeof(t))
println(typeof(t[1]))

・実行結果

1
Tuple{Int64, Int64, Int64}
Int64

タプルでは下記のように値の変更ができないことに注意が必要です。

t = (1,2,3)
t[1] = 2

・実行結果

MethodError: no method matching setindex!(::Tuple{Int64, Int64, Int64}, ::Int64, ::Int64)

タプルの活用

配列のサイズを確認する際に用いるsize関数の出力はタプルであることを確認しておくと良いです。

array = rand(3,2)
println(size(array))
println(typeof(size(array)))

・実行結果

(3, 2)
Tuple{Int64, Int64}

また、関数の可変長引数は下記のようにTuple型のオブジェクトで与えられることも抑えておくと良いです。

f(x...) = x
println(f(1,2,3))
println(typeof(f(1,2,3)))

・実行結果

(1, 2, 3)
Tuple{Int64, Int64, Int64}

名前付きタプル

名前付きタプルは各要素に名前を付けることができるタプルです。名前付きタプルは元々NamedTuples.jlパッケージで開発されていましたが、Julia 0.7から標準ライブラリに組み込まれました。名前付きタプルは下記のように用いることができます。

t = (a=1, b=2, c=3)
println(t)
println(t.a)

・実行結果

(a = 1, b = 2, c = 3)
1

名前付きタプルは下記のように値を取得することもできます。

t = (a=1, b=2, c=3)
println(t[2])
println(t[:c])

・実行結果

2
3

また、名前付きタプルのキーと値は下記のようにkeys関数やvalues関数を用いて取得できることも抑えておくと良いです。

t = (a=1, b=2, c=3)
println(keys(t))
println(values(t))

・実行結果

(:a, :b, :c)
(1, 2, 3)

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

【Julia入門】Juliaの多次元配列① 多次元配列の生成

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaの多次元配列の生成について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

多次元配列の生成

zeros・ones関数を用いた多次元配列の生成

zeros関数を用いることで下記のように多次元配列を生成することができます。

x1 = zeros(2,3)
x2 = zeros(Int64,2,3)
println(x1)
println(typeof(x1))
println("===")
println(x2)
println(typeof(x2))

・実行結果

[0.0 0.0 0.0; 0.0 0.0 0.0]
Matrix{Float64}
===
[0 0 0; 0 0 0]
Matrix{Int64}

同様にones関数を用いることで下記のように多次元配列を生成することができます。

x1 = ones(2,3)
x2 = ones(Int64,2,3)
println(x1)
println(typeof(x1))
println("===")
println(x2)
println(typeof(x2))

・実行結果

[1.0 1.0 1.0; 1.0 1.0 1.0]
Matrix{Float64}
===
[1 1 1; 1 1 1]
Matrix{Int64}

rand・randn関数を用いた多次元配列の生成

一様分布$U(0,1)$に基づく乱数の生成を行うrand関数を用いた配列の生成は下記のように行うことができます。

using Random
Random.seed!(1234)

x1 = rand(5)
x2 = rand(2,3)

println(x1)
println(x2)

・実行結果

[0.32597672886359486, 0.5490511363155669, 0.21858665481883066, 0.8942454282009883, 0.35311164439921205]
[0.39425536741585077 0.7955469475347194 0.7484150218874741; 0.9531246272848422 0.4942498668904206 0.5782319465613976]

上記のRandom.seed!(1234)は値の再現ができるように乱数のseedの固定を行いました。同様に標準正規分布$\mathcal{N}(0,1)$に基づく乱数の生成を行うrandn関数を用いた配列の生成は下記のように行うことができます。

using Random
Random.seed!(1234)

x1 = randn(5)
x2 = randn(2,3)

println(x1)
println(x2)

・実行結果

[-0.3597289068234817, 1.0872084924285859, -0.4195896169388487, 0.7189099374659392, 0.4202471777937789]
[-0.685670902276119 0.3248927294469157 0.46169497427896844; 2.0547630560640364 -0.30490125519643224 -0.8449577163759787]

配列の生成にあたって抑えておくとよい関数

配列の生成にあたって抑えておくと良い関数について下記に取りまとめました。

関数 概要
zeros(T,dims...) 全ての値が0の配列
ones(T,dims...)全ての値が1の配列
rand(T,dims...) それぞれの要素の値が一様分布に基づく配列
randn(T,dims...) それぞれの要素の値が標準正規分布に基づく配列
fill(x,dims...) 全ての値がxの配列

上記のTは型、dimsは配列の次元にそれぞれ対応します。型を表すTを省略する場合はFloat64型が適用されることが多く、同様に配列の次元を表すdimsを省略する場合は0次元のスカラー値に対応するサイズが1×1の配列が生成されます。

print(typeof(zeros()))

・実行結果

Array{Float64, 0}

Juliaの多次元配列の特徴

多次元配列とArray型

Juliaでは多次元配列は基本的にArray{T,N}型で定義されます。Tは要素の型、Nは配列の次元の数にそれぞれ対応します。Vector{T}型やMatrix{T}型も存在する一方でそれぞれArray{T,1}型とArray{T,2}型と同義であることは抑えておくと良いです。

多次元配列のインデックス

Juliaの多次元配列のインデックスは1から始まることに注意が必要です。NumPyでは0から始まるので、Juliaを用いる際に注意が必要です。

column-major order

$$
\large
\begin{align}
A = \left(\begin{array}{ccc} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{array} \right)
\end{align}
$$

上記のような配列を定義する際に、決定する必要があるのが要素を並べる順番です。NumPyの多次元配列は$a_{11} \to a_{12} \to a_{13}$のように行から要素を並べるrow-major orderであるのに対し、Juliaでは$a_{11} \to a_{21} \to a_{31}$のように列から要素を並べるcolumu-major orderであることは抑えておくと良いです。row-major ordercolumu-major orderによって行列が転置されるので、注意が必要です。

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

Ch.1 「数理計画モデル」の章末問題の解答例 〜数理計画入門(朝倉書店)〜

当記事では「数理計画入門(朝倉書店)」の読解サポートにあたってChapter.$1$の「数理計画モデル」の章末問題の解答の作成を行いました。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・解答まとめ
https://www.hello-statisticians.com/answer_textbook_math_optimization#green

章末の演習問題について

問題1.1の解答例

$$
\large
\begin{align}
\mathrm{Objective} : \, & 20x_1 + 30x_2 + 60x_3 \, \to \, \mathrm{Minimize} \\
\mathrm{Constraint} : \, & x_1 + x_2 + x_3 \leq 10 \\
& 2x_1 + 5x_2 + 8x_3 \leq 40 \\
& x_1 \geq 0, \, x_2 \geq 0, \, x_3 \geq 0
\end{align}
$$

・考察
$$
\large
\begin{align}
A &= \left(\begin{array}{ccc} 1 & 1 & 1 \\ 2 & 5 & 8 \end{array} \right) \\
\mathbf{x} &= \left(\begin{array}{c} x_1 \\ x_2 \\ x_3 \end{array} \right) \\
\mathbf{b} &= \left(\begin{array}{c} 10 \\ 40 \end{array} \right) \\
\mathbf{0} &= \left(\begin{array}{c} 0 \\ 0 \\ 0 \end{array} \right)
\end{align}
$$

制約条件は上記のように定義した行列を用いて下記のように表記することもできる。
$$
\large
\begin{align}
A \mathbf{x} & \leq \mathbf{b} \\
\mathbf{x} & \geq \mathbf{0}
\end{align}
$$

問題1.2の解答例

問題1.3の解答例

問題1.4の解答例

問題1.5の解答例

まとめ

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問4~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

[1] 解答

$\boxed{ \ \mathsf{1}\ }$ : $②$

$\dfrac{T^2_B}{\sigma^2_B}$ は自由度 $15$ の$\chi ^2$ 分布に従う.$\chi^2_{0.025} = 27.49$,$\chi^2_{0.975} = 6.26$ であるから
$$
P\left(6.26 \leq \dfrac{T^2_B}{\sigma^2 _B} \leq 27.49\right) = 0.95
$$
が成り立つ.従って, $\sigma^2_B$ の$95\%$ 信頼区間は,
$$
\left[ \dfrac{T^2_B}{27.49}, \dfrac{T^2_B}{6.26}\right] = \left[ 3.27, 14.38\right]
$$
となる.

参考

[2] 解答

$\boxed{ \ \mathsf{2}\ }$ : ①
$$
H_0: \sigma^2_A = \sigma^2_B \quad \text{vs} \quad H_1: \sigma^2_A > \sigma^2_B
$$
であるような有意水準 $5\%$ の片側検定を考える.
$\dfrac{T^2_A}{\sigma^2_A}\sim \chi^2(15)$,$\dfrac{T^2_B}{\sigma^2_B}\sim \chi^2(15)$ であるから,帰無仮説 $H_0$ が正しいとき,$F = \dfrac{T^2_A}{T^2_B} = \dfrac{T^2_A/\sigma^2_A}{T^2_B/\sigma^2_B} \sim F(15,15)$ である.
$F(15,15)$ の上側 $5\%$ 点は$2.403$ であり,$F$ 統計量は$F = \dfrac{T^2_A}{T^2_B}= \dfrac{180}{90} = 2.0$ である.
$F = 2.0 < 2.403 = F_{0.95}(15,15)$ となるので,帰無仮説は棄却できない.