2012年9月23日日曜日

Mahara のXAMPP USB Lite(windows) へのインストール

オープンソースのeポートフォリオとしてよく利用されるMahara(1.5.2)をXAMPP(windows)にインストールする手順の一例を記す。ここではUSBメモリによる可搬性を考慮して、XAMPP USB Lite(1.8.0)を用いる。USBメモリに直接インストールすると大変時間がかかるので、HDD(Cドライブ)にインストールしてそれをUSBメモリへコピー&ペーストするのが簡単である。インストール後は、Maharaにadmin権限でログインし、ポートフォリオの作成やページの編集などを自由に行うことができる。作成したポートフォリオはエクスポートして別の場所で利用できる。opensslを有効にしておけばMoodleと連携するためのネットワーキングも有効化できる。

1. 次のサイトからXAMPP USB Liteのインストーラーをダウンロードし、インストール先(例えば、C:/xampp)を指定してインストールする。
http://www.apachefriends.org/jp/xampp-windows.html
xamppを起動し、ブラウザからhttp://localhost/xamppにアクセスし、下の画面が表示されればインストールは成功である。
mahara-1
2. /xampp/phpのphp.iniを開きextension=php_curl.dllとextension=php_openssl.dllのコメントをはずす。また、次のようにdate.timezoneを修正し、時刻を日本標準時に変更する。
date.timezone = Asia/Tokyo

3. ブラウザからhttp://localhost/phpmyadminにアクセスし、Mahara用のデータベース、例えばmahara、とユーザ、例えばmaharauser、を作成する。また、データベースmaharaの特権を編集しmaharauser@localhostのパスワード(例えばpassword)を設定する。
mahara-5
4. Mahara(zip)を次のサイトからダウンロードして解凍し、解凍後のフォルダ名をmaharaとする。
https://wiki.mahara.org/index.php/Download_Mahara#Language_Packs

5. maharaを/xampp/htdocsの下に置き、/xampp/apache/conf/httpd.confにてDocumentRootが "/xmapp/htdocs"であることを確認する。

6. /xampp/htdocs/mahara/htdocsのconfig-dist.phpを次のように修正し、config.phpのファイル名で保存する。dataroot等のパスにドライブ名を付けると、USBの使用場所に応じて設定を変更する必要がある。
$cfg->dbtype = 'mysql5';
$cfg->dbhost = 'localhost';
$cfg->dbport = null;
$cfg->dbname = 'mahara';
$cfg->dbuser = 'maharauser';
$cfg->dbpass = 'password';
・・・・・
$cfg->wwwroot = 'http://localhost/mahara/htdocs';
$cfg->dataroot = '/xampp/maharadata';
・・・・・
$cfg->opensslcnf = '/xampp/apache/bin/openssl.cnf'; (追加)

7. 作成したポートフォリオをエクスポートするため、zip/unzipの実行ファイルを次のサイトからダウンロードし、それらを/xampp/apache/binに保存する。
http://stahlforce.com/dev/index.php?tool=zipunzip
また、6で作成したconfig.phpにて次のようにパス指定を追加する。
$cfg->pathtounzip = '/xampp/apache/bin/unzip.exe';
$cfg->pathtozip = '/xampp/apache/bin/zip.exe';

8. xamppを再起動し、ブラウザからhttp://localhost/mahara/htdocs/へアクセスすると(datarootのmaharadataはこのときに自動作成される。)次の画面が表示されるので、「Install Mahara」をクリックする。
mahara-2
9. 日本語環境とするため、ダウンロードしたMaharaのバージョンと一致する日本語言語パックを次のサイトからダウンロードして解凍し、/xampp/maharadata/langpacksに保存する。
http://langpacks.mahara.org/

