草薙の研究ログ

英語教育関係。でも最近は統計(特にR)ネタが中心。

brmsパッケージでカーブフィッティング

計量言語学のMenzerath-Altmann法則をbrmsで。

(a)y = ax^{-b}e^{-cx}

s<-1:5
m<-c(3.1,2.53,2.29,2.12,2.09)
dat <- data.frame(s, m)
my.prior <- prior(normal(0,3), nlpar = a) + prior(normal(0,1), nlpar = b) + prior(normal(0,1), nlpar = c)
fit <- brm(bf(m ~ (a*s^-b)*exp(1)^(-c*s), a + b + c ~ 1, nl = TRUE),
	data = dat,
	prior = my.prior,
	save_all_pars=T)
summary(fit)


f:id:kusanagik:20180914171856p:plain


f:id:kusanagik:20180914172534p:plain

これ,データポイントが少ないから,事前分布の設定がすげえ問題だよね。
適当に,

  • a ~ Normal(0,3)
  • b ~ Normal(0,1)
  • c ~ Normal(0,1)

とかにした。実際に-1とか1とかの値を取ることがほとんどないbcはともかく,このaの設定は恣意的といわざるをえないけど。
ちなみに,より簡単な,

(a)y = ax^{-b}

ベイズ因子やWAICで比べてみるとか。

my.prior <- prior(normal(0,3), nlpar = a) + prior(normal(0,1), nlpar = b)
fit2 <- brm(bf(m ~ (a*s^-b), a + b ~ 1, nl = TRUE),
	data = dat,
	prior = my.prior,
	save_all_pars=T)
summary(fit2)

f:id:kusanagik:20180914172915p:plain

f:id:kusanagik:20180914172933p:plain

bayes_factor(fit,fit2)
waic(fit, fit2)

fitがfit2より高かったけど…微妙。

AtomからRを使うための設定(Ubuntu系OS)

お気に入りのエディタからなにがなんでも出たくないという病気。
ここ3年はAtom推しなので,今回はAtomからRを使用する環境を作る。

環境は,Lubuntu 18.04 LTS。
でも別にこのOSがなにか特別なわけじゃない。

これまでAtomからRを使うときは,Atomのパッケージである,

  1. language-r
  2. autocomplete-r
  3. build-rscript

などといったものを使っていた。
詳しくは,こちらの記事の通りに。

Atom - RjpWiki

というか,buildがめんどくさくて,もうterminalをペインに開いて打っていたけど。

でも最近,Atomでrboxというパッケージができたらしい。
これはちょっと便利そうじゃないのー。

atom.io

基本的な方針としては,

  1. Rをインストール
  2. Jupyterをインストール
  3. Atomをインストール
  4. JupyterにR言語を対応させる
  5. AtomにJupyterを対応させる

というような手順。Jupyterを経由するという発想。

  1. JupyterとRの対応は,RからIRkernelを入れる
  2. AtomとJupyterの対応は,AtomからHydrogenを入れる
  3. 最後にrboxを入れる

ま,そのままJupyterを使ってもいいんだけど,個人的にAtomでやりたい。

さて,順番にコードを書いていく。

コンソールからRを入れる

sudo apt-get install r-base-core

Jupyterを入れる

sudo apt-get install jupyter

Atomを入れる

sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get update
sudo apt-get install atom

IRKernelのための準備

sudo apt-get install libzmq3-dev libcurl4-openssl1.dev libssl-dev

RからIRKernel関連を入れる

install.packages(c('crayon', 'pbdZMQ', 'devtools'))
devtools::install_github(paste0('IRkernel/', c('repr', 'IRdisplay', 'IRkernel')))

IRkernel::installspec()

Installation · IRkernel

これでJupyterとは対応されるはず。

jupyter-notebook

と打って,ブラウザ上からNewを開いて,Rが追加されていることを確認。
あとは,Atom上で以下のパッケージを入れる

  • rbox
  • hydrogen
  • atom-beautify
  • termination

これでOKなはず。

ひとに統計相談をするための8つの基本的なTips

その1:データや資料を必ず用意する

統計を得意とするひとであっても,実際のデータやそれに関する資料などが,手元に全くない状態において,(しばしば不正確で非専門的ないい方による)文字や音声だけによる情報で正確に相談の意図を把握することは簡単ではないと思う。データや関連する資料をメールで事前に送ったり,面会する際は印刷して参照できるようにするほうが効率的だ。統計に関する参考書や自分の研究に関する先行研究もよい資料となる。

その2:できればデータを取得した後でなくて,事前に相談をする

