Kosugitti's BLOG

アンドロイドは正規分布の夢を見るか

この画面は、簡易表示です

2014 / 6月

rstan2.3.0お目見え

昨日ちょうどstanコードの比較云々の記事を書いたのだけど,月曜日にrstanが2.3にバージョンアップしてたのねえ。(本家サイトはこちら

しかも,インストールの方法が楽になった!たった数行コードをコピペするだけでできたよ(もちろんRcppなどコンパイル環境が整っている必要があるけれども)。インストール時にRcppやinlineも一緒にコンパイルするようになっているから,以前のエントリーで書いたような問題は気にせずに進めるようになってるよ。

 

ちなみに,新しいバージョンでの測度比較してみた。サンプルコードの8schoolsなんだけど,やはり仮想環境のUbuntuが最速,次いで仮想のWindows,最後にMacだったなあ。

MacでもCPU最適化してくれんかねえ。

 

Ubuntu

スクリーンショット 2014-06-25 13.38.04

Windows

スクリーンショット 2014-06-25 13.38.16

Mac

スクリーンショット 2014-06-25 13.38.28



世界一簡単なrstanコード

もう自分のモデルがどこまで混沌としているかわからなくて,rstanをつかいながらごく簡単なものを確かめるところまで戻ってきた。

ある標準正規分布から乱数発生に寄って得られたデータセットyの平均と分散を推定するプログラム。一瞬で終わる。確実に収束する。まあ初めてMCMCする人はここから確認するとよいかもしれないので,一応書きさらしておく。このままRにコピペで動きます。

2015.03.05 追記)修正を行いました。修正点についてはこちらを参照。

[crayon-5bcac98205296969448272/]



Macのrstanは負担が大きい?