10.再度ブラウザからhttp://localhost/mahara/htdocs/へアクセスし、「Language」の「日本語」を選び「Change」を押すと次の画面が表示され、インストールは完了する。(日本語をデフォルトにするには、adminでログインした後サイトオプションにて設定を変更する。)
mahara-3
11. インストール時に設定した管理者(ユーザ名はadmin)のパスワードを用いてログインすると、次の画面(管理者のダッシュボード)が表示され、管理者としてMaharaを使用できる。
mahara-4
参考サイト:
https://mahara.org/interaction/forum/topic.php?id=1662
http://moodle.org/mod/forum/discuss.php?d=203157&parent=890667

2011年12月23日金曜日

Zerohoursへのアクセス状況

ここ2年間で、Zerohoursは17カ国、2644人の方から訪問を受けました。下図はGoogle Analyticsの表示例です。

chiiki

2011年12月4日日曜日

損益分岐点の導出

image
売上数量に対する売上高及び総費用の関係は上図のようにモデル化されるものとする。損益分岐点とは売上高と総費用(固定費+変動費)が等しく、利益も損失もない点をいう。
グラフの縦軸をY、横軸をXとし、利益をR、変動費をH、固定費をKとする。ある売上数量X~に対するR,H,Kが既知であるとすると、売上高①と総費用(H+K)②に関する直線の式は次のようになる。
Y = [(R+H+K)/X~]X・・・①
Y=[H/X~]X+K・・・②
損益分岐点はY=Y^、X=X^であるから、これを代入してY^を消去すると
X^/X~ = K/(R+K)
よって、損益分岐点の売上高Y^と売上数量X^は次のように求められる。
Y^ = K(R+H+K)/(R+K) = K/[1-H/(R+H+K)]
X^ = [K/(R+K)]X~
:ある製品の売上数量が300個のとき、利益10万円、変動費75万円、固定費5万円であった。損益分岐点の売上高と売上数量を求めよ。
:Y^=5x(10+75+5)/(10+5) = 30万円
X^=5/(10+5)x300=100個

2011年8月17日水曜日

Moodleによる授業アンケート

授業アンケートは教育機関におけるFD(ファカルティ・ディベロップメント)活動の一環として広く実施されている。ここでは、フリーのコース管理・学習支援システムであるMoodleを用いた授業アンケートシステムの一例を示す。

1. コースはクラス単位で作成する。あらかじめ選定されたコース管理者が、コースの「教師」として登録され、コースを作成・管理する。

2. 各コースには複数の授業科目があり、各授業科目のアンケート(授業アンケート)はfeedbackモジュールを用いて作成する。feedbackモジュールは以下のサイトからダウンロードする。
http://moodle.org/mod/data/view.php?d=13&rid=95&filter=1 http://docs.moodle.org/22/en/Feedback_module (Moodle2.0以降はこちら)

3. アンケートの設問はテンプレートに保存できるので、同じコースにある他の授業科 目にもすぐ適用できる。テンプレートを「公開」オプションで保存すれば、他のコー ス のアンケートにも適用できる。同じ名前のテンプレートを保存すると、上書きすること なく保存され区別ができなくなるので注意する。また、多くのコースに共用されるテ ンプレートを削除するときは、それを保存したコースから削除する。

4.各コースの「学生」は当該クラスの受講者であり、登録キーにより自分の属するコースに登録し授業アンケートへの回答入力を行う。

5. 授業アンケートは匿名式でもユーザ名を記録する方式(記名式)でも実施できる。記名式では、回答者の情報は自動で送信されるので、ユーザ名などをアンケートに入力する必要はない。また、各授業科目の担当教員はコースの編集権限を持たないので、回答者の特定はできない。

6. 授業科目には必修科目と選択科目がある。選択科目において、受講者以外の学生の回答を除外するには、選択科目のアンケートにグループ設定を行う(匿名式あるいは記名式のとき)か、もしくは回答者一覧と受講者一覧とを対照(記名式のとき)する。

7. アンケート結果の分析は、コース管理者がfeedbackモジュールの機能(Excelへのエクスポートを含む)を用いて行い、適当な方法によって授業担当教員や受講者に開示する。

