ブログ

【Julia入門】Juliaの多次元配列⑤ サブ配列(subarray)

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

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

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

サブ配列の概要

概要

サブ配列(subarray)は配列の一部を表すオブジェクトです。view関数を用いることで配列からサブ配列を作成することができます。

サブ配列の使用例

サブ配列はview関数を用いて下記のように作成することができます。

using Random
Random.seed!(0)

X = rand(3,3)

println(X)
println(view(X, 1:2, 1))
println(view(X, 1:2, 1:2))

・実行結果

[0.4552384158732863 0.9405848223512736 0.7468008914093891; 0.5476424498276177 0.02964765308691042 0.9766699015845924; 0.7733535276924052 0.74694291453392 0.08694684883050086]
[0.4552384158732863, 0.5476424498276177]
[0.4552384158732863 0.9405848223512736; 0.5476424498276177 0.02964765308691042]

参考

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

【Julia入門】Juliaの多次元配列④ map、reduce、filterを用いた操作

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

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

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

map・reduce・filterの概要

配列の各要素に関数を使用した値の変換や集約、フィルタリングにあたってはそれぞれmapreducefilterが有用です。

使用例

map

mapは配列の各要素に関数を適用して値を変換する際などに用いられる関数です。下記のように実行することができます。

using Random
Random.seed!(1)

X = randn(2,2)

println(X)
println(map(x -> x+2.0, X))
println(map(x-> x*2.0-3.0, X))

・実行結果

[-0.07058313895389791 -0.806852326006714; 0.5314767537831963 2.456991333983293]
[1.929416861046102 1.193147673993286; 2.5314767537831964 4.456991333983293]
[-3.141166277907796 -4.613704652013428; -1.9370464924336075 1.913982667966586]

reduce

reduceは配列の要約などに用いられる関数です。下記のように実行することができます。

using Random
Random.seed!(1)

X = randn(5,5)

println(X)
println(reduce(+,X))
println(reduce(+,X)/25.0)

・実行結果

[0.06193274031408013 -1.5765649225859841 0.21787878613277867 -1.5242735305753605 -0.5841980481085709; 0.2784058141640002 0.1759399913010747 -0.6559505611509957 -0.7829327668434358 -0.29942199646186524; -0.5958244153640522 0.8653808054093252 0.26751404691066 -0.5370139742021761 -2.3830630673003137; 0.04665938957338174 -2.790281005549307 0.0073860677115008865 -2.0074061601841917 -1.0026135242092884; 1.0857940215432762 -1.8920155582259128 1.0607244834908975 0.16218731766404215 0.972024394360624]
-11.429731672185813
-0.4571892668874325

filter

filterはフィルタリングなどに用いられる関数です。下記のように実行することができます。

using Random
Random.seed!(0)

X = randn(5,5)

println(X)
println(filter(x -> x > 1, X))

・実行結果

[-0.23190906957695134 1.1722448627021573 -0.26988492037793593 0.13457571047366457 -1.0745769949749375; 0.940390210248594 -1.696813019281842 0.5780036022342506 0.16554255091922548 -1.3819748518823003; 0.5967616711335215 -2.1161459685604527 1.1603442420756227 -1.0720974154467635 0.9518527642027133; 1.9978240930577937 0.5583656057835097 0.28788799558526296 -1.2601642953877346 -0.2922912657969977; -0.05156184220322609 -0.8647295755028067 -0.44119282303422414 0.196408003082906 0.23759838081412232]
[1.9978240930577937, 1.1722448627021573, 1.1603442420756227]

参考

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

Python・matplotlib-vennを用いたベン図(Venn diagrams)の描画

集合と要素や集合に基づいて必要条件・十分条件・必要十分条件などを取り扱う際に用いると良いのがベン図(Venn diagrams)です。当記事ではPythonを用いてベン図を描画するにあたって、matplotlib-vennの用法などの取りまとめを行いました。

・プログラミングまとめ
https://www.hello-statisticians.com/program

matplotlib-vennライブラリ

matplotlib-vennの概要

matplotlib-vennmatplotlibを用いて事象が2もしくは3のベン図の描画を行うにあたっての関数を実装したライブラリです。

matplotlib-vennのインストール

下記を実行することでmatplotlib-vennのインストールを行うことが可能です。

> pip install matplotlib-venn

matplotlib-vennの主な関数

