Microsoft Word - Matlab_R_MLE.docx

Similar documents
様々なミクロ計量モデル†

> usdata01 と打ち込んでエンター キーを押すと V1 V2 V : : : : のように表示され 読み込まれていることがわかる ここで V1, V2, V3 は R が列のデータに自 動的につけた変数名である ( variable

Probit , Mixed logit

dae opixrae 1 Feb Mar Apr May Jun と表示される 今 必要なのは opixrae のデータだけなので > opixrae=opixdaa$opi

切片 ( 定数項 ) ダミー 以下の単回帰モデルを考えよう これは賃金と就業年数の関係を分析している : ( 賃金関数 ) ここで Y i = α + β X i + u i, i =1,, n, u i ~ i.i.d. N(0, σ 2 ) Y i : 賃金の対数値, X i : 就業年数. (

Microsoft Word - 補論3.2

まず y t を定数項だけに回帰する > levelmod = lm(topixrate~1) 次にこの出力を使って先ほどのレジームスイッチングモデルを推定する 以下のように入力する > levelswmod = msmfit(levelmod,k=,p=0,sw=c(t,t)) ここで k はレジ

Microsoft Word - Time Series Basic - Modeling.doc

ファイナンスのための数学基礎 第1回 オリエンテーション、ベクトル

第 3 回講義の項目と概要 統計的手法入門 : 品質のばらつきを解析する 平均と標準偏差 (P30) a) データは平均を見ただけではわからない 平均が同じだからといって 同一視してはいけない b) データのばらつきを示す 標準偏差 にも注目しよう c) 平均

Microsoft Word - å“Ÿåłžå¸°173.docx

基礎統計

分析のステップ Step 1: Y( 目的変数 ) に対する値の順序を確認 Step 2: モデルのあてはめ を実行 適切なモデルの指定 Step 3: オプションを指定し オッズ比とその信頼区間を表示 以下 このステップに沿って JMP の操作をご説明します Step 1: Y( 目的変数 ) の

講義「○○○○」

データ解析

日心TWS

第4回

森林水文 水資源学 2 2. 水文統計 豪雨があった時, 新聞やテレビのニュースで 50 年に一度の大雨だった などと報告されることがある. 今争点となっている川辺川ダムは,80 年に 1 回の洪水を想定して治水計画が立てられている. 畑地かんがいでは,10 年に 1 回の渇水を対象として計画が立て

memo

NLMIXED プロシジャを用いた生存時間解析 伊藤要二アストラゼネカ株式会社臨床統計 プログラミング グループグルプ Survival analysis using PROC NLMIXED Yohji Itoh Clinical Statistics & Programming Group, A

プログラミング実習I

統計学的画像再構成法である

Microsoft PowerPoint - 基礎・経済統計6.ppt

<4D F736F F D208EC08CB18C7689E68A E F AA957A82C682948C9F92E82E646F63>

多変量解析 ~ 重回帰分析 ~ 2006 年 4 月 21 日 ( 金 ) 南慶典

数値計算法

<4D F736F F D208EC08CB18C7689E68A E F193F18D8095AA957A C C839395AA957A814590B38B4B95AA957A2E646F63>

PowerPoint Presentation

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

2011年度 大阪大・理系数学

カイ二乗フィット検定、パラメータの誤差

0 部分的最小二乗回帰 Partial Least Squares Regression PLS 明治大学理 学部応用化学科 データ化学 学研究室 弘昌

1

Si 知識情報処理

ビジネス統計 統計基礎とエクセル分析 正誤表

Microsoft PowerPoint - mp11-02.pptx

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

航空機の運動方程式

Kumamoto University Center for Multimedia and Information Technologies Lab. 熊本大学アプリケーション実験 ~ 実環境における無線 LAN 受信電波強度を用いた位置推定手法の検討 ~ InKIAI 宮崎県美郷

PowerPoint プレゼンテーション

<4D F736F F D208D A778D5A8A778F4B8E7793B CC A7795D2816A2E646F6378>

Microsoft PowerPoint - qcomp.ppt [互換モード]

JavaScriptで プログラミング

統計的データ解析

Microsoft Word - 操作マニュアル-Excel-2.doc

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

ベイズ統計入門

SAP11_03

航空機の運動方程式

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

数量的アプローチ 年 6 月 11 日 イントロダクション データ分析をマスターする 12 のレッスン ウェブサポートページ ( 有斐閣 ) 水落研究室 R http:

Microsoft PowerPoint - 10.pptx

PowerPoint Presentation

モジュール1のまとめ

初めてのプログラミング