8.コースのバックアップとリストア:一度作成したコースは、バックアップとリストアを 行うことにより翌年度も再利用できる。バックアップの際は、コースに含まれるすべ てのアンケートのユーザデータ(学生の回答データ)や登録ユーザ(学生ロール)を 削除しておけば、そのままリストアできる。また、同じバージョンの moodleでも、異なるサーバのmoodleにリストアする場合は、管理者のメールアド レスが一致しないとエラーとなるので注意する。


2010年3月16日火曜日

Moodle1.9+CentOS5 on VirtualBox

VirtualBox3.1.4がホストOS(WindowsXP Home)上に既にインストールされている状態で、CentOS5.4をゲストOSとしてインストールし、次にゲストOS上にMoodle1.9.7をインストールし、ホストOS及びネットワーク内のパソコンからアクセスする。作成した仮想アプライアンスを他のVirtualBoxの仮想マシンに移植すれば、再インストールすることなくMoodleが使用できる。

1.ゲストOS(CentOS5.4)のインストール
1)VirtualBoxに仮想マシン(Linux、RedHat、メインメモリ512MB、仮想HD8GB)を作成する。仮想マシンのCD/DVDデバイスにあらかじめダウンロードしたCentOS5.4のDVD.isoファイル(i386、約3.7GB)をセットする。ネットワークには「ブリッジアダプタ」を割り当て、ホストパソコンが接続しているLANアダプタ(有線あるいは無線)の名前を指定する。共有フォルダとして使用するフォルダを、ホストパソコンに作成しておく。
2)仮想マシンを起動するとGUIモードでCentoOSのインストールが始まるので、通常通りにインストールする。ブリッジ接続し、サーバとして運用するので、CentOSのネットワーク設定(固定IPアドレスの割り当て、ゲートウェイやDNSの設定など)も行う。
3)インストール完了後、仮想マシンの「デバイス」メニュー「Guest Additionsのインストール」をクリックし、VirtualBoxに付属のVBoxGuestAdditions.isoをマウントしてLinux用のGuest Additionsをインストールする。なお、あらかじめgccやkernel-develなどをyumでインストールしておく。これにより、マウスのシームレスな操作や共有フォルダの利用などが可能になる。ホストパソコンの共有フォルダは、仮想マシンの「デバイス」メニューの「共有フォルダを追加」から指定する。ゲストOSでは、当該共有フォルダを下記のコマンドでマウントする。このコマンドは/etc/rc.local/に記述しておく。

# mount -t vboxsf [ホストOSの共有フォルダ名] [ゲストOSの共有フォルダのパス]

4)必要に応じて画面の解像度やSSHによるリモート接続の設定等を行う。

2.Moodle1.9のインストール
以下の操作は、ゲストOS上で行う。なお、MoodleのパッケージはあらかじめホストOS上でダウンロードし、共有フォルダを通してゲストOSに取り込む方が早い。
1)Moodleのインストールに先立ち、PHP、Apache、Mysqlなどの関連ソフトをインストールしておく。
2)下記のURLから.tgzのMoodleパッケージをダウンロードする。現時点の最新版は1.9.7である。
http://download.moodle.org/
続いて、下記のURL等を参考にしてmoodleをインストールする。途中で日本語の言語パックもインストールする。
http://docs.moodle.org/ja/Moodle%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
3)インストールの完了後、ゲストOSのブラウザを起動してhttp://localhost/moodle/ にアクセスできることを確認する。
4)Moodleのルートディレクトリにあるファイル /moodle/config.php のwwwrootを次のように修正する。これで、ホストOSや同じネットワーク内のパソコンからMoodleにアクセスできる。

$CFG->wwwroot   = 'http://仮想マシンのIPアドレス/moodle';

*1-MoodleをインストールしたゲストOSはVirtualBoxの仮想アプライアンスとしてエクスポートされ、他のパソコンのVirtualBoxにインポートして利用できる。エクスポートすると、次の3つのファイルが生成される。
aaa.mf(1KB),   aaa.ovf(5KB),   aaa.vmdk(1.82GB)
ここに、aaaは仮想マシン名、各ファイルの容量は環境によって異なる場合がある。 これらのファイルを一つのフォルダに保存し、他のパソコンへの移植に用いる。ただし、インポートした後は、インポート先のネットワーク環境に合わせて、仮想マシンのIPアドレスやMoodleのwwwrootなどを修正する必要がある。