matplotlib-vennの主な関数はvenn2venn2_circlesvenn3venn3_circles4つでそれぞれ下記のような描画を行うことができます。

関数 概要
venn22つの事象に基づくベン図を作成する
venn2_circles2つの事象に基づく色・ラベルのないベン図を作成する
venn33つの事象に基づくベン図を作成する
venn3_circles3つの事象に基づく色・ラベルのないベン図を作成する

ベン図の描画

基本的な実行例

PyPIのドキュメントでは下記のような実行例が紹介されています。

from matplotlib import pyplot as plt
from matplotlib_venn import venn2, venn2_circles, venn3, venn3_circles

figure, axes = plt.subplots(2, 2)
venn2(subsets={'10': 1, '01': 1, '11': 1}, set_labels = ('A', 'B'), ax=axes[0][0])
venn2_circles((1, 2, 3), ax=axes[0][1])
venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C'), ax=axes[1][0])
venn3_circles({'001': 10, '100': 20, '010': 21, '110': 13, '011': 14}, ax=axes[1][1])

plt.show()

・実行結果

上記より、venn2venn2_circlesvenn3venn3_circlesの主な4つの関数の出力結果が確認できます。

以下では、venn2関数について確認します。

from matplotlib import pyplot as plt
from matplotlib_venn import venn2

venn2(subsets = (3, 2, 1))

plt.show()

・実行結果

上図では引数のsubsetsでそれぞれの領域の大きさを指定しましたが、下記のようにset関数を元に集合を引数に与えることも可能です。

from matplotlib import pyplot as plt
from matplotlib_venn import venn2

venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])])

plt.show()

・実行結果

和集合の描画

和集合は下記のように描画を行うことができます。

from matplotlib import pyplot as plt
from matplotlib_venn import venn2

v = venn2(subsets = (1, 1, 1))

v.get_patch_by_id('10').set_color('limegreen')
v.get_patch_by_id('11').set_color('limegreen')
v.get_patch_by_id('01').set_color('limegreen')

v.get_patch_by_id('01').set_alpha(1.0)
v.get_patch_by_id('11').set_alpha(1.0)
v.get_patch_by_id('10').set_alpha(1.0)

v.get_patch_by_id('11').set_edgecolor('white')

v.get_label_by_id('10').set_text('')
v.get_label_by_id('11').set_text('')
v.get_label_by_id('01').set_text('')

plt.title("Union of two sets")
plt.show()

・実行結果

積集合の描画

積集合は下記のように描画を行うことができます。

from matplotlib import pyplot as plt
from matplotlib_venn import venn2

v = venn2(subsets = (1, 1, 1))

v.get_patch_by_id('10').set_color('limegreen')
v.get_patch_by_id('11').set_color('limegreen')
v.get_patch_by_id('01').set_color('limegreen')

v.get_patch_by_id('10').set_alpha(0.1)
v.get_patch_by_id('11').set_alpha(1.0)
v.get_patch_by_id('01').set_alpha(0.1)

v.get_label_by_id('10').set_text('')
v.get_label_by_id('11').set_text('')
v.get_label_by_id('01').set_text('')

plt.show()

・実行結果

参考

https://pypi.org/project/matplotlib-venn/
https://github.com/konstantint/matplotlib-venn

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

過去問

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

解説

[1] 解答

$\boxed{\mathsf{6}}$ : $①$

データの個数を $n$ ,説明変数の個数を $p$ とすると,自由度調整済み決定係数 $\bar{R^2}$ は,
$\bar{R^2} = 1-\dfrac{n-1}{n-p-1}(1-R^2)$ と表されるので, $\bar{R^2} = 1-\dfrac{21-1}{21-1-1}(1-0.0372) = -0.01347$
となる.

[2] 解答

$\boxed{\mathsf{7}}$ : $⑤$

ダービン・ワトソン統計量 $DW$ と自己相関係数 $\hat{\rho}$ には,$DW \approx 2(1-\hat{\rho})$ の関係がある.いま,$DW = 2.98$ より,$\rho \approx -0.49$ .
このことから,強い負の相関があることがわかる.(強い)負の相関があるとき残差は上下に(激しく)動く.(なぜなら,$1$ つ前が大きいときにはその次のときは小さくなり,逆に1つ前が小さいときは次のときに大きくなる)

したがって,⑤である.

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の解答例

まとめ