草薙の研究ログ

英語の先生をやってます。

自分の居場所とラズベリー・パイ(1)

私を死に至らしめる電子機器たち

ヴォオオオオオオオオオーン けたたましいファン音

毎日,私は私に割り当てられた大学の部屋に入ると,革のクラッチバッグ(鞄大好き)から,財布,携帯,タバコ,鍵束を取り出して,所定の網棚にセットし,ワークステーションの電源を入れる。おっさんがよくやるという非人間的なまでに固定化されたルーチンワークだ。

このワークステーションは,CPU: Xeon,RAM:100GB,HD:2T RAIDWindows 10ホスト,実際は大概仮想デスクトップでLubuntuを開いていることが多い)とかそういうものなので,起動すると,ヴォオオオオオオオオオーンとかそれはもうけたたましいファンの音が部屋に響き渡る。ワークステーションってのは最初からそんなもんなのだけど,これには正直鼓膜が破れそうだ。このPCは私には大きすぎる。身に合わぬものは持たぬことだ。

「このけたたましい音は,遠くない未来,きっと俺を殺すのだろうな」とか軽く文学を嗜む人になった振りをしてみたりもする。それくらい,この朝一のヴッホホーン(長いから短い呼び方に変えた)は結構くる。このヴッホホーンは,世のひとがよくそうするように毎日つけっぱなしでもいいんだけど,とにかく自分は帰るときには消すようにしている。このヴッホホーンの断末魔,「フォフォフォフォォォ…シューン」を聞くと今日も終わったと安心できるし,なんか生き残ったのは俺だ感があるから。ヴッホホーンからのフォフォフォォォ…シューン,これが私の1日の中で唯一特筆すべきことである。

フォーンという間抜けなファン音

なら別に,そんなたいそうなヴッホホーンをやめればいいんじゃないかと思って,i3,RAM 8Gくらいの普通のデスクトップ(OSはLubuntu)もあるので,それを使おうと思ったこともあった。しかしこいつも毎朝,起動ボタンを押すたびに,フォーン!とかいう最初の換気みたいなの(吹き抜け?)をしやがる。フォーンじゃねえよ。朝一でフォーンとかいわれる気にもなれっていうんだ。こっちは3コマとか4コマとか授業あるぞ。お前がやることといったら,フォーンっていうだけじゃないか,みたいな。

もういいや,ヴッホホーンもフォーンも,お前らのことは正直好きじゃない。そう思って,どうせ自分なんかPCで大したことするわけじゃないんだ,もうノートPCだけでいいじゃないかみたいな。ノートPCは,10年くらい前から大体レノボ製品(ThinkPadシリーズ,Yogaシリーズ)を中心に何台かもつようにしている。もうThinkPadだけでいいか。

ThinkPadの強そうな感じ

しかし,このThinkPadも,起動すると画面いっぱいにLENOVOというロゴがあがってくる。このロゴはなんていうか,すごく強そうだ。ロゴというかそれ以前に,筐体が黒くて,硬そうで無骨で,俺は戦うぞ!俺はやるぞ!みたいな言い知れぬ雰囲気がある。昔はそれがちょっと好きだったのかもしれないけど,三十路のおっさんは,これだけでももう気分が滅入る。

ThinkPadはダメだ。私はもう,正直なにとも戦いたくないのだよ。それに最近のThinkPadはTとかXとかの高級機でもなぜか赤茶げてきているのもいただけない。この赤茶げた色は,日に焼けた健康的な筋肉質の身体,それも戦士のそれ,を連想させる。…そんなものはダメだ。女性にモテそうな,エロく黒光りするマッチョイケメンのようじゃないか。一方,私は白豚だ。自分の惨め感を増やすだけだ。

MacBookの気高さ

そこで,ずいぶん長きに渡って敬遠していたものだけど,思い切ってMacBook Airなる筐体を試すことにした。さすがに今季のMacBookは小さくて無理,Proもそのバッテリーのコスパとかを考えるとAirがよかった。スペックからみてかなり安いし。

Apple製品はやはり上品で美観も整っている。しかし,この上品なMBA,開いた瞬間に曲線の美しいAppleロゴがでてくる。それだけでなく,なんか「じゃ~ん」みたいなキモい音もして(この音は私が大嫌いな,(a)仕事もできて,(b)容姿にも優れていて,そして(c)生活も充実している種の人間,を想像させる),キーボードのバックライトが後光の如く光ったりしている。