*2-Moodleがバージョンアップしたとき、アップグレードの練習に利用できる。Windowsに特有の文字化けが生じない。個人のデスクトップだけでなく、ネットワーク環境でMoodleを利用できる。作成したコースのバックアップを共有フォルダに保存しておけば、仮想マシンがクラッシュしてもバックアップが失われることはない。

*3-VirtualBoxをバージョンアップするときは、実行ファイルをダウンロードし、これまでと同じフォルダをインストール先に指定して上書きインストールすればよい。

image

2010年3月13日土曜日

ブログの移転

Zerohoursは2010年3月にJUSTBLOGからBloggerに移転しました。
JUSTBLOGにはお世話になり、ありがとうございました。

2009年5月10日日曜日

Google AdSenseとAnalyticsのブログへの導入

AdSenseやAnalyticsを開始するには、Googleのアカウントを取得した後、それぞれ以下のサイトへアクセスし、HTMLコードを取得して、それをブログへ導入(コードを所定の入力欄へ貼り付け)する。
AdSense:https://www.google.com/adsense/login/ja/?hl=ja&sourceid=aso&subid=ww-ja-et-gaia
Analytics:https://www.google.com/analytics/provision/signup
ここでは、typepadやココログに使われているTypePadとSeeSaaブログについて導入方法を示す。AdSenseもAnalyticsも導入方法は同様であるが、AdSenseはブログのサイドバーなどに表示されるのに対し、Analyticsはどこにも表示されない。AdSenseやAnalyticsの管理は、Googleサイトにログインし、ブラウザ上で行う。複数のブログサイトのAdSenseを一つのAnalyticsアカウントにリンクさせ、AdSenseの状況を分析することも可能である。

1.TypePad
ホームページやブログのサイドバーにAdSenseを表示する場合は、管理サイトへログインし、「タイプリスト」(typepad)あるいは「マイリスト」(ココログ)を用いる。以下にココログの例を示す。
「マイリストの新規作成」をクリックする。
「リストのタイプ」と「リストの名前」を入力し、「リストの作成」をクリックする。
「備考」欄にGoogleから取得したHTMLコードをコピー&ペーストする。(下図はAdSenseのコードを貼り付けた場合である。)必要に応じて「ラベル」を入力し、「保存」をクリックする。
「公開」をクリックし、ブログにアクセスしてサイドバーにAdSenseが表示されていることを確認する。表示されるまでにやや時間を要することもある。
再度「マイリスト」を開くと、作成したリストの一覧が表示される。リストを削除する場合は、「そのほかの操作」の中の「リストを削除」をクリックする。
なお、ブログにアクセスし、「ページのソースの表示」を行って、貼り付けたHTMLコードが<body></body>の間にあることを確認するとよい。
2.SeeSaa
管理サイトへログインし、「デザイン」-「コンテンツ」を開く。(ブログデザインは既に設定されているものとする。)
このページでは「ブログタイトル」や「ブログ説明」等のコンテンツを配置してブログページを構成する。左方のコンテンツ群から「自由形式」を選び、ドラッグ&ドロップでサイドバーの位置にコンテンツを配置し、ここにAdSenseを貼り付ける。Analyticsについては、「自由形式」のコンテンツを、例えば「ブログ説明」の直下に配置する。下図は右側にサイドバーがあるデザインの例である。コンテンツの文字部(タイトル)をクリックすると編集画面が表示されるので、タイトルを適当に設定する。(タイトルはブログには表示されない。)
同じく、編集画面にHTMLコードを入力する欄(自由入力欄)があるので、そこにAdSenseやAnalyticsのコードを貼り付ける。下図はAdSenseコードの貼り付け例である。貼り付け終了後は「保存する」をクリックし、上の画面に戻って「設定を反映する」をクリックする。
最後に、ブログにアクセスして「ページのソースの表示」を行い、貼り付けたHTMLコードが<body></body>の間にあることを確認するとよい。

