草薙の研究ログ

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

キーボード用リストレストを作ってしまえ

あまりタイピングが上手じゃないのがいけないのだけど,よく腱鞘炎になってしまう。私みたいにもの書きをまったくしないやつに限ってすぐ腱鞘炎になる。そんな軟弱な自分に嫌悪感を覚えながらも,やれキーボードが悪い,そしてリストレストが悪い,この企業の製品はダメだのと因果関係がそれほど自明でないことをいってしまうのが人間ってもの。本当は自分が軟弱なだけなのにね。自分の軟弱さを認めるくらいなら,顔の見えない製造企業を責めるほうが心が休まるものね。アマゾンのレビューもそういうのばっかり。

キーボードについても,世の人はやれメンブレンでも構わぬとか,パンタグラフで十分だの,メカニカルでないと死ぬ,それも赤軸がいいの,青軸がいいの,俺は黒軸でないと触らないだの,入門は茶軸がいいよとか,いいや無接点が最強だの,配列についてもUS配列でないとコードが書けないだとか日本人なんだから日本語配列でいこうぜとか,HHKBの配列でないとダメだとか,さらに細かいとControlはaの左だとかFnは右左に置けだとか,BSを一段下げろだとか矢印キーは甘えだとか,そもそもフルサイズキーボードがいいに決まっているとか,テンキーレスがいいだとか,いやいや60%コンパクトサイズがいいとか,もう開き直って40%キーボードでいいとか。

もはやリストレストでさえも,やれ幅は30cmがいいの奥行きは8cmがいいの,高さはどうのこうの,材質はどうの…

でもこれって難しい,自分は,HHKB Lite2 US配列と全く同じ配列で,フレームレスの赤軸(Minila ではいけない)が1万円きったら6台買おうと思う。しかしそういうのは存在しない。癖の強い自分みたいなものが欲しいものが企業にとって商機だとは限らない。

そうだ。なんか思い出した。そういえば,私が育った昭和時代の百姓の世界は,とても単純で複雑だった。なにか道具がほしければ,自分で作ったもんだった。なにか問題があれば,自分の工夫で解決したもんだった。さすがにキーボードは無理にしても,リストレストくらいだったら,誰でも簡単に自分で好きなように好きなだけ作れる。そうだ,仕様が気に入らないなら,仕様を責める前に自分で作ればいい。いつから俺は仕様を責めて自分ではなにも作らない人間になってしまったのか。

 

 

…というわけで,息抜きにキーボードのリストレストを作ってみることにした。

まずは家の近くのホームセンターにいって道具を集める。基本的にそれっぽい寸法の木材を買えばいい。自分の手には横30cm,奥行き8cm,高さは適当でいい,といって決めた。大概のホームセンターでは寸法を頼めば安く切ってくれるサービスがある。で,集めた材料とかはこんな感じ。

  • 木材 30cm×8cm×5cm ×3 300円位
  • 黒色スプレー
  • やすり(持っている)
  • サンドペーパー(100円)
  • 木工用ボンド(100円)使わなかった
  • すべり止めシート×3 300円

f:id:kusanagik:20170722150452j:plain

 

で,適当やすりで角を取って,適当にスプレーで黒く塗ると,どん。

 

f:id:kusanagik:20170722155610j:plain

 

おお,いいじゃないの。

で,裏にすべり止めシートを張ると,どん。

 

f:id:kusanagik:20170722155619j:plain

 

完成。20分くらい。技術も知識も手間もなにもいらない。

 

f:id:kusanagik:20170722160316j:plain

 

やば,高さよく考えてなかったから高すぎて到底使えないwwwww

高すぎるwwwww

あっれー!やっちまたー!

 

 

…次は高さもよく考えて作ろう。そうやって,トライアンドエラーで自分の好きな仕様を探っていこう。自分の手で作りながら。それって多分,とても単純で,そして心を捉える複雑なこと。

(続く)

左に歪んだデータへのフィッティング

確率分布のフィッティングでは,右に歪んだデータを対象にすることが多いのだけど,たまに左に歪んだ分布が手に入ることもある(てか私は最近はじめて手にいれた)。いろいろあるんだろうけど,一般化極値分布でいいかな。えっと,こんなデータだとしよう。

f:id:kusanagik:20170711210454p:plain

#準備とデータの作成
library(evd)
library(fitdistrplus)
library(ismev)
library(MCMCpack)
dat<-rgev(1000,20,3,-.5)
hist(dat,main="",xlab="Value",breaks=20,col="pink")

