2013 年度 知能情報処理演習 1
R による科学技術計算
D1 クラス担当:北野
1D2 クラス担当:谷口
2平成 25 年 5 月 15 日
1kitano@ci.ritsumei.ac.jp
2taniguchi@ci.ritsumei.ac.jp
第 7 週 R の基礎 その 1
Rの基礎的な使い方を練習する。マニュアル的な内容はここでは記載しないので、関連 資料12を参考にすること。また本演習のサポートサイト3も参照のこと。
コンソール環境
コンソールでは、プロンプトに関数(コマンド)を呼び出して実行したり、演算を行う ことができる。
課題1 起動時に表示される関数demo()やhelp()を実行せよ。
課題2 四則演算、累乗、剰余、数学関数(sin(x)など)の演算を実行せよ。
オブジェクトと代入
Rでは、数値、配列、関数など処理の対象を格納するものをオブジェクトと呼ぶ。オブ ジェクトに代入を実行することで、オブジェクトを生成することができる(Cで変数の宣 言と初期化を同時に行うのと同様)。また、オブジェクトに対し演算処理を施すことも出 来る。
課題3 オブジェクトxを数値、文字、NULL(空=何もなし)で初期化せよ。 課題4 初期化したxに対し、課題2で行った演算を実行せよ。
ベクトル
Rでは、複数のデータをひとまとまりのベクトルとして扱うことができる。Cにおける 1次元配列まるごとが1つのベクトルに対応する。上で扱った要素が1つのデータ(Cに おける変数)は、1次元のベクトルと考える。
課題5 ベクトルデータを生成する関数c()を用いて、オブジェクトxをベクトルとして 初期化せよ(要素数はいくつでもよい)。
課題6 初期化したベクトルxに対し、課題2で行った演算を実行し、その結果を確認せよ。
1RjpWiki: http://www.okada.jp.org/RWiki
2
上記サイトのリンク集からレベル別に応じた様々な資料を辿ることができる。
3https://sites.google.com/site/ciexercise/
ファイルへの保存とファイルからの実行
プログラムをコンソールのプロンプトに入力して実行するだけでなく、テキストファイ ルに編集して保存し、ファイルから実行することも出来る。
課題7 下の手順に従い、ファイルへの保存とファイルからの実行を確かめよ。
1. 「ファイル」メニューから「新しいスクリプト」を選択し、エディタを起動。 2. エディタでプログラムを編集。
3. 「ファイル」メニューでファイルに保存(例えば、ファイル名を”program.R”)。 4. コンソールのプロンプトでsource("C:/program.R")4として、ファイルから
実行。
4
作業ディレクトリに注意すること。
第 8 週 R の基礎 その 2
制御構造、関数、グラフ作成の方法について練習を行う。
処理の制御
条件分岐(if-else文、switch文)や反復(for文)などの制御文を用いて、また、頻 繁に用いる処理は新しい関数を定義して、プログラムの制御を行える。
課題1 if-else文を用い、適当な整数値を与えられたオブジェクトxが、奇数の場合に
はxの2乗を、偶数の場合にはxの2倍を計算する処理を実行せよ。 課題2 for文を用いて、
∑1000
n=1 n1 を計算するプログラムを作成せよ。
課題3 引数xを2乗する関数square(x)を定義し、実行するプログラムを書け。
グラフ作成
Rではグラフ作成ツールも充実しており、様々なグラフを簡単に作成できる。
課題4 ベクトルデータxを上で作成した関数square()に適用し、オブジェクトyに代入 せよ。得られたx、y座標を関数plotを用いてグラフにせよ。
課題5 数学関数cos(x)を[−2π, 2π]の範囲で図示せよ。
第 9 週 行列と連立方程式
行列の操作、演算および連立方程式の解について練習する。
行列の作成と操作
課題1 ベクトルデータx = (1, 2, 3, 4, 5, 6)を作成し、関数matrix()を用いて、 2 × 3行列、3 × 2行列を作成せよ。
課題2 正方行列を2つ作成し、それらの和、差、積、スカラー積(これらは演算子に注 意)、を求めよ。
課題3 上で作成した行列に対し、行列式、転置行列、逆行列を求めよ。
課題4 関数eigen()を用いて、固有値・固有ベクトルを求めよ。関数eigen()は、固有
値と固有ベクトルの2つの要素(ベクトル)をリスト5として返す。リスト内の複数 のベクトルのうち、1つを取り出すには、その名前=ラベルを指定すればよい。例え ば、固有値の場合、固有値に付けられたラベル$valuesを用い、
> y <- eigen(x)
> y$values
とする。
課題5 正方行列Aを作成し、その固有ベクトルを並べてできる行列PとP−1を求め、行 列Aの対角化P−1APを行え。
連立方程式の解法
Aを行列、x、bをベクトルとする時、Ax = bの形に表される連立方程式の解xは、R に用意された関数で簡単に求めることが出来る。
課題6 行列A、ベクトルbを定め、関数solve()を用いて解を求めよ。
52つ以上のベクトル一纏めにしたもの
第 10 週 回帰分析
測定データなどの数値の組の間の関係性をモデル式に当てはめて理解することを回帰分 析という。モデル式=回帰式は、実データと回帰式の間の誤差が出来る限り小さくなるよ うに決定する。誤差を二乗誤差で定義する場合、この回帰式決定の方法として最小二乗法 が用いられる。
線形回帰分析と最小二乗法
データの組(xi, yi)(i = 1, 2, · · · , n)に対し、モデル式y = f (x) = ax + bでxiとyiの関 係が説明できるか6を検討するために、f (xi)とyiの差が出来る限り小さくなるように係 数aとbを求めたい。今、
G =
1 x1
1 x2 ... ... 1 xn
, a= (b, a)T, y= (y1, y2, · · · , yn)T (1)
と定義し、f (xi)とyiの差を二乗誤差J = (y − Ga)T(y − Ga)で定め、Jを最小にするよ うな係数を求める。Jをaの関数J(a)と見れば、J(a)が最小になるのは、∂J
∂a = 0を満た
す時である(Jをaの各成分で偏微分したものが0)。これをみたすaは、GTGa = GTy と表される(GTGに逆行列が存在すれば、a= (GTG)−1GTyと書ける)。a、bは、成分 表示すると、
a = n
∑n
i=1xiyi−∑ni=1xi∑ni=1yi
n∑ni=1x2i − (∑ni=1xi)2 (2) b =
∑n
i=1x2i
∑n
i=1yi−∑ni=1xiyi
∑n
i=1xi
n∑ni=1x2i − (∑ni=1xi)2 (3) (4) と表せる(簡単な計算なので導出してみるとよい)。
組み込みデータセット
• 組み込みデータセット一覧の表示: data()
• 個々のデータセットの表示: "データセット名"(例えばcars)
演習課題
課題1 データセットcarsは、自動車の速度speedとその速度でブレーキをかけた場合の 停止するまでの距離distの組を表すデータである(サンプル数50)。このデータ セットについて、speedをx、distをyとして、まず散布図を作成せよ。次に回帰 式を求め、その回帰直線をデータの散布図に重ねて表示せよ。
6
より正確には、xiでyiを説明できるか
課題2 データセットanscombeは複数の組を格納したデータセットである。例えば、x1と y1、x2とy2が対応している。まず、対応する系列の組の散布図を作成せよ。次に、 それぞれの組に対し回帰式を求め、回帰直線をデータともに図示してみよ。さらに 4つ組で比較してみよ。
課題3 適当なデータセットを選び、回帰分析を行え(回帰分析に適さないデータもある ことに注意)。
第 11 週 非線形方程式の解法
非線形関数(xの1次式で表せない関数)f (x)に対し、非線形方程式f (x) = 0を満た す解α(f (α) = 0)を数値的に求める問題扱う。
ニュートン法
非線形方程式の代表的な解法であるニュートン法は以下の手続きで反復的に解を求める 方法である。f (x) = 0の真の解αの正確な値は分かっていないが、αに近い値x0は分かっ ているとする。このx0を初期値とし、n回目の反復により得られるαに対するよりよい 近似解をxnとするとき、n + 1回目の近似解は次のように与えられる。
xn+1 = xn―f (xn)
f′(xn) (5)
ここで、f′(xn)はf (x)のxについての導関数にxnを代入したものである。これは、近似 解xnが与えられているとき、
1. x = xnにおけるy = f (x)の接線の方程式y = f′(xn)(x―xn) + f (xn)を求め、 2. この接線とy = 0との交点xn−ff (x′(xn)
n) を得、
3. この求めた交点を次の近似解とする、
として理解できる。具体例を図に示す。ここではf (x) = x3−3
2x2−32x + 1、初期値x0 = 1
としている。反復により、x1 = 1
3, x2 = 11759,と真の解 12に近づいて行くことがわかる。
-1.5 -1 -0.5 0 0.5 1 1.5
-0.5 0 0.5 1 1.5 2 2.5
y = x3 –(3/2)x2 –(3/2)x +1 y = –(3/2)x +1/2 y = –(13/6)x +59/54
x0 = 1 x1 = 1/3
x2 = 59/117
図 1: ニュートン法の具体例
反復の停止条件はϵを十分に小さな値(10−6など)とし
• |xn+1− xn| < ϵ
• |xn+1xn−xn| < ϵ
• |f(xn)| < ϵ
など適当なものを設定する。注意すべきは、方程式f (x) = 0が2つ以上の解を持つ場合 でも、1つの初期値から始める反復では、1つの数値解しか得ることができない。
ニュートン法のアルゴリズム
1. 適当な初期値x0を選ぶ。ϵを十分小さな正の値とし、停止条件を設定する。 2. 上式(5)によりxnからxn+1を求める。
3. 停止条件を満たせば終了、そうでなければnをインクリメントして2へ。
演習課題
課題1 ニュートン法を実行するプログラムを作成せよ(解の系列を表示するように作成す ること)。また、そのプログラムを用いて、f (x) = x3−3
2x2−32x + 1とし、f (x) = 0
の解を求めよ。
課題2 f (x) = e−x+ x2− 6xとし、f (x) = 0の数値解を求めよ。 課題3 f (x) = xe−x/2− e−xとし、f (x) = 0の数値解を求めよ。
第 12 週 微分方程式の解法
未知の変数xが満たす関係式は方程式と呼ばれ、その方程式を解くことで変数xの値を 求めることができた。未知の関数y(x)およびその導関数(y′, y′′, · · ·)が満たす関係式は 微分方程式と呼ばれ、これを解くことで関数y(x)を決定することができる。常微分方程 式を数値的に解く方法を扱う。
オイラー法
変数xの関数yについての微分方程式と初期条件 dy
dx = y
′= f (x, y), y(a) = A (6)
を代表的な数値的解法であるオイラー法で解く手順は以下の通りである。
y(x)の解を仮定し(まだ得られていないので)、任意のxのまわりでテイラー展開す ると、
y(x + ∆x) = y(x) + y′(x)∆x +1 2y
′′(x)(∆x)2+1
6y
′′′(x)(∆x)3+ · · · (7)
と書ける。元の問題(6)は連続値で表されているるが、計算機で扱う場合には、離散化し て扱わなければならない。∆xは変数xを離散化した時の間隔(=刻み幅、分点間隔)であ る。つまり、変数xを分点間隔∆xで離散化した場合のi番目の分点xiは、xi= a + i∆x と書ける。また、xiにおけるy(xi)の“ 数値解 ” は通常誤差を含むので、真の値y(xi)と 区別してYiと書くことにする。
∆xが十分に小さいとすると、式(7)において、
• 右辺第3項以降は、第1、2項に比べ無視出来るほどに小さくなるので無視、
• 式(6)より、y′ = f (x, y)を右辺第2項に代入、
• x = xiとすると、x + ∆x = xi+1、
となることから、式(6)の微分方程式は、
Yi+1= Yi+ ∆xf (xi, Yi) (8)
と表すことができる。式(8)を用い、x0 = a、Y0 = y(x0) = y(a) = Aを初期値として、逐 次Yiを求めていけば良い。
オイラー法を微分方程式とその初期条件dy/dx = y, y(0) = 1に適用した例を示す。 この微分方程式は解析的に解くことができ、y = exがその解である(普通は解析解はわか らないことが多い)。図の実線が解析解、点列が数値解Yiを表している。誤差を含んだYi を用いてYi+1を計算するので、iが増加するにつれexiとYiの誤差が大きくなっていくこ とがわかる。なるべく誤差を小さくするには∆xを小さくとればよい。
1 1.5 2 2.5 3
0 0.2 0.4 0.6 0.8 1
y
x
dy/dx = y (y = e-x)
(x1, Y1) = (0.2, 1.2)
(x2, Y2) = (0.4, 1.44)
(x3, Y3) = (0.6, 1.728) (x0, Y0) = (0, 1), Δx = 0.2
図2: オイラー法の具体例
オイラー法のアルゴリズム
1. i = 0、x0 = a、Y0 = Aと初期化、反復回数Nと∆xを定める。 2. xi+1= xi + ∆x、Yi+1= Yi+ ∆xf (xi, Yi)を計算
3. iをインクリメントしi = Nならば終了、そうでなければ2へ。
演習課題
課題1 オイラー法を実行するプログラムを作成せよ。さらに、微分方程式
dy
dx = yを初期
条件y(0) = 1とし、0 ≤ x ≤ 1の範囲で解を求めよ。また、刻み幅∆xを変え、解 析解y = exとの誤差を比較せよ(グラフを作成するとよい)。
課題2 微分方程式dy/dx = y(1 − ky), y(0) = 0.1について、定数kを適当に設定して 解を求めよ。また、数値解をグラフにし、y(x)の特徴について考察せよ。
課題3 微分方程式dy/dx = −y + cos x, y(0) = 0について、定数kを適当に設定して解 を求めよ。また、数値解をグラフにし、y(x)の特徴について考察せよ。
第 13 週 乱数を用いる計算 ーモンテカルロ法ー
計算機で生成する疑似乱数(以下、単に乱数と呼ぶ)を用いることで様々な計算、シミュ レーションを行うことができる。乱数を利用する計算アルゴリズムはモンテカルロ法と呼 ばれ、その代表的な計算をいくつか扱う。
数値積分
2次元平面において面積を求めたい領域S、領域Sを含む正方形の領域を領域Aを考え る。領域A内に生成した一様乱数の個数をNA、そのうち領域S内に含まれたものの個数 をNSとする。領域Aの面積Aと領域Sの面積Sの比A : Sは、NA: NSに近似する。こ れを利用して、半径1の円の面積あるいは円周率πの近似値を求めることができる。
1. xy平面において、(0, 0)、(1, 0)、(1, 1)、(0, 1)を頂点とする正方形Aと原点を中 心とする半径1の円の第1象限にある1/4円を領域Sを定める。
2. rxとryは互いに独立な[0, 1]の範囲の一様乱数とし、これらを用いてランダムな点 (rx, ry)をNA個生成する。
3. このうち、領域S内に入る点(rx2+ r2y ≤ 1を満たす点)の個数NSをカウントする。 4. 面積SはNS/NA、円周率は4NS/NAで求めることができる。
任意の確率分布に従う乱数の生成:棄却法
一様分布や正規分布など標準的な確率分布ではない任意の確率分布に従う乱数の生成は、 次の関数を用意する。
• p(x):生成したい乱数が従う確率密度関数(数式で記述出来るものはもちろん、数
値的にしか表現できないものでも可)
• q(x):乱数の生成が簡単な確率密度関数(一様分布、正規分布など)
• k:定義域において p(x) ≤ kq(x)が成り立つ定数 これらを用い、1個の乱数を生成する実行手順は以下の通り。
1. q(x)に従い、乱数xを生成。
2. [0, kq(x)]の範囲で一様乱数uを生成。
3. u ≤ p(x)ならxを採択(乱数として使用)、そうでなければ棄却(使用しない)。
p(x)としてp(x) = (x2 − x + 14)/Z(ただし、定義域は[0, 1];Z は規格化定数、Z =
∫1
0(x2− x +14)dx)、q(x)として一様分布、k = 1/4とした例を示す。
Histogram of sample
sample
Frequency
0.0 0.2 0.4 0.6 0.8 1.0
01000200030004000
図3: p(x) = (x2− x +14)/Zに従う乱数のヒストグラム
演習課題
課題1 モンテカルロ法による数値積分の方法で、円周率πの近似値を求めよ。乱数の個 数を変えた場合に、近似値がどのようになるか確かめよ。
課題2 モンテカルロ法による数値積分の方法で、x
2
a2 + y2 b2 +z
2
c2 ≤ 1(a、b、cは正の数)を
満たす領域の体積を求めよ。a、b、cは各自で設定すること。
課題3 棄却法を用いて、p(x) = x(1 − x)/Z, (0 ≤ x ≤ 1)を確率密度関数とする乱数を 生成し、そのヒストグラムを作成せよ。
第 14 週 検定
データの統計的性質に関する仮説の確からしさを定量的に確かめる仮説検定について、 実際にデータを扱うことにより、その考え方を理解する。
仮説検定
観測対象(母集団)の統計的性質について立てた予想(仮説H)に対し、その観測対象 から実際に得られたデータの集合(標本)が予想から著しく離れた場合、その予想の正し さを疑うことになる。この「著しく」を定量的に評価し、予想の正しさを見積もることが 仮説検定である。
コイントスにより得られる、表、裏それぞれの確率をp、1 − pとするとき、そのコイ ンが公正(=表裏の確率が同じ)かどうかについての検定を行う。そのため、コイントス を100回行い、表60回、裏40回の結果を得た。
• 仮説H0は、コインの表が出る確率はp = 1/2である。
• コイントスで表が出る回数yは確率変数であり、仮説H0に従う場合、その確率分布 は二項分布B(100, 1/2)で表すことができる。(ただし、B(n, p) =nCkpk(1 − p)n−k)
• 二項分布B(n, p)はnpが十分大きいとき、ガウス分布N (np, np(1 − p))で近似でき る。つまり、仮説H0の下でy ∼ N(50, 25)である。
• ˆp = y/nと定義すると、p ∼ N(p, p(1 − p)/n)ˆ 。あるいは、Z = (ˆp − p)/√p(1 − p)/n とすると、Z ∼ N(0, 1)。
• コイントスの結果から、Z = 2。この値が起こる確率は0.05以下、つまり、確率0.05 以下の稀な現象が起こった(仮説H0の下では通常起こりえない)。生じた事実(コイ ントスの結果)は覆すようがないので、仮説H0が誤り(有意水準0.05の時)。よっ て仮説H0は棄却。
課題1 適当な値のpを設定し、コイントスをシミュレートして、仮説検定を行え。
標本平均の分布
X ∼ N(µ, σ2)とする。この確率分布からn個サンプルした標本データX1, X2, · · · , Xn の平均(標本平均)X =¯ 1
n
∑n
i=1Xi、分散7v2 = n−11 ∑ni=1(Xi− ¯X)2も確率変数である。 nが十分大きければ、v ∼ σであり、X ∼ N(µ, σ¯ 2/n)となる。あるいはt = √X−µ¯
v2/nに対
し、t ∼ N(0, 1)となる。
課題2 X ∼ N(µ, σ2)とする。この確率分布からn個サンプルした標本データX1, X2, · · · , Xn
の平均(標本平均)X =¯ 1
n
∑n
i=1Xi、分散8v2 = n−11 ∑ni=1(Xi− ¯X)2も確率変数で
7
不偏分散
8
不偏分散
ある。nが十 分大きけ れば、v ∼ σであ り、X ∼ N(µ, σ¯ 2/n)とな る。あるい は t = √X−µ¯
v2/nに対し、t ∼ N(0, 1)。サンプリングを繰り返してtの分布をヒストグラム に表せ。nの値を変え、特にnが小さい場合(1桁の値)に、ヒストグラムとN (0, 1) を比較せよ。
t 検定
標本に対し、その母平均µについての検定を行う場合、通常その分散(母分散)σ2につ いては未知である場合がほとんどである。標本の数nが十分多ければ、標本から求めた分 散(不偏分散)vをσと見なしても問題ない。しかし、課題2で見たように、nが小さい 場合には、tは標準正規分布N (0, 1)からずれることがわかる。つまり、
X−µ¯
√σ2/n ̸= X−µ¯
√v2/n。
この場合、標準正規分布ではなく、t =
X−µ¯
√v2/n が従う分布(スチューデントのt分布と呼 ぶ)を用いて検定しなければならない。t分布を用いた検定をt検定(検定すべきは母平 均µ)と呼ぶ9。
課題3 サポートサイト10からテキストファイル”t-test.dat”をダウンロードし、格納さ れたデータの母平均について検定せよ。ファイルからの読み込みには
x <- read.table("ファイルへのパス/ファイル名")
として、xにリストとして格納することができる。
9t分布の形、t検定のより詳細な内容については、3回生開講の「統計データ解析」にて学ぶ。
10https://sites.google.com/site/ciexercise/
発展課題 1
サポートサイトに掲載された課題のうち1つを選び、実施せよ。
発展課題 2
本演習で扱った手法(あるいはその発展的手法でも可)を用いて、各自で用意したデー タ、あるいはテーマについて解析し、考察せよ。