オンライン外国語学習における実測学習時間の格差:ジニ係数とローレンツ曲線
同じ学習教材を与えても,それを使用して勉強するひともいれば,勉強しないひともいる。格差,ということばが正しいかはわからないけど,たとえば大学生が,ある一定期間内において,大学が提供するオンライン外国語学習教材を使用して学習する時間は,ちょうど所得の分布に似た分布を示す。
これは歪んだ分布になる。(ワイブル分布の例;草薙(2017)は個人のWBTに対する個人のログイン時間は,ワイブル分布によって近似を与えられることを報告している)
これについて,ローレンツ曲線を描くとこんな感じ。
ちなみにこのデータのジニ係数は,だいたい0.30くらい。おおざっぱにいって,日本人の所得のジニ係数と同じくらい(?)。
全体のアクセス時間に対して,上半分の人が7割,下半分の人が3割の時間くらいといった比になる。下二割の人は,全体の7%,上8割の人の全体の93%。
この係数を減らすというのも,ひとつの業務的観点になりうる。
JansonとOllssonのイオタ
JansonとOllssonのイオタは,評定変数が多変量で複数評定者間の信頼性ないし一致率を評価する係数。Rでは,irrパッケージのiota関数を使う。
たとえばルーブリックを使用した評定を二人が行い,観点が5つあるとか,そんなときに使用する。
#こんなデータに [[1]] Rater1 Rater2 1 Old Old 2 New New 3 Old New 4 New New 5 Old Old 6 New New 7 New New 8 Old Old 9 New New [[2]] Rater1 Rater2 1 Slow Slow 2 Fast Fast 3 Slow Slow 4 Fast Fast 5 Slow Slow 6 Fast Fast 7 Slow Fast 8 Slow Slow 9 Fast Fast iota(dat)[] $method [1] "iota for nominal data (2 variables)" $subjects [1] 9 $raters [1] 2 $irr.name [1] "iota" $value [1] 0.775 $detail NULL
キーボード用リストレストを作ってしまえ
あまりタイピングが上手じゃないのがいけないのだけど,よく腱鞘炎になってしまう。私みたいにもの書きをまったくしないやつに限ってすぐ腱鞘炎になる。そんな軟弱な自分に嫌悪感を覚えながらも,やれキーボードが悪い,そしてリストレストが悪い,この企業の製品はダメだのと因果関係がそれほど自明でないことをいってしまうのが人間ってもの。本当は自分が軟弱なだけなのにね。自分の軟弱さを認めるくらいなら,顔の見えない製造企業を責めるほうが心が休まるものね。アマゾンのレビューもそういうのばっかり。
キーボードについても,世の人はやれメンブレンでも構わぬとか,パンタグラフで十分だの,メカニカルでないと死ぬ,それも赤軸がいいの,青軸がいいの,俺は黒軸でないと触らないだの,入門は茶軸がいいよとか,いいや無接点が最強だの,配列についても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円
で,適当やすりで角を取って,適当にスプレーで黒く塗ると,どん。
おお,いいじゃないの。
で,裏にすべり止めシートを張ると,どん。
完成。20分くらい。技術も知識も手間もなにもいらない。
やば,高さよく考えてなかったから高すぎて到底使えないwwwww
高すぎるwwwww
あっれー!やっちまたー!
…次は高さもよく考えて作ろう。そうやって,トライアンドエラーで自分の好きな仕様を探っていこう。自分の手で作りながら。それって多分,とても単純で,そして心を捉える複雑なこと。
(続く)
左に歪んだデータへのフィッティング
確率分布のフィッティングでは,右に歪んだデータを対象にすることが多いのだけど,たまに左に歪んだ分布が手に入ることもある(てか私は最近はじめて手にいれた)。いろいろあるんだろうけど,一般化極値分布でいいかな。えっと,こんなデータだとしよう。
#準備とデータの作成 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)
#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)
#無駄に無情報事前分布で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)
最尤法を使った逆ガウス分布のフィッティング
このブログへコメントがあったので,こちらで。
逆ガウス分布をデータに対して最尤法を使用してフィットする方法について。
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)
Principal Component Factor Analysis?
1日に2回この謎の用語を見てしまったので,Google Scholarで検索したら,1万件超えててワロタ。ま,google検索の件数もそんなに信用できるもんじゃないけど。
普通にえ?どっち?って思う。論文中でfactor analysisっていうときもあって,でも大概やっているのをみると実はPCAなんだよな。
Google Scholarでちょっと5本くらい見てみたら,実際やってたのは全部PCAだった。
この用語みたらまあPCAだと思ってもよさそうだ。
むかしもっとひどいのを見たことある。ウィルコクソンの符号順位検定(t検定)という表記もあって,どっちだよ,って思ったけど,これもウィルコクソンの符号順位検定だった。
…まあよくある。
ついでにPrincple Component Analysisは,3万件。うぃ。
モデルってことばが如何に重要か
最近,モデルってことばが思ったよりもすげえ重要だなって思うようになった。自分の分野(外国語教育)だとあまり聞かない用語だから,避けてたけど,これむしろ積極的に使ったほうがいいな。
モデルってのはモデル化したいものそのものじゃない。別にこの世に斉一性をもたらす,この世を統率している原理だとか,そんな中二病的なもんじゃない。
よくある例のように,たかしくんが一時間で5km歩くってのを時速5kmというモデルで表せるわけだけど,たかしくんが頑張って歩いている現象それ自体ではないし,たかしくんがそのルールに支配されているわけでもない。たまたま,それ以外は捨象シテヨシ!っていう条件下で,結果としてうまくいくってだけのこと。この,何なら捨象シテヨシか,そして何なら捨象ダメかって考えるかってのもすげえ重要なことだ。それは俺達の現実世界のさまざまな秩序とかに与えられている。帰結に何が求められるかってことでもある。
でも,特に応用分野とかでガリガリ研究していると,モデルと,そのモデルに表せられていることの区別がつかなくなってしまいがちだ。そして,なんならそのもの自体を生み出している世界とも区別できなくなってくる。
えーと,イカサマでない6面サイコロを振ってでる目は,a = 1, b = 6の離散一様分布でうまくモデル化できる。このとき,離散一様分布はモデル。でも,サイコロの目がでるという物理現象それ自体は,さまざまなこと,摩擦や物体の運動やその他,無限に近い現象の因果だと思う。たまたま,なんの目が出るか,という観点の上で,それらの無限に近い現象の因果とかが捨象シテヨシってだけのはなしだ。神様が離散一様分布の乱数を毎回振って出してくれてるわけではない。
そういうことなら当たり前じゃないか,ってひとは,大抵はよく勉強されていて,
因子分析は,ある集団とある観測変数のセットという条件下において,それらの観測間の構造を説明し得る,便宜的な数理モデルのひとつに過ぎない。
みたいな文言を読んでたりもする。
でも,実際に自分で因子分析をすると,それがなんか関心ある概念間の関係それ自体だと勇み足になってしまいがちだ。
多分,ことばが悪いんだよな。因子分析は,所詮は数理モデルにすぎないんだから,因子分析モデルといえばいい。
「因子分析は概念間の構造を解明する道具!」よりも「因子分析<モデル>,それは(得てしてクソみてーな)観測変数間の(よくわからん)構造を集約する便利な(だけの)数理モデルのひとつ」っていえば,変な誤解を避けられる。
平均差の有意性も似た問題がある。30点こっちのグループの方が上で有意でした。これは数理的には条件付き期待値がどうこうって程度の話。でも別に神様がその条件付き期待値を計算して現象発生させているわけでない。こっちのグループはAしたのか,よしテストの平均30点あがるように調整しよ,なんて神様はおそらくやっていない。
別になんでもいいけど,一般線形モデルでも,平均差のモデルとか,条件付き期待値のモデルでもいいんだけど,なんかモデルっていえば,そういう勇み足は減るのかな。
「平均差は有意!」とかっていうよりも「平均+30<モデル>」っていえば,変な推論は防げるのかな。
モデルっていえば,あくまでも(適当に人間が手前の脳みそで理解するために作った)モデルだってのがわかるから,聞いている,読んでいるひとだけじゃなくて,喋っている,書いているひとも頭クリアになるからいいんじゃないか。中身について主張していることと,実証したというものの齟齬にも,自分で気づけるようになる。