このAppleロゴの輝きやこのキーボードのバックライトの光は,絶対に私を焼き焦がすよ。眩しい,眩しすぎる。光を浴びると死ぬ吸血鬼のように,やはりApple製品には触れないようだ。私は,この下品な芸風を売りにしている。まさに,「お前みたいな下賤のものが触ってよいものではない」。そういわれているようだ。毎日がそれじゃ流石にこたえる。それに,第一,使い方がぜんぜんわからない。Mac OSは,apt-getじゃなくてbrewしろとかよくわからない。

もはや私には居場所がない

私の居場所には,もう耐えられるものがない。最近はスマートフォンも嫌になった。この太い指で押せるわけのないソフトウェアキーボード,5インチとか。片手でもつにはちょっときつい大きさ,中に入っているものも見てみても,Chromeとかいう怖いブラウザ,googleカレンダーとかいう拘束具,そしてgmailという恐怖。私のストレスの90%はgmail。残りの10%をChromeとカレンダーで占めている。大体それ以外は,本質的にはいらないものだ。いや,LINEがあった。これは去年教えてもらったのだが,家族と連絡を取るのに使っていて,今の家族(家内と母)にストレスはない。

しかし,Chromeを一度開こうものなら,目に入ってくるものはおびただしい数の広告,動画,写真,色。というか,情報,情報,情報。この情報の波はまさに自分を殺そうとしているように思えてくる。これがいやでいち早くSNSはやめた。最近のインターネットとは実に不思議なことで,必要な情報だけを得ようとして使っている道具なのに,必要な情報以外の情報の方が圧倒的に多い。この圧倒的な情報に,サルトルのような気分になってしまう。ゲロゲロ。多分,自分程度の情報処理能力じゃ,現代的な生活にはついていけないんだな。

うーん。…こんなはずじゃなかったのにな。不思議なものだ。色々と昔を思い出してしまったりする。

私は東北の農家に生まれたのだった。私が生まれ育ったところは,こんな壮絶に生きにくい世界じゃなかった。家には牛やら鶏やらなんやらがたくさんいて,敷地の池には鯉が泳いでいた。もちろん,犬や猫も兄弟同然だった。聞こえる音は甲高い機械音や,けたたましいファンの音ではなくて,家畜や蛙の鳴き声,鳶の甲高い声。風の音。風でなびく木の葉の音。地鳴り。そして,人の声。

新品のMacBookはアルミのような金属臭がする(それがいいらしい)が,私の家はサイロ臭かった。玄関を出てすぐ視界に入るパノラマの山は,日に日に姿を変えていったし,それを見て私は,ここはなんて美しいんだ,ここで何十年か生きて,そして死んで,いつかここの土が私を作ったように,ここの土に還って,それを何回も何回も繰り返そう,と心に誓った(私は大概話半分でちょうどいい)。私まで至る,血を共有する過去の男たちと同じように,ありきたりにも,山の神さまと私もそんな約束をした…はずだった。(あ,おおげさな言い方してますよ?)

そんな人生観とか,大自然の美しさ,などとはいわなくても…はじめてパソコンを触ったのはいつだったかな。まあ,冷静に考えれば間違いなく90年代だった。小学校にあるDOS/Vを触らせてもらったのだった。Windows 95は,小学校のとき買ってもらった。そこから,98,XPと触った。10代の最後だったか,今はなきSharpMebius,しかもムラマサを得た。当時のムラマサは,「開いてドヤ顔」できる製品だった。触っているだけで幸せだった。DOS/Vも,近づくだけで心が踊った。ブルースクリーンになったとき,それだけでハラハラ・ドキドキした。目の付け所がシャープだった。

今,どんな製品でもそんな気分にはならない。昔はあんなに大好きだったのに,今,電子機器は俺を精神的に追い立てるだけだ。

 

そんなことを思い出してたとき。

「…そうだ。昔はなんでもシンプルで,そして同時に複雑だったんだ!」