2009年3月16日月曜日

BRugsによる正規母集団パラメータのベイズ推定

 RからライブラリBRugsを介してOpenBUGSを使用するベイズ推定の一例を示す。
Xi(i=1~n)を正規分布(平均μ、分散σ2)に従う母集団からのi.i.d.サンプルとする。μ、σ、σ2等のベイズ推定を行う。なお、事前分布やハイパーパラメータの値には以下と同じものを用いる。
R2WinBUGSによる正規母集団パラメータのベイズ推定
(参考文献)豊田秀樹編著「マルコフ連鎖モンテカルロ法」、朝倉書店、2008年。

1.パッケージBRugsのインストール
Rを起動して「パッケージ」-「パッケージのインストール」をクリックするとCRANのミラーサイトを選択する画面が表示される。適当なサイトを選択して「OK」を押すと、パッケージを選択する画面が表示される。

「BRugs」を選択して「OK」を押すとダウンロードが始まる。パッケージは約5.5MBのzipファイルで、一時ファイルフォルダにダウンロードされる。

ダウンロードされたパッケージをRに読み込むため、「パッケージ」-「パッケージの読み込み」をクリックする。

パッケージから「BRugs」を選択し「OK」を押すと読み込みが始まる。読み込み終了後、RのフォルダlibraryにフォルダBRugsがあることを確認すればインストールは完了する。

2.モデルファイル(model.txt)、データファイル(data.txt)及び初期値ファイル(inits.txt)
BUGSではモデルファイル、データファイル及び初期値ファイルを用いて事後分布からサンプリングを行う。事前分布や尤度関数等の情報はモデルファイルに、所与のデータ情報はデータファイルに、計算に用いる初期値の情報は初期値ファイルに収められている。使用する各ファイルを適当なエディタを用いて以下のように作成し、ワーキングディレクトリに保存する。
1)model.txt
model{
mu ~ dnorm(0, 100) # 事前分布
tau ~ dgamma(18, 0.68) # 事前分布
sig2 <- 1/tau
sig <- sqrt(1/tau)
for(i in 1:n) {
X[i] ~ dnorm(mu, tau) # 尤度関数(サンプルX[i]の母集団分布)
}
}
2)data.txt
list(n=6, X=c(4.59000E-02, 4.36000E-02, 2.07000E-02, 8.67000E-02, 1.67800E-01, 1.74800E-01))
3)inits.txt
list(mu=0, tau=1)
なお、初期値ファイルは連鎖の数だけ必要である。特に初期値の設定に条件がない場合は、連鎖の数に自動対応する初期値の生成関数modelGenInits()を用いると便利である。

3.BRugsの関数を用いたRコードの一例
以下のコードを適当なファイル名を付けてワーキングディレクトリに保存し、Rから実行する。
library(BRugs)
Ne <- 10000 # 有効サンプル数
Nb <- 1000 # burn-in
N <- Nb+Ne # 総繰返し数
modelCheck("model.txt")
modelData("data.txt")
modelCompile(numChains=1)
modelInits("inits.txt") # 初期値を自動生成する場合はmodelGenInits()を使用する。
samplesSet(c("mu","tau","sig","sig2")) # パラメータの指定。
modelUpdate(N)
samplesStats("*") # すべての変数の統計量を表示する。
samplesHistory("mu", beg=Nb)
samplesDensity("mu", beg=Nb)
samplesCoda("mu",stem="mu") # パラメータmuのCodaファイルをワーキングディレクトリに生成する。
CD <- read.openbugs(stem="mu") # パラメータmuのMCMCオブジェクトをCDとする。
codamenu()