#まずはfitdist関数でフィット
#初期値は適当に標本平均と標準偏差いれちゃう
fit<-fitdist(dat,"gev",start=c(mean(dat),sd(dat),0))
summary(fit)

Fitting of the distribution ' gev ' by maximum likelihood 
Parameters : 
    estimate Std. Error
1 19.9521276 0.10240292
2  3.0110352 0.07695938
3 -0.4899288 0.01781197
Loglikelihood:  -2398.873   AIC:  4803.746   BIC:  4818.469 
Correlation matrix:
           [,1]       [,2]       [,3]
[1,]  1.0000000 -0.2868652 -0.3588115
[2,] -0.2868652  1.0000000 -0.6712985
[3,] -0.3588115 -0.6712985  1.0000000

plot(fit)

f:id:kusanagik:20170711210919p:plain

#ismevパッケージでフィット
fit2<-gev.fit(dat)

fit2
$conv
[1] 0

$nllh
[1] 2398.873

$mle
[1] 19.9520718  3.0115839 -0.4900573

$se
[1] 0.10241636 0.07699955 0.01780562

gev.diag(fit.gev)

f:id:kusanagik:20170711211154p:plain

#無駄に無情報事前分布でMCMCしてみる
llf<-function(beta,x){
sum(log(dgev(x,beta[1],beta[2],beta[3])))
}

m<-MCMCmetrop1R(llf,theta.init=c(mean(dat),sd(dat),0),x=dat)

summary(m)
Iterations = 501:20500
Thinning interval = 1 
Number of chains = 1 
Sample size per chain = 20000 

1. Empirical mean and standard deviation for each variable,
   plus standard error of the mean:

        Mean      SD  Naive SE Time-series SE
[1,] 19.9413 0.10164 0.0007187      0.0024210
[2,]  3.0184 0.07621 0.0005389      0.0018702
[3,] -0.4871 0.01757 0.0001242      0.0004275

2. Quantiles for each variable:

        2.5%    25%     50%     75%   97.5%
var1 19.7453 19.871 19.9407 20.0099 20.1407
var2  2.8700  2.966  3.0172  3.0689  3.1709
var3 -0.5214 -0.499 -0.4873 -0.4754 -0.4516


plot(m)

f:id:kusanagik:20170711211651p:plain

最尤法を使った逆ガウス分布のフィッティング

このブログへコメントがあったので,こちらで。
ガウス分布をデータに対して最尤法を使用してフィットする方法について。
statmodパッケージに逆ガウス分布の関数があって,それをfitdistrplusパッケージで使う。

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

#データの作成
dat<-rinvgauss(1000,1,4) #mu=1, lambda=4, n=1000の擬似乱数

#ヒストグラム
hist(dat,col="lightblue", main="", xlab="value",freq=F,breaks=10,ylim=c(0,1.2))

#要約
summary(dat)

#最尤推定
fit<-fitdist(dat,"invgauss",start=c(1,1))
#初期値をここではmu=1,lambda=1としている

#結果
fit
summary(fit)

#Fitting of the distribution ' invgauss ' by maximum likelihood 
#Parameters : 
#   estimate Std. Error
#1 0.9950217 0.01505621
#2 4.3455699 0.19433979
#Loglikelihood:  -520.8145   AIC:  1045.629   BIC:  1055.445 

#だいたいよさげ

#ヒストグラムに描き足し
x<-seq(0,5,.01)
lines(x,dinvgauss(x,fit$estimate[1],fit$estimate[2]),col="red",lty=2,lwd=3)


f:id:kusanagik:20170708172539p:plain

Principal Component Factor Analysis?

1日に2回この謎の用語を見てしまったので,Google Scholarで検索したら,1万件超えててワロタ。ま,google検索の件数もそんなに信用できるもんじゃないけど。

https://scholar.google.co.jp/scholar?q=%22principal+component+factor+analysis%22&btnG=&hl=ja&lr=lang_en%7Clang_ja&as_sdt=0%2C5

 

普通にえ?どっち?って思う。論文中でfactor analysisっていうときもあって,でも大概やっているのをみると実はPCAなんだよな。

Google Scholarでちょっと5本くらい見てみたら,実際やってたのは全部PCAだった。

この用語みたらまあPCAだと思ってもよさそうだ。

むかしもっとひどいのを見たことある。ウィルコクソンの符号順位検定(t検定)という表記もあって,どっちだよ,って思ったけど,これもウィルコクソンの符号順位検定だった。

…まあよくある。

ついでにPrincple Component Analysisは,3万件。うぃ。