と思い出した。自分の居場所はシンプルで,そして同時に複雑でなくてはならない。シンプルさの中に複雑さがあって,複雑さの中にシンプルさがあった。シンプルなことを複雑にやっていたし,複雑なことをシンプルにやっていた。ああ,そうだ,今の自分の居場所に足りないのは,美としてのシンプルさと気持ちよさとしての複雑さだ。なにかわかったような気がした。これがGWくらいのこと。

秋葉原へ出撃してRaspberry Piをゲットせよ!

そうか,もしかしたら,私が最近気になっている一種のもの,たとえば,Raspberry Pi(ラズパイ)は,私の原風景にあるシンプルさと複雑さを兼ね備えているのではないか。ラズパイは,昔の私を取り戻そうとしてくれているのではないか。そんな発想に至った。飛躍どころのレベルではないことを,自分でもよくわかっている。唐突だが,でもこれ以上はない確信だ。そうだ。ラズパイだ。ラズパイで俺は救われるはず。

思い立ったら,吉日だ!ということで先週の日曜,秋葉原に出撃した。たまたまなにかで東京に用があり,その後空いた時間に秋葉原に向かった。

考えてみると,秋葉原は丸1年ぶりだった。東京に来るたび(今のペースだと年10回くらいある)に,靖国神社秋葉原に繰り出す。泊まるところは後楽園にある,安いホテルと10年前から決めている(今では常連になった)。

さて,私は駅につき次第,中国から来たであろう観光客に道を聞かれてもガン無視(厳密には中国語で返すと発音が下手なのか笑われる案件が続いて敏感になっているので,中国語でわかりません,ごめんとだけいってすぐ去る)で千石電商さんへ足早に向かった。千石電商さんの店舗に入ると,さっそくRaspberry Pi2 Model Bをマッハで手にした。ラズパイゲットー!!(5,000円くらい)

一通り,あきばお~さん,ドスパラさん,じゃんぱらさん,ソフマップ,インバースさんとか,そして色々専門店を周り,

  • Pi2専用ケース(500円,でもラズパイは裸でもいいよね)
  • MicroSDカード(8G, Class10でも今は1,000円切るくらいの相場)
  • HDMI-VGA変換アダプター給電付き(HDMI-VGA変換はたまに電力不足になるので給電つきがいい,ラズパイ2は1Aなので不安だった,1,000円くらい)
  • AC電源アダプター(合計8A,USBポート4,各2.4A最大,1,000円くらい)
  • MicroUSBケーブル(20-30本持っているけど,ちゃんと1A以上出るか心配だったので,新しいのを3本買った。もちろん,給電チェッカーで確認済み)
  • GPIOボード(これについてはいらないけどいつか投稿)
  • 感応センサー(これについてはいらないけどいつか投稿)

などをゲット。秋葉原といえば雁川の牛すじチャーハン!ということで牛すじチャーハンをお昼に食べて広島へ帰った。

…そうだ,これで私は自分の居場所を取り戻すのだ。私はこれで救われる。

(続く)

平均への回帰をわかりやすく例える

なんか平均への回帰ってことばはよく知られているものの,外国語教育研究界隈では,ときに難しいとされていて,そして研究実践においてもものすごく大事なことなのにあんまり重要視されていない気がする。まあ確かに,頑張って教科書読んでも,「相関係数が1ではないということに他ならない」とか書いてあるし。


さて,平均への回帰というのは,たとえば2回テストするとして,1回目のテストで成績がよくないひとは,2回目のテストではよい成績をだすっていうだけの話なんだけど,これってピンとこないかな。

別にこれって正規分布に限ったことじゃないので,サイコロの話をする。


サイコロを30人が2回投げる。

  • 一回目投げて目が1だったひとにとって,次の目が今よりも大きい確率は5/6。
  • 一回目投げて目が2だったひとにとって,次の目が今よりも大きい確率は4/6。
  • 一回目投げて目が3だったひとにとって,次の目が今よりも大きい確率は3/6。
  • 一回目投げて目が4だったひとにとって,次の目が今よりも大きい確率は2/6。
  • 一回目投げて目が5だったひとにとって,次の目が今よりも大きい確率は1/6。
  • 一回目投げて目が6だったひとにとって,次の目が今よりも大きい確率は0。

このとき,2回目の目-1回目の目の期待値は,サイコロ投げの期待値が常に3.5なので,3.5 - 一回目の目。なので,グラフにすると,

f:id:kusanagik:20170302212443p:plain