4.結果の表示(「・・・・・」は一部割愛を表す。)
> modelCheck("model.txt")
model is syntactically correct
> modelData("data.txt")
data loaded
> modelCompile(numChains=1)
model compiled
> modelInits("inits1.txt")
Initializing chain 1: model is initialized
> samplesSet(c("mu","tau","sig","sig2"))
monitor set for variable 'mu'
monitor set for variable 'tau'
monitor set for variable 'sig'
monitor set for variable 'sig2'
> modelUpdate(N)
11000 updates took 0 s
> samplesStats("*")
mean sd MC_error val2.5pc median val97.5pc start sample
mu 0.05698 0.060660 5.836e-04 -0.06118 0.05783 0.17610 1 11000
sig 0.18650 0.020810 1.995e-04 0.15090 0.18470 0.23230 1 11000
sig2 0.03522 0.008037 7.804e-05 0.02277 0.03412 0.05396 1 11000
tau 29.80000 6.500000 5.965e-02 18.54000 29.31000 43.92000 1 11000
> samplesHistory("mu", beg=Nb)
 >samplesDensity("mu", beg=Nb)
>samplesCoda("mu",stem="mu")
CODA files written
>CD <- read.openbugs(stem="mu")
・・・・・
> codamenu()
CODA startup menu
1: Read BUGS output files
2: Use an mcmc object
3: Quit
Enter an item from the menu, or 0 to exit
選択: 2
Enter name of saved object (or type "exit" to quit)
1:CD
Checking effective sample size ...OK
CODA Main Menu
1: Output Analysis
2: Diagnostics
3: List/Change Options
4: Quit
選択: 1
CODA Output Analysis menu
1: Plots
2: Statistics
3: List/Change Options
4: Return to Main Menu
選択: 4
CODA Main Menu
1: Output Analysis
2: Diagnostics
3: List/Change Options
4: Quit
選択: 4
Are you sure you want to quit (y/N)?
:y

2009年3月7日土曜日

Moodle / SQLite

Moodle/SQLiteのインストールメモ

MoodleをWindowsパソコンのUSB上あるいはHD上にインストールし、管理者権限で使用する。データベースとしてSQLiteを使用している点が、一般のWAMPと異なる。
参考サイト:
http://docs.moodle.org/en/Student_projects/SQLite#Moodle.2FSQLite_on_a_stick

1.Moodleのインストールと起動及び終了
1)次のサイトからファイルmoodle-on-stick.zip(約28MB)をダウンロードし、USBあるいはデスクトップなどに解凍する。
http://www.anmb.ro/~abautu/mos/
2)解凍されたフォルダmoodle-on-stick(約72MB)には、apache、moodle、moodledataの3つのフォルダと1つのバッチファイルrun-me.batが含まれている。Moodleのバージョンは2.0である。バッチファイルrun-me.batをクリックするとコマンドプロンプトが起動し、HD上にドライブQが自動生成される(下図)。


3)続いてブラウザが自動起動し、http://localhost/ に自動アクセスしてMoodleのトップページが表示される。トップページ右上の「ログイン」をクリックするとログイン画面が現れるので、デフォルトのユーザ名:admin、パスワード:demoを入力すれば管理者権限でログインできる。なお、下の画面は、日本語の言語パックをインストールして日本語化し、ログイン後にテーマを変更したものである。

4)Moodleを終了するには、ログアウトしてブラウザを閉じればよいが、稼働中のコマンドプロンプトも終了させる。これでウェブサーバが停止するが、ドライブQはまだ削除されないので、再度Moodleを使用する場合はフォルダQ:/apache/binにあるApache.exeをクリックしてウェブサーバを起動させ、ブラウザを開いてlocalhostにアクセスすればよい。ドライブQを削除するには、コマンドプロンプトを終了させた後、バッチファイルrun-me.batをクリックすればよい。なお、ドライブQに保存されたファイルは同時にフォルダmoodle-on-stickにも保存されるので、ドライブQを削除しても保存ファイルが消失することはない。