ほとんどの場合がそうだが,有意差がでなかった,思うような結果にならなかった,ということについて「統計分析にその原因がある」と一意的にみなし,本来あった研究仮説と整合性がなくなるようなレベルで,モデルや分析法を変えたりするように統計相談をするひとがいる。これはほとんどの場合,被相談者にとって心持ちのよいものではない。実験・調査の事前段階でその計画について相談するほうが大抵は優れた研究につながる。特に研究仮説の書き直し(HARKing)につながるとみて,場合によっては相談自体をお断りされる方もいると聞いた。

その3:質問をできるだけ具体的に細かく分ける

たいていのことはそうなのだが,「大丈夫か」とか「問題ないか」とか「適切か」といった抽象的で曖昧な聞き方をするとあまりよい回答は得られない。たとえば,この計画は大丈夫か?というよりは,「標本サイズ決定の仕方を知りたい」とか「効果量はどの指標を使うべきか?」といった具体的な質問をリストアップするほうがよい。もっとも非効率的なのは「どうしたらいいですか?」だ。これはほとんどまともな返答をもらえない。相談を受ける方にとって,「こうするんだけど適切か」と聞かれたら「厳密には文句がない統計など絶対にない」というだろうし,その程度は非常に曖昧なものになってしまう。

その4:対価に当たる部分についてどのように考えるかを知っておく

相談を受ける側が対価を求めるわけではなくても,その行動にはそれなりにコストが発生しているわけで,それをどうするかは人による。まったく贈答品やお土産の類を受け取らない,論文等の謝辞などもすべて辞退するというタイプのひともいれば,遠慮なく受け取るひともいるし,ある程度以上であれば謝辞や著者権が正当だと思う方もいる。非常に難しい問題なので,事前に対価について相談を受けるひととスッキリしておく方がよい。たとえば,私が相談を受けるときは,対価にあたるものはできるだけ受け取らないようにしているし,謝辞なども辞退する方針でいる。高級なお菓子とかが食べたいからやっているわけではないし,謝辞などに勝手に書かれるのは非常に困る。「自分の勉強のためになりますので…」といって対価を拒むひとが相対的に多いと思う。しかし,だからといっていつでも無対価で頼むとひとによっては失礼になるかもしれない。

その5:自分の理解を超える分析を提案されたらそれを伝える

ときに相談をすると,「そういう問題のときは,こういう新しい分析がありますよ」という提案がある場合がある。そういうとき,その提案された手法を自分がしっかりと理解し,ある程度は著者として責任を持てるようにしなければならない。たとえば査読コメントでその分析について詳しく書くようにいわれたときに,書けないというのではよくない。相談を受けるほうからしてみれば,相談をする方が適切に理解しているか,または今後理解するかを見分けるのが難しいので,自分から「それはできそうにありません」としっかりと伝えるべきだ。まったく責任を自分で持てない場合,著者に入れるというのもひとつの考え方だと思う。

その6:エディター,査読者,指導教官などとの争いに巻き込まないようにする

これらのひとと,相談を受けるひとの方針が対立したとき,普通は相談を受けるひとはなんの責任も負うことができない。たとえば,ある分析をして,エディターがそれではだめだといったけど,「これは問題ないですよね?!」みたいにひとに相談をするのはよくない。けっして代理の喧嘩を頼んではいけない。特に学位論文に関わる際には,仮に指導教官よりも統計面に強いひとに相談したとしても,それが学位論文を審査する人にとって好ましい分析であるかはわからない。

その7:最終的な主張を伝えない

「この研究では,こういうことを主張するために…」というようなことを明確に伝えると,結論ありきの分析につながってしまいかねない。相談を受けるひとが忖度して,かなりQRPに近いことを提案してくるかもしれない。よくある話だけど,ある程度,統計をするひとにとって,有意差を無理矢理つくることは難しくない。非常に難しい問題だが,できれば統計相談の際も,結論を先取りするような態度を示していないか,慎重にありたいものだ。

その8:面会よりもメールにする

面会する場合よりも,文面の方が一般的に質の高いやりとりができる。面会時間よりもはるかに短いあいだで,はるかに質の高い返答をメールで送ることができるかもしれない。たいていは相談を受ける方も,書籍やネットなどでなにかを調べたり,なにかで実際に計算したりするので,ただ面と向かってしゃべっている面会よりは,そういった作業ができるようなメールのほうがよい。多分,メールでは失礼だ,とかお菓子渡したい,というように考えられる方が多いと思うが,そういうのはまったく別の機会でよい。行動の強化を図って即時に強化子たるお菓子を与えなければならないとか,そういうふうに考えない。

 

気軽に「説明」とはもういわない

説明

あいも変わらず,不勉強ゆえに,よく考えずに軽々しく,説明などという難しいことばを何度も使ってきたものだが(幸いなことにあまり自分の論文や原稿には使用例が見当たらなかったが),他人の使用はどうであれ,私はこの説明ということばを軽々しく使わないことを,死んだ愛犬のジョンに誓った。私が知る限り,少なくともこのことばは,かなりの頻度をもって,健全なコミュニケーションを妨げる。