これで,1回目1の人だけを集めて,2回目と1回目の目の差の平均値をもとめたら2.5なわけね。これが0ではないかと検定したりしたら,標本サイズによって当然有意になるでしょう。でもこれは,新しいイカサマサイコロに持ち替えたわけではない。

一回目の期待値,というかサイコロの期待値はもちろん,

f:id:kusanagik:20170302212607p:plain

うん。これだけの話。これ,別の分布でも同じ。


基本的にこれは完全に独立なサイコロを2回投げるからシンプルなんだけど,基本的には相関係数が1じゃない限りこうなる。


外国語教育研究が例外ではなくて,むしろ同じようなことが色々と起きる。



事前―事後でTOEICのテストの点を取ったとする。このとき実は差得点の平均値が0とする。

事前の成績を並べて下から33%のひとだけに検定したら,そりゃ有意になるだろう。このサイコロと全く同じことが起こる。

事前の成績で並べなくても,事前または事後の成績と相関が高い別の変数で並べても似たようなことが起きるのは当たりまえ。

ある読解テストを事前事後に実施して,読解テストと相関が高いTOEICスコアをカテゴリカルにして層別に検定してもそう。

これで成績下位層の子に特に効果がある指導法!というハッピーな指導法が世の中にたくさんになったらハッピーなのかな。

その度毎に,研究仮説に「熟達度の効果がどうなるかわからないから調べる」とか後付けで足して(HARKingして)そういう研究がいっぱいになればハッピーなのかな。

Rで混同行列から感度・特異度などの指標

例えば,何かの指標なりモデルを用いて,
二値的に何かの状態がある(陽性)かない(陰性)かを検査する方法を作るとする。
そのパフォーマンスは以下のような真の状態と検査結果の混同行列を見るとわかる。

この場合の混同行列は,

真の状態が陽性 真の状態が陰性
検査結果が陽性 真陽性 偽陽性
検査結果が陰性 偽陰性 真陰性

っていうかんじで,ここから,

  • 適中率/Accuracy(全体の内,真陽性と真陰性が占める割合)
  • エラー率/Error Rate(1-的中率)
  • 感度/Sensitivity (真の状態が陽性であるもののうち,陽性と判断できた割合)
  • 特異度/Specificity (真の状態が陰性であるもののうち,陰性と判断できた割合)
  • 陽性適中率 (陽性と判断したもののうち,真の状態が陽性である割合)
  • 陰性適中率 (陰性と判断したもののうち,真の状態が陰性である割合)
  • 陽性尤度比 (真の状態が陽性であるひとが陰性であるひとよりも何倍検査結果が陽性になるか)
  • 陰性尤度比 (真の状態が陰性であるひとが陽性であるひとよりも何倍検査結果が陰性になるか)

といった指標が与えられる。
当たり前だけど,完全によい検査ってのは実現しにくくい。
感度をあげようとすると特異度が下がるような場合がほとんど。
これらの指標のバランスを実務的状況から判断して適切に保たなければならない。

私には実務的にこれをやらなければならない案件がある。もちろんRにはこれらの指標を与えたり,さらにROC曲線を描いてくれたりするパッケージがいっぱいあるんだけど,これらを調べるよりも自分でコード書くほうが絶対楽なんで,自分で書いてみた。混同行列を与えたら以上のものを全部返す。

my.indices<-function(CM){
	Rate<-CM/sum(CM)
	TP<-CM[1,1]
	TPr<-Rate[1,1]
	FP<-CM[1,2]
	FPr<-Rate[1,2]
	FN<-CM[2,1]
	FNr<-Rate[1,1]
	TN<-CM[2,2]
	TNr<-Rate[2,2]
	Acc<-(TP+TN)/sum(CM)
	Err<-1-Acc
	Sens<-TP/(TP+FN)
	Spec<-TN/(FP+TN)
	PPV<-TP/(TP+FP)
	NPV<-TN/(FN+TN)
	LRP<-Sens/(1-Spec)
	LRN<-(1-Sens)/Spec
	
	Result<-list(
		"Confusion Matrix"=CM,
		"Confusion Rates"=Rate,
		"Accuracy"=Acc,
		"Error Rate"=Err,
		"Sensitivity"=Sens,
		"Sepcificity"=Spec,
		"PPV"=PPV,
		"NPV"=NPV,
		"LR+"=LRP,
		"LR-"=LRN
		)	
	print(Result,digits=3)
}