2.日本語化
デフォルトでは英語しか対応していないが、以下のような日本語化と文字化け対策が可能である。
1)下記のサイトから言語パックja_utf8.zipをダウンロードし、解凍してフォルダQ:/moodle/langに保存する。
http://download.moodle.org/lang16/
2)カレンダの文字化け(年月)を解消するため、保存した言語パックja_utf8のファイルlangconfig.phpを、適当なエディタを用いて次のように修正する。
$string['localewincharset'] = 'CP932'; -> $string['localewincharset'] = 'UTF-8';
3)コースの設定画面や活動ブロックに見られる日付け(月や週)の文字化けに対処するため、Moodle管理ブロックの「言語設定」-「言語設定」-「サイト全体のロケール」を‘UTF-8’(デフォルトは空)とする。これにより月や週が英語表示されるので文字化けが回避できる。
なお、日本語ファイル名のファイルも文字化けしないでアップロードできるようである。

3.その他
・サーバ向きではないが、極めて短時間でMoodleが使用できる。
・活動モジュールからアップロードしたファイル(Q:/moodledata/filedirに保存される。)がファイルフォルダに表示されない。
・コースバックアップファイルがファイルフォルダに表示されず、リストアするための操作コマンドもない。
・他のユーザがアップロードしたファイルが管理者に見えない。

2009年2月9日月曜日

R2WinBUGSによる正規母集団パラメータのベイズ推定

BUGS(Bayesian Inference Using Gibbs Sampling)は以下のような方法で利用できる。
1)OpenBUGS やWinBUGS14をインストールし、単体で使用する。
2)RからライブラリR2WinBUGSを介してOpenBUGSやWinBUGS14を使用する。
3)RからライブラリBRugsを介してOpenBUGSを使用する。
ここでは2)の方法による一例を示す。
Xi(i=1~n)を正規分布(平均μ、分散σ2)に従う母集団からのi.i.d.サンプルとする。μ、σ、σ2等のベイズ推定を行う。
・参考文献
[1]大森裕浩「MCMCの基礎と統計科学への応用」、
http://www.e.u-tokyo.ac.jp/~omori/MCMC/mcmc-ism04.pdf、2004。
[2]中妻照雄「入門ベイズ統計学」、朝倉書店、p.145。

1.事前分布






以下では、ハイパーパラメータの値をμ0=0、τ02=0.01、ν0=36、λ0=1.36(文献[2])と設定したときの例を示す。

2.modelファイル
次のmodelコードをファイルmodel.txtとして作業ディレクトリに保存する。
model{
mu ~ dnorm(0, 100) # 事前分布。BUGSではdnorm(mean, tau)=N(mean, σ2)、
# ここに、 tau = 1/σ2 であることに注意。
tau ~ dgamma(18, 0.68) # 事前分布
var <- 1/tau # var ~ 逆gamma分布
sig <- sqrt(1/tau)
for(i in 1:n) {
X[i] ~ dnorm(mu, tau) # 尤度関数
}
}

3.Rコードの一例
# bugs関数ではmodel.file="model.txt"として2.で作成したファイルmodel.txtを指定する。
# データは参考文献[2]を使用。
# 結果の表示のためcodamenu()(ライブラリはcoda)を用いる。
# このRコードは適当なファイル名を付けて2.と同じ作業ディレクトリに保存する。
library(R2WinBUGS)
library(coda)
X <- c(4.590E-02, 4.360E-02, 2.070E-02, 8.670E-02, 1.678E-01, 1.748E-01)
n <- NROW(X)
data <- list("n","X")
ini1 <- list(mu=10, tau=0.4) # 初期値
param <- c("mu","tau","sig","var")
N <- 10000 # サンプル数
Nb <- 1000 # burn-in
out <- bugs(data,inits=ini1,param,model.file="model.txt", debug=T,
n.chains=2, n.thin=1, n.iter=N, n.burnin=Nb,
bugs.directory="C:/Program Files/WinBUGS14/", working.directory=NULL)
print(out,digits=4)
codamenu()