https://scholar.google.co.jp/scholar?q=%22principle+component+analysis%22&hl=ja&as_sdt=0&as_vis=1&oi=scholart&sa=X&ved=0ahUKEwjSm7HTi_LUAhUITrwKHeHeAOoQgQMIKDAA

モデルってことばが如何に重要か

最近,モデルってことばが思ったよりもすげえ重要だなって思うようになった。自分の分野(外国語教育)だとあまり聞かない用語だから,避けてたけど,これむしろ積極的に使ったほうがいいな。

モデルってのはモデル化したいものそのものじゃない。別にこの世に斉一性をもたらす,この世を統率している原理だとか,そんな中二病的なもんじゃない。

よくある例のように,たかしくんが一時間で5km歩くってのを時速5kmというモデルで表せるわけだけど,たかしくんが頑張って歩いている現象それ自体ではないし,たかしくんがそのルールに支配されているわけでもない。たまたま,それ以外は捨象シテヨシ!っていう条件下で,結果としてうまくいくってだけのこと。この,何なら捨象シテヨシか,そして何なら捨象ダメかって考えるかってのもすげえ重要なことだ。それは俺達の現実世界のさまざまな秩序とかに与えられている。帰結に何が求められるかってことでもある。

でも,特に応用分野とかでガリガリ研究していると,モデルと,そのモデルに表せられていることの区別がつかなくなってしまいがちだ。そして,なんならそのもの自体を生み出している世界とも区別できなくなってくる。

えーと,イカサマでない6面サイコロを振ってでる目は,a = 1, b = 6の離散一様分布でうまくモデル化できる。このとき,離散一様分布はモデル。でも,サイコロの目がでるという物理現象それ自体は,さまざまなこと,摩擦や物体の運動やその他,無限に近い現象の因果だと思う。たまたま,なんの目が出るか,という観点の上で,それらの無限に近い現象の因果とかが捨象シテヨシってだけのはなしだ。神様が離散一様分布の乱数を毎回振って出してくれてるわけではない。

そういうことなら当たり前じゃないか,ってひとは,大抵はよく勉強されていて,

因子分析は,ある集団とある観測変数のセットという条件下において,それらの観測間の構造を説明し得る,便宜的な数理モデルのひとつに過ぎない。 

 みたいな文言を読んでたりもする。

でも,実際に自分で因子分析をすると,それがなんか関心ある概念間の関係それ自体だと勇み足になってしまいがちだ。

多分,ことばが悪いんだよな。因子分析は,所詮は数理モデルにすぎないんだから,因子分析モデルといえばいい。

「因子分析は概念間の構造を解明する道具!」よりも「因子分析<モデル>,それは(得てしてクソみてーな)観測変数間の(よくわからん)構造を集約する便利な(だけの)数理モデルのひとつ」っていえば,変な誤解を避けられる。

平均差の有意性も似た問題がある。30点こっちのグループの方が上で有意でした。これは数理的には条件付き期待値がどうこうって程度の話。でも別に神様がその条件付き期待値を計算して現象発生させているわけでない。こっちのグループはAしたのか,よしテストの平均30点あがるように調整しよ,なんて神様はおそらくやっていない。

別になんでもいいけど,一般線形モデルでも,平均差のモデルとか,条件付き期待値のモデルでもいいんだけど,なんかモデルっていえば,そういう勇み足は減るのかな。

「平均差は有意!」とかっていうよりも「平均+30<モデル>」っていえば,変な推論は防げるのかな。

 

モデルっていえば,あくまでも(適当に人間が手前の脳みそで理解するために作った)モデルだってのがわかるから,聞いている,読んでいるひとだけじゃなくて,喋っている,書いているひとも頭クリアになるからいいんじゃないか。中身について主張していることと,実証したというものの齟齬にも,自分で気づけるようになる。

 

【宣伝】この学会シーズンでお話させてもらうこと

最近はなんでも広報やその創意工夫が大事だということなので,ここに,この春夏の学会シーズンでお話させて頂くことをまとめます(自分のメモがてら)。増えたら随時足していきます。