こんな感じ。

my.indices(matrix(c(50,8,321,650),2,2))

$`Confusion Matrix`
     [,1] [,2]
[1,]   50  321
[2,]    8  650

$`Confusion Rates`
        [,1]  [,2]
[1,] 0.04859 0.312
[2,] 0.00777 0.632

$Accuracy
[1] 0.68

$`Error Rate`
[1] 0.32

$Sensitivity
[1] 0.862

$Sepcificity
[1] 0.669

$PPV
[1] 0.135

$NPV
[1] 0.988

$`LR+`
[1] 2.61

$`LR-`
[1] 0.206

うむ。

ゼロ過剰ポアソン分布をデータにフィットさせる

ゼロ過剰ポアソン分布では2つのプロセスが考えられている。まず,最初に0の確率がσである二項分布で,値が0でないときのカウントデータがμに従うという。統計モデリングにおいて「ゼロが多いときに使うといい」とはよく聞くものの,厳密にいえば,このような二段階の過程が十分に考えられる事象を対象にするといいと思う。そして,殆どの場合は,先んじている0かそうでないかということにはあまり関心がないときに。

#使うパッケージ
library(fitdistrplus)
library(gamlss)

#ある実測のデータ
d<-c(0,5,6,0,1,8,0,2,0,1,4,2,0,3,8,9,1,1,0,10,1,2,0,2,11,3,0,8,5,11,3,8,8,8,14,7,8,6,5,1,8,7,2,0,6,8,3,3,0,6,2,11,2,0,0,0,0,0,0)

#可視化
hist(d)

#0の割合
length(d[d==0])/length(d)

#まずはポアソンを普通にデータにフィット
fit.pois<-fitdist(d,"pois")
summary(fit.pois)

#次にゼロ過剰ポアソン分布をデータにフィット
fit.ZIP<-fitdist(d,"ZIP",start=1)
summary(fit.ZIP)

#2つのモデルを比較してみる
gofstat(list(fit.pois,fit.ZIP),fitnames=c("Poisson","ZIP"))

#これではσを出してくれない。gamlssを使う
fit.ZIP2<-gamlss(d~1,family=ZIP)
fit.ZIP2


うむ。

わーい!どんなときでも有意差を見つけられるフレンズなんだね!

「思ったように有意差が出なかったんですけどなにかこのデータから言えることはありませんか?」

「どんなデザインですか?」

「処置群・統制群,事前・事後,成果変数は1です」

「そうですね…まずは処置群を恣意的に何パターンかに分割してみましょう!そうするとそれぞれのグループの標本サイズが減るし検定が多重になるので,事前事後の得点差について第一種の過誤の可能性が高まります!まあ4-5グループに分割したら,有意水準を補正しない限りどこか有意になるでしょう!これが王道です」

「はい!」

「その後に,さもそのパターン自体に最初から興味があったように研究仮説自体を改定するのです!これはHARKingと呼ばれる有名な技法です!」

「先生,大変です!性別,学年,事前の得点,学校,恋人の有無,そういった変数で分けたグループでも,どこにも有意はありません!」

「安心してください!まだ手はあります!今度は事前と事後で伸びたひと,伸びなかったひとの数を,手持ちの2値のデモグラフィック変数すべての組み合わせについてカイ二乗検定を別々にするのです!別々にやるのが大事ですよ!」

「先生ぇ…どこも有意になりません」

「大丈夫!まだ手はあります!外れ値だとして,事後得点の下側のひとりずつを外していき,それぞれのステップで何度も検定をして,有意になったときにやめてそれを報告するのです!」

「先生ぇ…ダメですぅ」

「そうですか,ではまず10個のデモグラフィック変数をすべて投入してクラスタリングをしましょう。まずは階層的クラスタリングを何回も繰り返して,有意になる階層でやめましょう。それでダメならクラスタリング方法を変えましょう。それでダメなら,k-means法,それでダメなら混合分布モデル,それでダメならクラスタリングに入れるデモグラフィック変数を減らしていきましょう。方法や,入れる変数の組み合わせで考えると無数にパターンができますから,どこかで必ず第一種の過誤が起きるはずです」

「先生ぇ…どうしましょう」