演繹のこと

説明の科学的定義ともいったりするらしい。一般法則から個別の事象を導くことなど。これは,もっとひろく論理学的にいえば演繹のことだ。

妥当な推論であるところの「A(条件,または仮定)ならばB(帰結,または結論)である」とAが真であるということから,Bが真であると導くわけだ。

人間の会話を例にすると,「どうしてご飯を食べたの?」という疑問に対して,「だってお腹が空いていたんだ」と答えるのは,質問者と回答者の中で,「お腹が空いていれば(条件),ご飯を食べる(帰結)」を妥当な推論として先んじて共有した上で,回答者しか知らぬ条件「お腹が空いている(いた)」が真であることを回答者に知らせ,演繹によってすでに得られた帰結を再確認することだ。

つまり,議論に先んじて得られた帰結と,未だ共有されていない条件の下で,条件を伝え,帰結が演繹によって再確認できることを示す。

 

心理的帰結のこと

説明の心理学的定義ともいったりするらしい。この定義において説明とは,帰結主義的に,人間の主観および内観において,納得した,理解したという心的状態をもたらすこと,といった具合だ。たとえば,数理モデルで完璧な予測と制御ができる状態でも,それは説明したとはいわないというひともいるし,数式を読む人にとっては数式によって心理学的に納得したと感じるかもしれないし,自然言語でなにかのメタファーを使わなければ納得したと感じないひともいる。大概の場合,なんらかのメタファーと後述するアブダクションによって,納得したと感じるひとが多い。ある研究について,頻繁に「直観に合う」とか「面白い」とか「興味深い」という形容をされる研究者にとって,大概説明とはこの心理的帰結のことだ。草薙がこういうタイプの研究者を悪くいっている,と皺を寄せる方もいるかもしれないが,ここのいい方に他意はない。ただ,そういう方もいる,という記述を与えているだけだ。

 

アブダクションのこと

パースのアブダクションを論理のひとつとして認めるひともいるし,すくなくともこれが文字通り仮説形成という役割で,我々の研究においてものすごく重要であることは誰も疑わないと思う。しかし,くだらないかもしれないが,もちろん,アブダクションは演繹ではない。

アブダクションは,所与の帰結Bと,A→Bを妥当な推論とみなすことによってAについて推論することだ。もちろん,これはA⇔Bでなければ正しいという保証がない。ご飯を食べたという帰結と,「お腹が空いているとご飯を食べる」が妥当な論理であるとしたうえで,「お腹が空いていたのだろう」と推論することだ。

アブダクションがだめとはいわないが,これは演繹による確認という意味の説明ではないアブダクションは,数理モデリングではとてつもなく重要で,尤度とかベイズ推定という根幹をなす考え方なんだけど,もっともらしいということを説明とはいわない。

心(mind)一般について私が受け入れない理由はこれだ。私は一般に,(専門用語としての)心は行動からアブダクションされたものだと考えている。たとえば,英会話場面における発話数が少ないという帰結と,スピーキング不安が高ければ,英会話場面における発話数が少ないという(どこから来たかわからない)デカルト的な論理によって,(心としての)スピーキング不安が高いという条件をアブダクションしている。これは少なくとも演繹的な説明の科学的定義に沿うものではない。仮説形成であるとしても,心が見えないばっかりに,このアブダクションされた仮定や条件を直接的に調べる方法はありえない。

予測と統御

最近では,実データの予測と統御がある社会的文脈と歴史の上である程度可能であるという事実を説明と呼ぶという態度も見られる。私自身は,心理的帰結を説明に積極的に含めるならば,別にこれを説明とみなすこともまったくやぶさかではない考えなのだが,コミュニケーションを妨げるひとつ原因であると感じるようになった。*1

で,どうするか

演繹の場合は演繹,アブダクションの場合はアブダクション,予測と制御,そして心理学的帰結をそれぞれいいわける必要があると痛感している。以下のような使い方をする。

  • 結果は,論理Xと仮定Yによって演繹的に導かれる
  • この言明は,あるひとにとって,心理学的帰結としての説明をもたらす可能性がある(または,広くいってこの言明は効用をもたらす可能性がある)
  • 本論文は,観測されたXと論理YによってZという仮説を立てた
  • この数理モデルから得られる予測値は,観測データの優れた近似になった

ここまでのまとめ

これまでの「もういわない」は以下の通り。

  • 測定する
  • 客観的
  • 説明

…なので必然的に私は,これからの研究実践において,「客観的な方法でなにかを測定して,事象やその背景にあるメカニズムを説明する」ことはない。

 

 