結論から先に言うと,OS環境下によって挙動が違いますよ、って話。特にMacは不利です(´Д` )

 

rstanのサンプルコードで8schoolsというのがありますが,それの実行にかかる時間が実は全然違う。

Ubuntuとwindowsはいずれもmacの仮想環境上で働いているんだけど,実行結果はこんな感じ。

まずUbuntu.

rstan_ubuntu

4つめの鎖だけですが,瞬殺(0.04sec)。次いでWindows.

rstan_win

これも0.05sec。ところがMacだと

rstan_mac

0.5sec…。いや,十分速いんですけど,10倍の違いがあるのはびっくり。

これは簡単な回帰モデルだから,ほとんど時間を感じませんけど,今個人的に書いているコードはちょい複雑。なので,Macで300秒ぐらいかかって,仕方ねえなあと思っていましたが,共同研究者がどうも結果をスイスイ出すので,?とおもって環境を変えてUbuntuにしてみたら,13secで答えが出た。コレはちょっと驚き。

多分rstanのコードがmacのコンパイラに最適化されていないんでしょうね。詳しくないのでわかりませんが。

ちなみに,結果ですが,それはそんなに心配しなくてもOKだとおもう。順にUbuntu,Windows,Macでの結果をのせます。

rstan_result.ubuntu

rstan_result_win

rstan_result_mac

乱数の発生機序がちがったりするから,同じになるはずは内し,まあ少なくとも1の位のオーダーでは狂ってないし,収束の程度(Rhat)も「こっちなら収束するのに?!」なんてことはないようです(たぶん)。

絵面を見ると,Mac>Ubuntu>Winの順で美しいですが,スピードが遅すぎるのはちょっと困るなぁ。ということで、当方しばらくは仮想環境上で仕事しようと思います。

 

※もし壮大な勘違いかなんかで,こうすればいいんだよ,というご指摘があればお願いします。



いろいろなrstanの入れ方

rstanをWindows,Mac,Ubuntuに入れた雑感。

一番入れやすかったのはUbuntu.普段のパッケージもコンパイルしながら遣って行くことが多いからか,あっという間に終わる、ということはないんだけど,丁寧に一つ一つRcpp,inline,rstanをコンパイルして入れていく。特にエラーもないので,待っているだけでいい。g++コンパイラとの相性の良さがありがたい。(参考記事)

次に入れやすかったのはWindows.Rtoolsというソフトの追加インストールが必要で,そこにcygwinのコンパイラが入っているが,ユーザーは気にするほどでもない。インストールするときに,PATHを書き加えることを忘れずに。後はRcppやinlineをパッケージとして入れればよし。ただ,Program Filesフォルダなど,デフォルトの場所にパッケージ等を入れてしまうと,rstanのインストールのときにこける。私はCドライブ直下にmyRlibフォルダを作って回避した。後はスイスイ進みます。

Ubuntuとwindowsの場合,コンパイラがちゃんと入っているかどうかを確認するコードで,cxxfunction関数を使うところがあるけど,ここでエラーが出ることもある。そんな場合は,cppFunctionで書き直すとよい。これらの違いはよくわかってないんだけど,ここはコンパイラがあるかどうかを各にするだけのところだから,ね。(参考記事1/参考記事2)

 

面倒だったのがMac。コンパイラを入れるためにXcodeをインストールする必要がある。さらに,コンパイルのオプション指定等でMakevarsファイルを不可視フォルダに作る必要があり,インストール最中も公式サンプルの通りにやるとwarningが出る。このwarning,出たまま無視していてもrstanはなんとか入るんだけど,実際の計算時にちょっと挙動が怪しい。

rstan users MLの記事を参考に,Makevarsファイルを次のようにしたらエラーなくコンパイルできるようになる。
[crayon-5bcac98206c80748515479/]
g++をclang++に変えるところがミソね。関連記事は自前だけどこちら

 

まあコンパイルできてしまえば,後はいいんだけどね。コンパイル後のマシン性能の比較については、別記事を立てる予定。

※ちなみに,当方メインはMac.Ubuntu,Windows8はParallels desktopで仮想環境をくんでいます。



学力保証の見える化と因子分析

プロファイル・シートなるものを導入して,「学力保証の見える化」をするのが流行りなんですってね。

ネーミングの問題とか,そもそも学力とは、という話を後回しにしておいて,それがどう実装されるべきかについて考えてみました。

例えば教育学部では,教員に必要な力は「使命感や責任感、教育的愛情」,「社会性や対人関係能力に関する技量」,「児童生徒理解に関する力」,「教科指導力」というのがあるそうです(文科省中教審がそういうらしい)。

で,カリキュラムの中でこれらの力を育てていくらしい。大学は教科・教育に関する講義や科目をたくさん設けているから,学生は例えばAという授業をとると,それは「教育的愛情」と「児童生徒理解」をのばすためのものだ,という対応がついている。その対応は,教育学部の掲げるGraduate Policyで,この授業はこの学部のこのGPに対応する,という表があるので,それを見れば一目瞭然。

さて,当然そうなるとでは学生を行に,履修した科目を列にならべたデータセットを作って因子分析するべきだよね。因子分析というのは相関関係に潜む構造を取り出すものだから,当然関連の深い科目同士は,学生の得点相関も高くなるわけです。なので,ちゃんと4因子になるはずです。なんなら,下位因子に分かれたとしても,階層的因子分析すれば上位にこの4因子がでてくるはずなのです。

GPなどによる対応表があるので,それをターゲット行列にしたプロクラステス回転をする,いやそんな面倒なことをしなくても,モデル化した確認的因子分析をすればよろしい。

そうすると,当てはまりのよさが評価できることになる。もしかしたら,共通性の低い科目が出てくるかもしれないが,それはよくないことで,教育学部の教育方針にそぐわないことをしているんだから,もっと共通性が高くなるような授業の工夫をしなければならない。あるいはGPの表によると因子負荷量が高くなるはずのところが、違うGP因子にのっていたら,講義方針を変えてもらわないといけない。いやいや,もっというと,4因子構造が間違っているかもしれない。実際の分析をしてみたら,データから3因子が正しいとか12因子が正しい、ってことになってくるかもしれない。

懸けてもいいけど実際にやろうもんなら,想定した因子構造にはならないですよ。そうすると大学では何を教えていたことになるんでしょうね?負荷量や共通性が低い授業に対して指導が入ることになりますか?それも現実的じゃないと思うね。大学教員は個人事業主みたいなところがあるので,専門性に基づいて単位を出す責任を負っているのだから,下手に授業の指導なんかをすると「私の専門性を否定するのですか!」ってな話になりますよ。

そういう人たちからは,次のような反論が出てくるんじゃないかな。

  1. 大学というのは一つの授業で教えるのではなくてカリキュラム全体で教えるのだ
  2. そもそも使命感や愛情,対人関係力は測れるものではない
  3. そもそも使命感や愛情,対人関係力は教えられるものではない

しかし,1については,カリキュラム全体のアルファ係数の検証も必要だけど,共通性・負荷量が低いままでいい根拠にはならないよね。2については,じゃあどうやって測定するんだって言う話になる。もちろん心理測定法ってのはそのための技術なんだけど,目に見えないものを測ろうとするときには真っ先に構成概念妥当性が検証される。つまり使命感の定義ってなんだ,ほかとどう弁別するんだ,ということをしっかり煮詰めていかないといけない。文科省がそれをやってくれているとは思えないなあ。3についてはそもそも大学で何をやっているんだという話になる。

 

今,意識の高い各大学がしようとしているこのことは,知らずにやっているんだと思うけど,こういうカリキュラムの因子分析をやっていることになるんですよ。そしてそれから考えられる議論の帰結というのもある程度見えている。そもそも,無理な話を投げつけられて,データ化・見える化したら見えた,というのはまやかしにすぎないんですよ。みんなわかってるだろうに。

下手なデータ化休むににたり。ゴミからはゴミしか出てこない(GIGO)。なんでデータ化したらそれでいいって思えるんかね?

もし本気でやるんだったら,教員全体がカリキュラムの各講義について,アルファ係数を上げ、寄与率・負荷量を上げるという方針で一致団結して授業改革を進め,一方で毎年のデータをもとに各係数をベイズ更新(ベイジアン因子分析)しながら講義の揺れを測定し,一定の範囲内におさめるよう教育を制御するという取り組みをすべきですな。少なくとも原理的にはここまでできることが容易に想定できる。もっとも,どの程度の分散を持つのが適切な大学なのか、社会なのかについてはまだまだ議論されてはないけれども。

はてさて,ほんとにそういうことしてくれますかね?みんなデータ音痴だからそれをしないのか,パソコン音痴だからそれをしないのかはわからないけど。

 

でも頼むから,予算を付けてスプレッドシートをPDFで出力するプロファイル・シート作成システムを作り,学生は各自それを印刷して,最後は教員のはんこを押してもらって事務に提出というくだらない運用方針を採用し,学生と教員の無駄な事務作業を増やしただけで本質は何も見えていない(だって本当は見たくないんだもの!)というオチにはしてほしくないなあ・・・。



サマーキャンプ2014

サマキャンは、山大心理の三大イベントの一つである(残る二つはミニ卒発表会と卒論発表会)。

今年度のサマキャンがこの土、日曜にあって、引率してきました。

バスで出発、下関市立青年の家にいく。
お昼ご飯は持参して、午後はリクリエーション。事前のアンケート調査から社会的イメージをあてるクイズ大会、卓球・バドミントン大会など。
夕方はバーベキュー。

非日常的環境下における学生の生態を観察するいい機会です。

明けて、今日は朝食の後、施設のつどいやお掃除などのイベントをこなしてから、プレルボールというやつをやった。

で、帰路はバスの中でDVD「リング」をみ流という流れ(最後に妙な心情になったw)

全体を通じて思ったのは、社会がやさしくなっていうということ。もちろん大学生だからなんだろうけど、スポーツが苦手でも楽しめるゲームであったり、直接ひとをきずつけないようにするような気配りが随所に張り巡らされているように感じた。

そして夜。
1年生と2年生が主体だから、基本的にお酒はないが、こっそりかくしもってくることもなく、消灯時間になったらみんな布団に入っていたのは驚いたw
普通積もる話?やゲームで盛り上がるんじゃないかw 普段10時半には寝ないだろうにw
見回りのつもりで学生の部屋をのぞいたら、みんなちゃんとねているので、「それでいいのか」と逆に言ったほどw

それから人狼ゲームをやろうとなったのだけど、そこでの人間関係の駆け引き、読み合い、だまし合いはそこそこレベルが高いようにおもった。
夜中まで素面でゲームする中で、「お酒なんて何がいいのかねえ」という話題が出るのにもおどろいたなあ。

お酒なんていいことなんてなにもないですよ。
夜更かしなんていいことなんてなにもないですよ。
人を評したらきずつけるし、きずつくよ。
能力差が出れば、傷つけるし傷つくよ。

そのへんが、うまいなあと思うと同時に、とても綺麗ですてきな夜に、ふしぎなかんかくをおぼえたのも事実。

時代が違うのか、人が違うのか。
いい人達だけの世界がこれから来るのかな。だとしたら、こわな、すこし。

最後の挨拶で教育心理学コースとしては、これで最後になるけれども、いつまでもダラダラとぬるいサマキャンを続けたいですね、というのがあって、なるほどなあとおもった。メリハリがはっきりしないこと、これもいいことなのかもしれない・・・。

少なくとも、硬くなる一方の世界よりは、ね。



広島ベイズWSでベイズ因子分析の話をしてきました

昨日は魁!ベイズ塾とDARMによるマルコフ連鎖モンテカルロ法WS(MCMCWS)がありました。

そもそもどういう話をしようか,という打ち合わせの場に居合わせなかったもので,ある日Twitterでメンショんが飛んできて「@kosugittiは因子分析」とだけ書かれていたのが始まり。

ベイズ推定は何となく分かってましたが,それを因子分析に使うときにはどういう仮定,分布を考えるのかとか,長所短所はなにかとか,実際にどうやって動かすのか,といったことは知らなかったので,慌てて勉強。因子分析大好きっこだからご用命されたのであって,知りません・分かりませんでは恥ずかしいからな,と。もう必死ですよ。

忙しい合間を縫って,一ヶ月半ぐらい頭の中でずーっと「どうしようどうしよう」と考えてましたが,まあ終わってしまえばいい思い出。あとでスライドや資料はまとめてこのサイトにでもアップします。

 

他のメンバーは,比較的基本的な所だったり専門的な所だったりで,事前に資料を拝見した所,とっても分かりやすく丁寧だったので,これはいいなあと思っていたが,懇親会で聞いたら他の人たちも「この日のために必死に勉強した」とのこと。またまたご冗談を。

とにかく,とりあえず使ってみよう,こうやって報告してみようといったMCMCを初心者向けに実践を解説するワークショップは,本邦初ではなかったかと。Ustの視聴者もmax200人ぐらいいたそうで,大盛況,大成功でした。

 

あー,楽しかった。



季節の変わり目

週末から体調が悪い。胃腸がちゃんと働いてない。膨満感+下痢。けだるさ。原因は次の二つ。

イベントと締め切りが詰まっているので,疲れがたまっているのが一つ。とくに肩こりがひどい。

空腹時にお酒を飲んだので胃が荒れてしまったのが一つ。週末は久しぶりに悪酔いした。

 

去年も暑くなりはじめの時期に,クーラーをきつくかけすぎて自律神経を狂わせたことを思い出した。そんなことになったのは去年から。アラフォーの恐ろしさよ。

来年の俺はこの記事に気づいてこの時期を慎重に過ごしてくれるだろうか。



未来が少し近づいている

偶然なんだろうけど,この半月の間に4回もビデオ会議(オンライン会議・ビデオ会議)に参加している。

Skypeでやったり,シスコのWebExでやったり,Google Hungoutでやったり。研究室にいながら、カメラを通じて遠くの人とミーティングできるというのは,移動のコストを考えるととても便利なことだ。子どもの頃に夢見た未来の姿が,ずいぶんと身近になったものだ。急に増えたから驚くけど,技術が導入されて便利だと思ったら、普及は一気にやってくるよね。私企業ではもう当たり前のことなのかな。それともまだちょっと進んだ子(アーリーアダプター)だと言えるのかしら?

さて,やっていていくつか気づいたことがある。具体的には次の通り。

  • 研究室に来客があるといけないので、ドアを閉めて、Do not disturbの掲示を張り出すようにした。でもこれ,直接訪問に来た人に悪いな、と思う。
  • 電話が鳴って驚いたことがある。出る訳にも行かないので鳴らしておいたが,マイクが結構音を拾うので、画面の向こうで「なんだなんだ」ってなって「すみませんすみません」ってなった。今後は電話線抜いておかないといけないのかな?
  • 向こうが一人一つのマイクを持っていないような環境(向こうはリアルに人が集まっている会議で,数人だけビデオで参加している等)だと,座席配置によっては相手方の音が聞き取りにくい。近い人の声はうるさいぐらい聞こえるんだけど。で,こちらは画面に耳を近づけて,必至に聞き取るので,会議終わりにちょっと疲れを覚える。
  • カメラの位置,うまく調整すればいいのだが,バストアップで映り込もうとすると少しふんぞり返ったようになっちゃう。かといって前屈みになると,カメラにおでこや頭を近づける感じになるので美しくない。ちょうど良いカメラアングルに設定することはできないものか。
  • Google Hungoutだと,パソコン画面の共有ができて,画面を見ながら・見せながら話ができるのでとても便利。Google Docsをつかってメモを共同作成しながら話をしたりもできるので,いいよねこれ。特に画面に耳を近づけているシーンは映像として先方に送らなくていいので,何か別の画面を映しておけばいいのです。
  • Google Hungoutのエフェクトをつかうと,顔にひげをのせたり背景にビーチをはめ込んだり,というCG合成ができて,暇なときに遊べた。

こうした一長一短はあるんだけど,ともかく田舎から数時間かけて2時間の会議のためだけに移動,ということをしなくて済むので便利だと思う。一方で,こういう会議をすればするほど、オフラインでの会議が大事だと思うし,オフラインでやるんだからもっとうまくやろうよ,と思うこともある。

 

ある会議では,別れ際に「次に(実際に)会うのはいつだっけ・・・フランス?じゃあ次はフランスで」という挨拶をした。なにこれ,かっこ良くない?

 




top