4.結果の表示(「・・・・・」は一部割愛を表す。)
> print(out,digits=4)
Inference for Bugs model at "model.txt", fit using WinBUGS,
2 chains, each with 10000 iterations (first 1000 discarded)
n.sims = 18000 iterations saved
mean sd 2.5%
mu 0.0567 0.0602 -0.0622
tau 29.7734 6.6214 18.2000
sig 0.1867 0.0213 0.1505
var 0.0353 0.0082 0.0227 ・・・・・
97.5% Rhat n.eff
mu 0.1760 1.0010 18000
tau 44.1400 1.0010 18000
sig 0.2344 1.0010 18000
var 0.0549 1.0010 18000
For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).
・・・・・
> codamenu()
CODA startup menu
1: Read BUGS output files
2: Use an mcmc object
3: Quit
選択: 1
Enter CODA index file name 注) WinBUGS14はCODAファイルを自動生成する。
(or a blank line to exit)
1: codaIndex.txt
Enter CODA output file names, separated by return key
(leave a blank line when you have finished)
1: coda1.txt
2: coda2.txt
3:
Abstracting deviance ... 9000 valid values
Abstracting mu ... 9000 valid values
・・・・・
Checking effective sample size ...OK
CODA Main Menu
1: Output Analysis
2: Diagnostics
3: List/Change Options
4: Quit
選択: 1
CODA Output Analysis menu
1: Plots
2: Statistics
3: List/Change Options
4: Return to Main Menu
選択: 1
































































Save plots as a postscript file (y/N) ?
N
CODA Output Analysis menu
1: Plots
2: Statistics
3: List/Change Options
4: Return to Main Menu
選択: 4
CODA Main Menu
1: Output Analysis
2: Diagnostics
3: List/Change Options
4: Quit
選択: 4
Are you sure you want to quit (y/N)?
:y

2009年2月1日日曜日

Metropolis-Hastings(MH)乱数の自己相関

  MHアルゴリズムによるN(0,1)からのサンプリングを行う。提案分布は一様分布とする。乱数の自己相関の状況について、特に採択率やthinningを変えた場合の影響を例示する。

1.Rコードの一例
thin <- 0 #サンプリング間隔(0のとき間引きなし)
thin1 <- thin+1
Ne <- 1000 # 有効サンプル数
N <- thin1*Ne # 総サンプル数
samp <- numeric(Ne)
count <- 0 # 採択数のカウント
x0 <- 4.5 # 初期値
a <- 4 # 採択率の調整
samp[1] <- x0
for (i in 1:N) {
cand <- runif(1, -a, a) # 提案分布(一様分布)から乱数生成
x1 <- x0 + cand # random walk
alpha <- min(1, dnorm(x1)/dnorm(x0)) # 採択確率の計算、提案分布は対称
u <- runif(1)
if (u < alpha){
x0 <- x1
count <- count + 1
}
if(i %% thin1 == 0){
j <- (i+thin1)/thin1
samp[j] <- x0
}
}
count/N #採択率
mean(samp)
sd(samp)
par(mfrow=c(2,1))
plot(samp,type="l")
hist(samp) # 密度関数を描くときは plot(density(samp))
par(mfrow=c(1,1))
par(ask=TRUE)
NN <- N/2
for(i in 1:NN){
j <- 2*i-1
plot(samp[j],samp[j+1],xlim=c(-5,5),ylim=c(-5,5),col="blue")
par(new=T)
}
par(new=F)
acf(samp) # 自己相関係数
# http://aoki2.si.gunma-u.ac.jp/R/acf.html には自己相関係数を計算する
# 関数acf2(x,k)のRコードが掲載されている。

2.採択率と調整パラメータの関係など(有効サンプル数=10000)
a
thin
採択率
サンプル平均 サンプル標準偏差
4 0 0.399 0.0192 0.9855
4
3
0.388
-0.0119 1.0055
4 6 0.389 -0.0037 1.0025
1
0
0.800
0.0806 0.9881
1 3 0.805 -0.0092 1.0058
1
6
0.802
0.0059 0.9966

3.結果の表示(有効サンプル数=1000)
・thin=0(a=4)

・thin=3(a=4)


・thin=10(a=4)

・thin=0(a=1)


・thin=3(a=1)

・thin=10(a=1)

採択率が0.3~0.4であれば、thin=3でも自己相関の低下にはかなり効果的と思われる。