*1:モデリングという考えについて話すときに,毎回「それは説明ではない」とか「それは予測ができるだけで意味がない」というコメントをいただく。何度も,ほぼ必ずといっていいほどこういったお叱りを受けるので,対応テンプレートを用意した。まず,前もって,説明とはいわないことだ。大概は,モデリングによる予測と制御によって,個人および集団の効用を高めることを目標とするといっておけばよい。事実まったくそのように考えているし,個人の心理的帰結としての説明を受け入れるならば,これを説明といわない境界線について考え始めなければならなくなるから。次に,予測ができないが納得する説明と,先生はなぜか納得はされないが完全な予測ができる説明では,どちらが経済学的な意味での成果になりますか?と聞き返すことだ。最後に,先生がおっしゃる説明や意味とはなんですか?と聞き返すことだ。大概これで嫌な顔をされるが会話は終わる

RでABAB計画のグラフ

応用行動分析(ABA)とかで行われるABABデザイン(外国語教育研究では単一事例分析として知られる)の結果について可視化するグラフを描く必要がある。行動系の論文でよくみるこんなやつ。

f:id:kusanagik:20180816175702p:plain


えっと,ここではABAB計画(baseline - treatment - baseline - treatment)で,反応回数を均等に5セッションずつ記録したとしよう。なので全20セッションとする。
これだとこんなふうに描くといいかな。

#データ例
a1<-c(2,1,4,2,3)
b1<-c(7,8,8,7,8)
a2<-c(2,1,3,2,3)
b2<-c(8,7,6,7,5)

#作図例
plot(1:5,
	a1,
	type="b",
	xlim=c(1,20),
	ylim=c(0,10),
	cex=2,
	pch=20,
	xlab="Sessions",
	ylab="Number of Responses",
	axis=F)
axis(1,1:20)
lines(6:10,b1,type="b",cex=2,pch=20)
lines(11:15,a1,type="b",cex=2,pch=20)
lines(16:20,b2,type="b",cex=2,pch=20)
abline(v=c(5,10,15)+.5,lty=2)
text(3,10,"Baseline",cex=1.2)
text(8,10,"Treatment",cex=1.2)
text(13,10,"Baseline",cex=1.2)
text(18,10,"Treatment",cex=1.2)


よし。

「客観的」とはもういわない

客観的ということばのあいまいさ

これまた不勉強故で「客観的」ということばを使ってしまっていたのだけど(幸い自分の論文を探したらあまり出てくることがなかったが),少なくとも外国語教育研究では,このことばは非常にあいまいであり効率的なコミュニケーションを著しく妨げるので私は個人的にもう使わないことにした。このことばは以下のように文脈に依存して使い分けられている。もはや手法としてsoundだとか,そういった意味でしかない。それに否定をともなってよく使用される語だ。客観的でない,など。

観察できるひとの数(私的事象と公的事象)

私的事象とはそれを観察するひとがひとりである事象だ。公的事象はふたり以上だ。客観的というとき,公的事象を示す場合が多い。主に(私的事象である)内省は客観的でない,などといわれる。少なくとも私の研究では,私的事象も公的事象も関心の中にあるため,これらを区別するためには,もっとも一般的で明確な私的事象と公的事象という用語のみを使うことにした。スキナーがいうように,私も「境界線としての肌はそれほど重要だとは思わない」

支持するひとの数

ときに,ある理論や仮説,または方法論や手続きを支持する人が相対的に多い場合に,客観的だという方がいる。「先行研究がたくさんある客観的な方法です」という状況だ。私は,単純に支持するひとが相対的に多い,ということにした。

データの尺度水準

カテゴリカルデータよりも順序データが,順序データよりも連続データが客観的だという方がいる。これは非常に馬鹿げている自然数よりも整数が客観的だとか,整数よりも実数が客観的だとか,それらが馬鹿げていると思うのとなにも変わらない。

信頼性係数等の高さ

クロンバックのα係数が高ければ客観的だとか,低ければ客観的な測定ができていないという論旨を聞くことがある。または評定の一致度なども。これも信頼性係数が高い値を示した,一致係数が高い値を示したということにした。

量的研究と質的研究

量的研究は客観的であって,質的研究は客観的でない,というようなトートロジカルにそれぞれの研究法に添えられる用語としてのためだけに客観的とはいわないことにした。ただのトートロジーであってそれ以上の意味がない場合が多い。

研究者の自由度

研究者が分析やデータを処理する過程において,研究者の避けがたい判断が多ければ,客観的でない,または判断がなければ客観的である,というようないい方はしないことにした。単純に研究者の自由度を問題にしたらよい。たとえば,因子分析モデルは,因子数や回転方法や推定方法などを決めなければならないから客観的でない,みたいな用法だ。

属人性一般

これ以外にも,もはや,客観的とは,属人性,つまりひとに属する要素がない程度といった意味でどんなときにも使われている。普通に属人性ということにした。