「(まじかそろそろ有意水準いじろっかな…)いえ!まだまだ手はあります。そもそも成果変数はなんですか?」

「英語のテストの点です」

「そうですか。項目数は?」

「30です」

「よかった,では項目分析をして,弁別力がなかったり信頼性を下げたりする項目をひとつずつ減らしてその度毎に検定をするのです!そして有意になったらやめるのです。なあに,その項目はなかったことにするか,materialのところにテストの質の観点から予め外したと書けばいいのですよ!もうなんなら全項目別々に検定したっていいくらいだ!」

「先生,外していったら項目がなくなりました…」

「(おいまじかよ)こんなことは数学的に絶対無いはずですが…ううむ」

「わたしはもうダメでしょうか…」

「大丈夫です!その被験者にまた来てもらって新しくテストをやりましょう!遅延テストといえばいいのです」

「…それはできなさそうです」

「では,どんなデータでもいいから被験者について知っていることはありませんでしたか」

「ええと,実験ノートに実験中あくびをした人をメモっておきました。靴下の色もメモってますよ!」

「素晴らしいですね!そのあくびをした数人を外して分析すると?」

「あ!あ!先生!有意です!やっと有意になりました!先生ありがとうございます!私の研究に有意差がありました!」

「わーい!有意差だ!先生はどんなときでも有意差を見つけられる先生なんですね!」

「たーのし―!」

 

*この記事はQRP(quetionable research practice)およびHARKing(研究仮説の改定),そして(本来するべきではない)事後的分析において無理に有意差を見出すことの悪質さについての理解を(私自身が)深めるために書いたものです。

モデルの中で何が捨象できるかを語らない科学

数理モデルというものは,その記述の仕方の形式性の割には,数理モデルということばに親しみを感じないほとんどのひとが思うより,本来結果主義的で効用主義的なものだ。

モデルは,もちろん現象それ自体ではないし,その現象を大幅に捨象していて,しかしそこから得られる予測や知見が有益だと見込まれているものだ。この「有益だ」という考え方は一部の学術分野にはないこともあるが。

人文社会系のほとんどの数理モデルは,世界が数字に支配されていて,その世界の斉一的な決定則を表すものだなんてことを意味しない。せいぜいが「観測がうまく当てはまる」,「うまい数理的な近似になっている」という程度の含意である。しかし,そのモデル(世界の決定則それ自体ではない)について考えることで,人が適切に意思決定をできたり,そして個人間の合意が得られ,判断の公共性が発生する(たとえばある種のエビデンスになる)というに考えられている。

 

たとえば,TOEICのスコアは大学が自前でやっている単語テストの成績から予測できるとする。

y = ax + b

という簡単なモデルを考えて,

TOEIC = 8.5×単語テストの得点 - 120

とか,そんなふうに。

このモデルは,それがうまくTOEICのスコアを予測できるとか,つまりこの現象のいい数理的な近似になっていれば,まあいいモデルだといえる。

 

ただし,このとき,TOEICは単語の力だけではないのだから,このモデルは世界の斉一的な決定則の記述として不完全だ!というのはちょっと勇み足だと思う。

TOEICは単語のテストだけではない!とか。

もっというなら,TOEICのときの部屋の温度をモデルに取り入れるべきかだとか,世界の斉一的な決定則を考えれば無限にそんな要因はありえる。

数理モデルを扱う人がもつ,結果主義というか,もっと大きくいってプラグマティズム的な考え方の下では,単にこのモデルはそれらを捨象しているのである。線形モデルなら,それら全部をひっくるめて誤差(残差)として考える。

 

ここで問題は,何が捨象できるかそして何を積極的に捨象するべきかということになる。

 

…外国語教育研究やその関連分野である第二言語習得研究が扱ってきた変数や現象は莫大であり,確かに複雑極まりない。もはや還元主義の傾向が強いテーマに関しては指数的に用語が増えていっていて,収拾付かない例もある。

だからこそ,なにが捨象できるか,そしてなにを捨象するべきか,という考えが今後重要になってくると思う。

そして個人的には,大局的に人間の意思決定や判断の合意形成や公共性の創出という点から見れば,捨象できるものはずっとずっと多いと思っている。

…世界の斉一的な決定則それ自体を考えるならば,むしろなにも捨象できないとも思っている。