フィルタとは

CAEシミュレーションツールを用いた統計の基礎教育 | (株)日科技研

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

Microsoft Word - 訋é⁄‘組渋å�¦H29æœ�末試é¨fi解ç�fl仟㆓.docx

Microsoft PowerPoint ppt

Microsoft PowerPoint - sc7.ppt [互換モード]

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

Microsoft PowerPoint - H17-5時限(パターン認識).ppt

2010年度 筑波大・理系数学

Microsoft PowerPoint - データ解析基礎4.ppt [互換モード]

不偏推定量

13章 回帰分析

2011年度 筑波大・理系数学

スライド 1

Microsoft PowerPoint - 資料04 重回帰分析.ppt

正誤表(FPT1004)

ii 3.,. 4. F. (), ,,. 8.,. 1. (75%) (25%) =7 20, =7 21 (. ). 1.,, (). 3.,. 1. ().,.,.,.,.,. () (12 )., (), 0. 2., 1., 0,.

<4D F736F F F696E74202D2091E6824F82568FCD8CEB82E892F990B382CC8CF889CA82BB82CC82515F B834E838A B9797A3959C8D F A282E982C682AB82CC8CEB82E897A62E >

統計学 - 社会統計の基礎 - 正規分布 標準正規分布累積分布関数の逆関数 t 分布正規分布に従うサンプルの平均の信頼区間 担当 : 岸 康人 資料ページ :

Microsoft Word - thesis.doc

Microsoft PowerPoint - e-stat(OLS).pptx

経済データ分析A

編集する ファイルを開く マイクロデータの設定を行うファイルまたはファイルを開きます 開かれたファイルは編集画面に表示されて ブラウザ表示した時のプレビューも同時に表示されます HTML ファイルの選択 編集する ファイルを開くためにメインメニューから ファイル 開く を選びます ファイル選択ダイア

Microsoft Word - Stattext07.doc

<4D F736F F D208EC08CB18C7689E68A E F193F18D8095AA957A C C839395AA957A814590B38B4B95AA957A2E646F63>

PowerPoint プレゼンテーション

情報工学概論

3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ #include <stdio.h> main() { int a, b; } pri

RSS Higher Certificate in Statistics, Specimen A Module 3: Basic Statistical Methods Solutions Question 1 (i) 帰無仮説 : 200C と 250C において鉄鋼の破壊応力の母平均には違いはな

