遊び tokidoki 仕事

数学と音楽と教育と遊び

| おしごと - きょういく - がくせい - ゼミ - イベント | すうがく - おんがく - 数理音楽 - DTM - かがく - scratch
| Art - photo - おきにー - Tips - ものもう - あれこれ | About - Top

ガラガラポンのある試み

3年生向けに「統計とコンピュータ」なる講義を毎年やっている。
「確率変数が確率分布に従う」といった概念がなかなか分かってくれなかったり、
そもそも確率変数がピンと来なかったり。
ガラガラポンとか言っていつも誤魔化しているのだけど)
さてそろそろ、この時期は確率論と統計学を橋渡しする話をする頃。
「アンケート調査」といった統計的な営みをどのように確率へ結びつけていくのか?
標本平均を集めるとどんな現象が起こるのか?
毎年、分かったような分からないような感じのまま推定検定の形式操作に進んでしまい、
いつも振り返って不完全燃焼感が残っていやだった。
そこで今年初めての試みをやってみた。



確率的に30%の人がYes=1といい、残りがNo=0という状況で500×500=25万人の仮想母集団を作り、
各自がその集団の一部(50×50=2500人)にアンケートをとる、
というプログラムを10進BASICで作った。
右図が母集団の一例。Yesと言った人をグレーで塗りつぶしてある。
これが神様の視点だ。

しかし人間にはアンケートによって一部しか測ることができない。
各自はマウスによって任意の場所に移動して仮想アンケートを取る。(左クリック!)
するとこの人間の目に見える2500人中に何人Yesといったかをプログラムが数えるようにしてある。
こういった実験を各自50回ずつ行ってその結果をあるwebページへ送信してもらい、
web上で集計しヒストグラムにする。
利用したサイトは「Mr.アンケート」。無料で手軽に使える。



結果は右図。3クラスやったが、
A組B組はきれいになった(素直だ)。
そして結果を見れば分かるように、C組には遊ばれた(泣)
始めはギザギザだったヒストグラムも、
時間とともに調査データが集まりだすと
思ったよりもきれいに正規分布の形状をなしてきたのは嬉しい。
ま、二項分布B(2500,0.3)に従う確率変数データを集めたのだから、きれいになりやすいのも尤もなんだが。


仮想ではあったが各自が「アンケート調査」し、
それを一箇所に集約した結果、正規分布が現れてくる様子を目の当たりにすることで、
幾らかは統計と確率論が学生の中で結びついてくれるといい。
そう、「アンケートに一人が答える」=「ガラガラポンを一回振る」
となってくれているだろうか?


アンケートシミュレーションで使ったBASICプログラム⇒[100609enquete.bas]

【使い方】
実行すると仮想25万人のYes/Noの様子が打ち出され、
その後グレーの「無知のヴェール」で場が覆われます。
一部50×50=2500人分だけ窓が開いていてそこに入っている人たちに
左クリックでアンケートをとり、Yesの人数が表示されます。
場所を移動しつつ左クリックすることで次々に2500人アンケート結果が表示されます。
飽きたら右クリックで終了。


REM 【統計とコンピュータ】
REM 内閣支持率の電話アンケートシミュレーション
REM

LET rm=.3 !理論的な支持率
LET sc=5 !一マス=一人の大きさ
LET L=500 !window一辺のマスの数(人数)
LET sz=L*sc !windowの一辺の長さ
LET dd=sc-1
LET pop=L*L !全人口
LET dnum=pop*rm !理論的にいるはずの全支持者数
LET asz=.1 !アンケートサイズ
LET apop=(L*asz)^2 !アンケート人数

OPTION BASE 0
DIM dots(L,L)

PRINT "全人口は";L;"×";L;"=";pop;"人"
PRINT "理論的な支持率=";rm
PRINT "1回の調査人数=";apop
PRINT "理論的には調査で平均";apop*rm;"人支持者がいるはず"
PRINT
PRINT "以下,実際のアンケート調査結果--------------"
PRINT

! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 支持者のランダム配置
! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SET WINDOW 0,sz,0,sz

SET LINE COLOR 4
PLOT LINES: 0,0;sz,0;sz,sz;0,sz;0,0
SET LINE COLOR 8
SET AREA COLOR 1
RANDOMIZE
FOR cx=0 TO L-1
FOR cy=0 TO L-1
IF RND<rm THEN
DRAW box WITH SHIFT(cx*sc,cy*sc)
LET dots(cx,cy)=1
END IF
NEXT cy
NEXT cx

gsave "dots.bmp"

! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 電話アンケート(調査人数=(L/10)^2)
! マウスで適当に場所を移動してクリックすると
! 囲まれた範囲の支持者の数が表示される
! 右クリックで調査終了
! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SET LINE COLOR 4
SET AREA COLOR 8
SET COLOR MIX(8) .9,.9,.9
LET cc=1
DO UNTIL(right=1)
mouse poll mx, my, left, right
IF (mx<>mx0 OR my<>my0) THEN
IF mx>.9 THEN LET mx=.9
IF my>.9 THEN LET my=.9
LET ax=INT(mx*L)/L
LET ay=INT(my*L)/L
SET DRAW mode hidden
gload "dots.bmp"
PLOT LINES: ax,ay; ax+asz,ay; ax+asz,ay+asz; ax,ay+asz; ax,ay
paint ax/2,ay/2
SET DRAW mode explicit
LET mx0=mx
LET my0=my
END IF
IF left=1 THEN
LET sx=ax*L
LET sy=ay*L
LET count =0
FOR i=0 TO L*asz-1
FOR j=0 TO L*asz-1
IF dots(i+sx,j+sy)=1 THEN LET count=count+1
NEXT j
NEXT i
PRINT USING "###回目 ####":cc,count
LET cc=cc+1
WAIT DELAY .5
END IF
LOOP

gload "dots.bmp"

PICTURE box
PLOT LINES: 0,0; 0,dd; dd,dd; dd,0; 0,0
END PICTURE
END