1. SONAS2017(5月に終了,早稲田大学

  • シンポジウム「英語学習者のパフォーマンスを考える」にて,シンポジウム登壇者として「言語指標の数理」と題したお話をしました。内容は,私の研究アプローチである,数理的アプローチという方法と言語指標研究についてでした。

   SONAS2017

 

2. 中部地区英語教育学会(CELES,6月25日,信州大学

  • 英語教育研究法セミナー「実証研究および実践研究の科学性」(藤田卓郎先生と一緒に):これまで「科学的」,特に「科学的な指導法」といった旗印のもとで進められてきた英語教育研究について概観して,これからの研究のあり方を議論したいと思います。私は実証研究についてお話し,藤田先生は実践研究についてお話します。
  • 課題別研究プロジェクト「英語教育における『エビデンス』:評価と活用」(代表:亘理陽一先生,提案者:寺沢拓敬先生,草薙,浦野研先生,工藤洋路先生,酒井英樹先生):英語教育におけるエビデンスについての研究報告ですが,亘理先生,寺沢先生,そして私がそれぞれ提案をした後に議論に入りますが,私のパートでは,質の高い教育的エビデンスを創出するためには,公共性の高い標準的測定モデルおよび共通的成果変数が必要であるという提案をいたします。

   大会プログラム – 第47回中部地区英語教育学会 長野大会

 

3.  外国語教育メディア学会(LET,8月4ー6日,名古屋学院大学

  • ワークショップ「外国語教育研究者のためのベイズ統計入門」;このワークショップでは,外国語教育研究に馴染み深いデータを題材として,ベイズ統計はどのようなものかをご紹介します。これは受講料と事前予約が必要なようです。頑張ってお話しますので,ぜひよろしくお願いします。
  • 一般研究発表「オンライン学習プログラムにおける単位取得困難学生の事前検知」隠れマルコフモデルによるライティング過程の把握とその形成的評価への応用」という2件の発表をします。

www.let2017.net

www.let2017.net

 

4. R Bootcamp

  • 8月に講師として登場予定です。Rを使った分析法についてみっちりとお話をする予定です。

www.rbootcamp.org

 

学会などでお会いできることがありましたら,ぜひお声がけください!

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

前回までのあらすじ

大学の小さな部屋にある,どでかいワークステーション,デスクトップPC,ThinkPadMacBookといったメジャーなノートPC,そういった電子機器に底知れぬ違和感を覚え始めた私は,自分が生まれた東北の自然,つまり自分の原風景には,シンプルさと複雑さが同時にあったということを思い出し,唐突にも今流行中のラズパイ(Raspberry Piを買えば自分は救われると確信した。これは倒錯に他ならないと気づいていても,私の足は出張の隙間に秋葉原に向かい,ラズパイを早速ゲットしてしまったのだが…

自分の居場所とラズベリー・パイ(1) - 草薙の研究ログ

 

そもそもラズパイってなに?

ラズパイは,簡単にいえば小型で低スペックなコンピュータ。低スペックといっても,モデルによっては,そんなに低スペックではない。たとえば私が買ったRaspberry Pi 2 Model Bは,そのCPUが組み込み機器などでもよく使われるARMアーキテクチャ(Cortex A7),RAMはIG。HDDの代わりにMicroSDカードを挿入する(大体4G以上の容量が必要)。電源は5V,1Aあれば動いてくれる(これなら大抵のモバイルバッテリーでもOK)。ちょっと前のスマフォくらい。

 

www.raspberrypi.org

 

ポートとして,USB×4,LAN,HDMI(miniではない),給電用MicroUSBがついている。大きさは,タバコくらい。もちろんBlutoothとかwifiアダプターはついていない。

こういったミニマルな構成で5,000円くらい。

これに給電がUSBなのでAC電源アダプター,映像はHDMI出力なので(テレビにぶっさせば映るが),まあレガシーになりつつあるVGA変換ケーブルとか給電用のUSBケーブルとかも全部入れてもこれくらいのサイズになる。

 

f:id:kusanagik:20170516133504j:plain

 

OSは,なんでも入れればできるらしいんだけど,基本はDebian系のRaspbianという独自OSを入れればいい。なんていうか,Debian系なので普通のLinux PCとして使える。このOSは,現在,標準的なブラウザとしてChromium,オフィススイートはLibreOfficeなどがプリインストールされているだけでなくて,Pythonなどといったプログラミング言語の開発環境,そしてなんとあの高価なMathematicaの1ヴァージョンがプレインストールされている。なって素晴らしいんだ。あとゲームとしてマイクラ(マインクラフト)も。もともとこのラズパイは子どもの教育用に売られているものだしね。デフォルトのデスクトップ環境がLXDEなので,自分にとっては日頃から使っているLubuntuと一緒。とても気持ちいいじゃないの(UnityなんてLinuxじゃない)。

早速繋いでみた

まあ,OSのインストールとか,設定とかは誰でもできるくらい簡単なので端折るとして,とりあえずこんな感じにつないでいけばOK。まんなかの基盤みたいなのがラズパイの本体。なんてかわいいんだ,こいつ。

 

f:id:kusanagik:20170516134156j:plain

 

電源をいれて,初期設定をすませれば,こんな感じで普通のデスクトップ環境(LXDE)が起動する。別になんの問題もつまづき点もなかった。なんか最近のOSヴァージョンは壁紙がきれいな写真になっているのね。ちょっと簡単すぎて拍子抜け感はある。正直,もっと手懐けるまでCUIで格闘したりするプロセスが欲しい。でも,まあこれは私にとってラズパイデビューなので,いきなり変なことするよりはこれでいいかな。

 

f:id:kusanagik:20170516134116j:plain

 

こんな感じ。素晴らしい。とっても自然な感じがする。これは私を攻撃してこないぞ。そしてなによりもちっちゃかわいいぞぅ,こいつぅ(よだれ)

自分の居場所づくり

基本はいつも使っているLubuntuと同じようにできるのですごく居心地がいい。

とりあえずLibreOfficeとかそういうのはいらない。そういうのは消しておくに限る。Chromiumもいらんちゃいらんけど,なにかのために残しておくとして,さしあたって自分には以下のような設定が必要だった。

日本語入力環境:fcitx-Mozc

なんかいろんな記事で,iBus-MozcとかAnthyをやっているのを見るけど,普通にfcitx-Mozcを入れればいいと思った。OSの表示言語はやはり英語に限る。

sudo apt-get install fcitx-mozc 

 とかやると,普通にfcitx設定とかでてくるので,これでGUIで設定してもいい。fcitxをLXDEでやるとインライン表示がかたつく,っていう症状はよくあるけど,これ普通に直せるよね。自分はUS配列でやっているので,USキーボードとMozcを2つ入れておいて,Ctr(またはAlt)l+`とかを切り替えキーに割り当てればいいね。

エディタ:emacsとgedit

エディタについては,最近はAtomって決めていて,これを入れたいのだけど,多分おもすぎて使いものにはならん。Atomは重い。なので代替案として自分はemacsとgeditを入れた。emacs懐かしい。

sudo apt-get install emacs

sudo apt-get install gedit

そういえば,LXDE環境だから,端末はLXTerminalだけど,gnome-terminalでもいいかなと思って入れてみた。自分好みのemacsの設定だけでも結構時間かかるけど。Markdownはharoopadでもいいかな。

RとPython

普通にインストールできるから入れる。Pythonは最初から入っている。Mathematicaも使えるので,計算関係は十分かな。

テキストブラウザLynx

最近のウェブサイトは重いし,広告がいちいちイラつく現代病なので,去年あたりからテキストブラウザを使っている(スマフォでも)。っていうかこうするとemacsを出ずにブラウジングできるし。古典的だけどLynxを入れた。自分の環境だと,結構文字コードとかはデフォルトで大丈夫だった(utf-8ね)。MacOSLynxやるとなんか文字コード結構めんどいのよね…。そんなことはなかった。

テキストメーラ:alpine

同様の理由で,メーラー雷鳥sylpheedとかもいいけど,ここは敢えてalpineをやる。alpineからgmailを見るようにしている。これでラズパイでメール業務できる。alpineの初期設定だけはちょっと備忘録(参考)。最初だけgmailから怪しげなソフトやめろとか怒られるのね。

smtp-serverにsmtp.gmail.com:587/tls/user=XXXX@gmail.com

inbox-pathに{imap.gmail.com/ssl/user=XXXX@gmail.com}INBOX

Pandoc

Markdownやhtmlを書くことが多いので。これも普通に入れられる。

 

だいたいこれくらいあったら,基本的な作業は一通りできそう。あ,そうだ,解像度はxrandrとかlxrandrとかやる必要もあるし,デフォルトではメディアプレーヤーがないので,audaciousとかVLCとかの定番を入れたりもした。まあでもこれはLinuxのいつもパターン。

 

結局私は救われたのか

救われたかはわからない。でも,大分ストレスはなくなったと思う。この小さいサイズのコンピュータは,私に底知れぬ違和感を与えることはないし,100均の小さい箱に全部突っ込んで運べるし,そしてなにより,ラズパイにあるシンプルさと複雑さ,そしてそれに心を踊らせていた自分を思い出させてくれるという点で,これ以上はない幸せを感じる。予定調和的に,多分私は救われた。

 

(続く)

 

次回,なんと(おそらく日本初)ラズパイで英語の授業を!?