Microsoft PowerPoint - 測量学.ppt [互換モード]

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Python-statistics5 Python で統計学を学ぶ (5) この内容は山田 杉澤 村井 (2008) R によるやさしい統計学 (

ii 2. F. ( ), ,,. 5. G., L., D. ( ) ( ), 2005.,. 6.,,. 7.,. 8. ( ), , (20 ). 1. (75% ) (25% ). 60.,. 2. =8 5, =8 4 (. 1.) 1.,,

生命情報学

1/30 平成 29 年 3 月 24 日 ( 金 ) 午前 11 時 25 分第三章フェルミ量子場 : スピノール場 ( 次元あり ) 第三章フェルミ量子場 : スピノール場 フェルミ型 ボーズ量子場のエネルギーは 第二章ボーズ量子場 : スカラー場 の (2.18) より ˆ dp 1 1 =

Microsoft Word - histgram.doc

Microsoft PowerPoint - prog03.ppt

Microsoft Word - VBA基礎(2).docx

Microsoft Word - reg.doc

Excelを用いた行列演算

Microsoft Word - VBA基礎(6).docx

(b) 計算について 次に 計算を行っていきます Excel は本来 表計算ソフト ですので 計算をすることに機能の重点がおかれています しかしまったく難しくありません 計算方法はセル ( 箱のこと ) 内に = を打ち込み あとは式を書くだけです まずはやってみましょう P7 セル (P 列の7

Microsoft PowerPoint slide2forWeb.ppt [互換モード]

振動学特論火曜 1 限 TA332J 藤井康介 6 章スペクトルの平滑化 スペクトルの平滑化とはギザギザした地震波のフーリエ スペクトルやパワ スペクトルでは正確にスペクトルの山がどこにあるかはよく分からない このようなスペクトルから不純なものを取り去って 本当の性質を浮き彫

Transcription:

R と Matlab による最尤最尤推定推定のコードコードの作成. 最尤法とは? 簡単に言うと尤度関数を最大にするように未知パラメーターの値を決める事 以下では観測されたデータを {y,, y, y } とし そのベクトルを Y = [y,,y ] 未知パラメーターのベクトルを θ = [θ,,θ q ] とする また尤度関数を L(θ と表すとする ( 尤度関数は未知パラメーターの関数 ( データ ( の分布 が連続型の場合 個の確率変数 {y,, y, y } の同時密度関数 f (y,, y, y ;θ を未知パラメーターの関数とみ なしたものが尤度関数 つまり L(θ = f (y,, y, y ;θ これを最大化するようなパラメーター θ の値が最尤推定値 通常 尤度関数ではなくその対数をと った対数尤度関数 logl(θ を最大化するようなパラメーターを求める ( そちらの方が計算が簡単 なので ( 例 y, =,, は独立に平均 µ 分散 σ の正規分布に従っているとする この場合 推定したい 未知パラメーターは θ= [µ, σ ] これを最尤法で推定する まず y の密度関数は f ( y ; πσ ( y exp σ µ, σ = であり さらに y,,, は独立なので {y,, y, y } の同時密度関数は y それぞれの密度関数 を掛け合わせたもの すなわち f ( y σ,..., y ; µ, σ = f ( y ; µ, σ L f ( y ; µ, σ f ( y ; µ, である これより 対数尤度関数は log L( θ = log f ( y = log f ( y = = log,..., y ; µ, σ ; µ, σ + L+ log f ( y log f ( y ; µ, σ πσ ( y exp σ = log(π log( σ σ となる ちなみにこれを最大化する µ と σ の値は ˆµ MLE = y, σ = MLE y t= ; µ, σ + log f ( y ; µ, σ ˆ ( ( y MLE この資料は私のゼミおよび講義で R の使用法を説明するために作成した資料です ホームページ上で公開しており 自由に参照して頂いて構いません ただし 内容について 一応検証してありますが 間違いがあるかもしれません 間違いがあった場合でもそれによって生じるいかなる損害 不利益について責任は負いかねますのでご了承ください

である ( データ ( の分布 が離散型の場合 {y,, y, y } の同時確率関数を p(y,,y,y ;θ とするとこれをパラメーターの関数として見たものが尤度関数 ( 例 y, =,, はそれぞれ独立に確率 α (0 < α < で を取るベルヌーイ分布に従っているとする この場合 推定したい未知パラメーターは θ = α これを最尤法で推定する まず y の確率関数は y y p( y ; p = α ( α であり さらに y,,, は独立なので {y,, y, y } の同時確率関数は y のそれぞれの確率関数を掛け合わせたもの すなわち p,..., y; α = p( y; α L p( y; α p( y ; α ( y である これより 対数尤度関数は となる log L( θ = log p( y = log p( y = = logα,..., y ; α ; α + L+ log p( y ; α + log p( y ; α log p( y ; α y + log( α ( y 最尤法はモデルが複雑になると尤度関数 すなわち同時密度関数を求めるのが難しくなるが それ以外は考え方はどの場合も上記とまったく同じ 対数尤度関数さえ求まれば ( もっというとパラメーターの関数として対数尤度関数を計算するやり方さえ分かれば 明示的に求まらなくてもいい 最尤法で推定できる. Matlab による最尤法のプログラム Matlab は自分で関数をつくる事ができる その自作した関数に対して fmuc 関数を用いて その関数の値を最小 ( 大 化する変数 ( パラメーター の値を求める 例として 先ほどの正規分布の平均 µ と分散 σ を推定するプログラムの書き方を説明する こ れには関数ファイルを作る必要があるのでまず関数ファイルについて簡単に説明する 例えば y = f (x, f (x = 3x という関数のファイルを作ってみよう まず スクリプトファイルを新しく開く (m-fle と呼ばれる そ こに fucto y = fuc(x y = 3*x^;

と書いて fuc.m という名前でどこかわかりやすい場所に保存する (m ファイルの拡張子は.m こ れで新たに fuc という関数が Matlab で使えるようになった 一般に fucto 出力変数名 = 関数名 ( 入力変数名 出力変数名 = 具体的な関数の形 というように関数を記述する この関数を使うには Matlab のコマンドウィンドウで パスの設定 をクリックし もし検索パスのところに 先ほどの fuc.m を置いたディレクトリがなければ フォルダーを追加 でそのディレクトリを追加する ( 追加したら 保存 閉じる コマンドウィンドウ上で >> fuc(5 と入力してエンターを押すと as = 75 と表示され この関数が使用可能である事がわかる また >> y= fuc(3 のように計算結果に名前 ( ここでは y を付ければ y は y = 7 となる マトラブでは足し算 (+ 引き算 (- 割り算 (/ 掛け算 (* を用いる事ができる さらに行列の演算などもできる これらについてここでは詳しくは説明しない マトラブは R と並んで有名なソフトウエアであり Web 上を検索すればその説明が多く見つかる 詳しくは Web で検索して資料を発見して欲しい 次にこの関数を最小化する点を求めてみよう 実際にはこれは 0 である事はすぐにわかるが 目的関数がこのように簡単でない場合 数値計算で解かなくてはならないので その練習としてやってみる これには fmuc 関数を使う fmuc は関数の制約なしの非線形最小化を行う関数である 制約なし関数とは入力変数の動く範囲に制約をおかない すなわちこの場合 x は < x < の範囲の値で この範囲において f(x が最小値を取る x の値を求める事になる 先ほどの関数 fuc の最小値を求めるには ( ここで 00 とは計算を始める時の x の初期値である 3

>> fmuc( 'fuc',00 と入力すると ( 間にいろいろ出るのは無視して 答として as =.8567495036359e-09 と出力される 最後の e-09 は 0 9 を表している 実際の値の 0 に非常に近い値が出ているのがわかる これを用いて尤度関数の最大化を行う 尤度関数を最大化するという事はその負の値を最小化する事と等しいことに注意しよう ここでは先ほどの正規分布の平均 µ と分散 σ を推定してみよう この時 問題となるのは先ほども述べたように fmuc はある目的関数を最小化する引数の値を求める関数なので 目的関数は対数尤度関数の負の値とする事と 無制約の最小化を行うので パラメーターに非負制約 等がある場合 例えば分散などは σ = exp( h などとし h ( < h < の関数として 目的関数 を記述する必要がある事 である 以上に注意して まず対数尤度関数のファイルを作る これは fucto y = ormalllf(t,y m=t(; v=exp(t(; = legth(y; f = -0.5**log(*p-0.5**log(v-(/(*v*(Y-m'*(Y-m; y= -f; ed のように入力する ( 変数名 y, 関数名 ormalllf 入力変数名 T, Y は任意 ここで入力変数 として T は T= [ µ, log( σ ] を考えており T( はその 番目の要素 T( はその 番目の要素 であり 行目は T( と exp(t( にそれぞれ m と v という名前をつけるという意味である つまり m が µ で v がσ に相当する 分散は非負の値なので もとの変数を変換して非負の領域しか動 かないようにしている事に注意 また観測値は ベクトル Y [ y,..., y ] として与えられる ことを想定しており 3 行目の Y m は 列を表している よって (Y-m *(Y-m は y y = M というベクトル (Y m はその転置行 4

y ( y y µ [ y L y ] M = を表している また ( の計算は Y m のそれぞれの成分を 乗して和をとるという操 y 作であるので より直接的に sum((y-m.^ として計算する事もできる ここで A.^k はベクトル ( または行列 A のそれぞれの成分を成分ごとに k 乗する事を表しており sum(b はベクトル b の成分の和を計算するコマンドである よって 先ほどのプログラムの中で (Y-m *(Y-m の部分は sum((y-m.^ で置き換えても計算結果は同じになる 最尤法用の関数を書くときは 最初の引数を未知パラメーターのベクトル つ目の引数を観測値とする ( ようにするとよい 次にこの関数を最小化する未知パラメーターの値を求めよう これには fmuc 関数を使う fmuc は関数の制約なしの非線形最小化を行う関数 新たにスクリプトファイルを作成して omalmle.m として保存しよう このファイルでは以下のように記述する fucto t = ormalmle(t0,y s0 =[t0(,log(t0(]'; optos = optmset('largescale','off','dervatvecheck','off',... 'GradObj','off','TolX',e-6,'Dsplay','off',... 'Dagostcs','off','MaxIter',000000; s=fmuc('ormalllf',s0,optos,y; t = [s(,exp(s(]'; ( 行目と3 行めの最後は で終わっている事に注意 これはコマンドが次の行に続く事を意味する この関数 omalmle(t0,y は観測値ベクトルYが与えられたもとで 初期値 t0より計算を始めて 目的関数 ormalllf(t,y を最小化するパラメーターベクトルTの値を返す関数になっている 基本的には 行目の fucto t = ormalmle(t0,y 行目の初期値に関する s0 =[t0(,log(t0(]'; という部分 および最後の行の t=fmuc( ormalllf,t0,optos,y; の部分を適宜変えれば自作の ( 対数 尤度関数について同じことができる 真ん中のoptos のところは最適化をどのように行うかを指定するもので基本的には変更する必要はない ( 推定がうまくいかない時などに変更する fmuc 関数とoptmset 関数について詳しくはコマンド画面上で help 5

fmuc および help optmset と入力して ( エンターキーを押して ヘルプを見る この関数を使って正規分布のパラメーターを最尤推定してみよう まず平均 µ =, 分散 σ = 5 の 正規分布に従う標本を発生させる これは rad 関数を用いる rad 関数は rad(k,j で標 準正規分布に従う k 行 j 列の行列を発生させる >>Y=sqrt(5*rad(00,+ とすると 00 行 列の N(, 5 に従う標本を発生させる事ができる ( ちなみに Y=sqrt(5*rad(00,+; のように最後にセミコロンを付けると発生させたデータは表示されない ちなみにこの場合の最尤推定値は明示的に求められ ここで発生させた標本に対してはµˆ =.7578685753, ˆ σ MLE = 6.688977636843 となった ( これは実際に発生させた標本に応じ て異なるので ここで説明されたのと同じようにやっても必ずしも同じにならない事に注意 では 先ほどの関数を用い数値計算によって最尤推定してみよう 最適化の初期値として t0 = [0, ] を用いる MLE >> t=ormalmle(t0,y t =.759004800967 6.68894054575 上記の実際の最尤推定値に非常に近いことがわかる Matlab による最尤推定の基本は以上のようになる 対数尤度関数を記述する関数のファイルさえ作れば あとはほぼ先ほどの m ファイルを少し書き換えてあげれば ( 初期値の部分や目的関数名を変更する等 実行できる 3. R による最尤法のプログラム R でも基本的には同じである R による関数の作成 使用 再使用については R における自分で作成した関数の使い方 を参照のこと ここでは先ほどの Matlab を用いて行ったことと同じことを R で行ってみる 下記の説明は R の初心者にはわかりずらい部分がある 特に実際の関数の書き方についてはほどんど何も説明していない R の関数の書き方については Web で検索するとたくさん参考になる資料を見つけることができるので それらを見るなりして覚えて欲しい 例えば http://cse.aro.affrc.go.jp/takezawa/r-tps/r.html などには初心者の人にもわかりやすく たくさん有用なことが書いてあるので参照してほしい R のコンソール上で ファイル 新しいスクリプト を開き以下のように入力して testmle.r 6

という名前にしてファイルを保存し 以下のように入力する ormalllf = fucto(y{ =legth(y; fucto(t{m=t[]; v=exp(t[]; f=-0.5**log(*p-0.5**log(v-(/(*v*sum((y-m ^; y=-f; retur(y}} ormalmle = fucto(t0,y{ s0=c(t0[],log(t0[]; s=optm(s0,ormalllf(y,gr=null,method=c("bfgs" retur( t=c( s$par[],exp(s$par[] } 上記のプログラムは Matlab と似ているが もちろん要所要所で違っている ただ つの関数 ormalllf とormalMLE の使い方はほぼ同じである 最初のormalLLF というのが対数尤度関数を計算する関数 次の ormalmle というのが与えられた観測ベクトル Y と初期値 t0 に対して µ と σ を推定する最尤法のプログラムである これらの関数を R に読み込ますには R における自分で作成した関数の使い方 でやったように source コマンドを用いてもいいが より簡単にコンソール上の というアイコンを用いてもよい 具体的には先ほど入力した関数式を全て選択した状態で上記の アイコンを押す すると選択した部分が全て R に読み込まれる (R のコンソール上に入力される 先程と同じように正規乱数を発生させて それを観測値として期待値と分散を推定してみよう R では正規乱数は rorm(,m,s という関数で発生させられる ここで は発生させる標本数 m は期待値の値 s は標準偏差の値である ( 分散ではない事に注意 期待値 分散 5 の正規乱数 を 00 個発生させるには > Y=rorm(00,,sqrt(5 とする 実際に発生させて 先ほどと同様に最尤推定値を計算してみると µˆ MLE =.064848, ˆ σ MLE = 5.059784 となる それでは先ほど同様 作成したプログラムで推定してみると ( 初期値とし ては t0=c(0, を使用 > t=ormalmle(t0,y > t 7

[].064848 5.059784 となる 正確な最尤推定値と ( 少なくとも小数点以下 6 桁までは 一致していることがわかる ちなみ にこの発生させたデータを保存してマトラブに読み込ませて マトラブで作成したプログラムで推定 すると >> t = ormalmle([0,]',y t =.064847936464 5.059784357777 となった 同じ結果である このようにして R で最尤推定を行うプログラムを書くことができる 対数尤度関数を計算する関数 と 初期条件のところをちょっと変えれば上記のプログラムは他のモデルにも使用できる 8