2017年 04月 17日
音工房Zさんのブラインドテスト結果の数学的評価
その前にしばらく待っていて、とりあえず書いた記事を下のほうに付けておきます。
下から先に読んだほうがいいのかもしれません。
まず、結果の解釈です。
(1)超絶のスーパーガムラン
有為差のある結果は、3/21となり14%でした。
下記に書いた理論上の確率4.14%を大きく上回っています。
また、平均スコアが11.9となり、理論上に平均10.0よりも1.9も上回っているので、このソースは、全体として聴き分けられている可能性が高いと思います。
(2)輪廻交響楽
有意差のある結果は、こちらは2/21で9.5%です。
下の方に書いた通り、正解4問の被験者も有為差ありに含めています。
理論値の4.14%よりは大分大きいですが、平均スコアが9.52なのでたまたま当たった可能性があり、聴き分けられなかったように見えます。
2つのソースで差が出たように見えることから、ハイレゾフォーマットは、ソフトによりCDフォーマットからの聴き分けが可能であるというように見えます。
私は、(2)の輪廻交響楽は聞き分け出来なかったと解釈しました。
その理由は、
(a)平均値が理論値に極めて近い
(b)(1)を勝ち抜いた人が、勝ち抜けなかった
以上から、(2)は偶然の結果であったと思います。
以下は、今日、結果が配信されなかったらアップしようと考えていた記事をそのまま載せています。
------------------------------------
しばらく前に音工房Zさんのブラインドテスト3回目の簡単レポートがメールマガジンで配信されました。
詳報も続くということだったので、楽しみに待っていたのですが、まだ来ていないようです。
ブラインドテストにおいては、有為差ありと判定する正解数を決め、その有為となる条件に入った場合、差が判別できたという結論になります。有為差を判定するロジックは、省略しますが、試験結果について数学的に評価したいと思います。
試験の概要
音工房Zさんでは、時々面白い試みを行っており、今回は、ハイレゾフォーマットとCDフォーマットとの差が聞き分け可能かという課題に挑戦したという内容がメールマガジンで配信されました。
今回は3回目ですが、過去2回とは変えて、スーパーツィーター(FostexのT500Mk2)を追加して試験したとのことです。
音源は、『ハイパーソニックエフェクト』という音源から、『超絶のガムランマサヤリ』と『輪廻交響曲』を用い、それぞれ、元のフォーマット、CDにダウンコンバートしたものという比較ということでした。
試行は20回、被験者は21名でした。
その結果、2つの音楽ソースを用いて15問以上正解して有為差ありと判定できた人が
『超絶のガムランマサヤリ』 21人中3人
『輪廻交響曲』 21人中1人
ということでした。
輪廻交響曲は1名しか有為判定の人がいませんが、その同じ人が、超絶のガムランマサヤリでも有為差ありとなったのか、気になります。
有為差ありというのは、カイ二乗部分布を用いた一般的な手法での判定です。
実は、有為差ありと判定すべき人は、もっと多かった可能性があります。
というのは20回の試行で15回以上正解したという人の他、正解が5回以下だったという人も有意差があるとかんがえられるからです。今回はデータがないので、これは、次の報告を待つことにして見てみましょう。
大山さんの報告に書かれていなかった、失敗が有為に多いというのは、差を判別していたが、別なほうを書いてしまったという場合です。試験だったら不合格なのですが、単に勘違いだったという解釈すべきなので、聴き分けという目的に対しては、これも達成していると考えるべきです。
ブラインドテストの評価としては、上記のところでやめてしまう人が多いのですが、まぐれで当たってしまう人も少数ながらいるので、有為差あり担った人が、まぐれなのか実力なのかを評価する必要があります。
まぐれで当たる確率と、試験の結果とがかけ離れていればまぐれでないということができそうです。
では、2つの試行のうち、有為差ありの人が多かった試行について考えてみます。
21名中3名が該当したということなので、割合は、およそ14%です。
この14%が、偶然に発生する確率と比べてどうなのか比較してみましょう。
デタラメに回答して有為差ありまで正解する確率は、二項分布の考え方で計算することができます。
ここで、以下の場合についての確率計算方法をウィキペディアから引用します。
P[X=k] :n回の試行のうちk回成功する確率
p :各試行で成功する確率
とすると、

この式は、n問中k問正解する確率の計算式です。
要は、k問の正解の仕方がいろいろあるので、組合せになっています。
有為差の計算であれば、kが有為差判定の最低値だとすると、k、k+1、...、nの場合を含めなければなりません。
また、反対側も有為差に含まれるようになります。
ブラインドテストの有為差判定に当てはめると、当たる確率=外れる確率=1/2なので、片側では下記のようになります。

これで片側を計算してみると、2.07%となります。
この2.07%が、同じ条件で試験したときに、まぐれで当たってしまう人の確率です。
正解側と不正解側との条件は同じなので、両側で、この2倍になり、有為差ありと判定される人が平均で、4.14%いることになります。
そうすると、片側だけで14%が有為差ありのグループに入ったのは、偶然ではなさそうに見えます。やはり、このグループに入った人は、何らかの差を感じていたという仮説が成り立ちそうです。
下に記したプログラムで計算した被験者10000人がランダムで回答した場合の得点の分布が下の通りです。

このあたりは、次の詳細報告を待ちましょう。
とりあえずハイレゾフォーマットを聴き分けられる人が居たようで良かったですね。ただし、最初に書いたように、同じ人が同じように当てられなければ、個人差ではなくて、何だろう?ということになりそうです。
今後の試験についての希望
この試験には、私が口を挟むようなものではないので、希望だけ書いておきます。
まず、今回の試験で、ハイレゾフォーマットとCDフォーマットの音の違いを判別でる人が存在しそうだということが分かったので、結果を確実にしてほしいと思います。
私の提案する追試験は、有為差を出すことが出来た人が、他の被験者に聴き分け方を伝授し、訓練してから追試することです。
聴き分け方があり、それを学習することで、スコアが上がるのであれば、聴き分け可能な差がある、ということになります。
少なくとも、一度有意差を示した被験者が、同じ試験をもう一度クリアできるか確認が必要と思います。
こうすることで、ハイレゾオーディオの価値が明確になるでしょう。
『そこまでしないと聴き分けられない差は必要ない』との主張もあるかもしれませんが、それはそれで置いておきましょう。
プログラミング
ついでに、Libreoffice Calc BASICでプログラムを組んで、1万人の被験者に対して、ランダムに回答させてみました。有為差あり(正解が15問以上か5問以下)となったのは、420人で、上記の理論値に近くなりました。

プログラムは、20問の試験に対して正解をランダムに決めておき、10000人の被験者にランダムに回答させるというものです。
そして、正解数を調べ、有為差ありとなる人が何人になるかを計算します。
計算するごとに多少のばらつきがあるのですが、10000人の被験者では、420人が有為差ありになりました。
この中には、正解が多い方に有為な人と少ない方に有為な人の両方を含んでいます。
| REM ***** BASIC ***** Dim buch as Object Dim aSheet as Object Dim i, j, m, n as Integer Dim atai as Integer Dim r, tokuten as Integer dim goukei as double Dim a, ans as Double dim yui as integer dim h as integer Sub Shiken ' 試験:回答者は、ランダムに回答する buch = ThisComponent aSheet=buch.CurrentController.ActiveSheet h = 4 'データが始まるまでの行 m = 20 '問題数 n = 10000 '被験者数 goukei=0 '得点の合計(初期値) yui = 0 '有為判定された人の数(初期) for i = 1 to n tokuten = 0 '各被験者の得点(初期値) for j = 1 to m a=Rnd() if a>0.5 then atai=1 '乱数の値が0.5より大きければ1とする else atai=0 'それ以外は0とする end if '各被験者の各問題の回答を書き込む aSheet.getCellByPosition(2+j,h+i).value=atai '回答をansという変数に格納する ans = aSheet.getCellByPosition(2+j,h+i).value '回答が正解と一致していたら得点を加算する if ans = aSheet.getCellByPosition(2+j,3).value then tokuten=tokuten+1 end if next j '各被験者の得点をC列に書き込む aSheet.getCellByPosition(2,h+i).value=tokuten '有為差判定処理 if tokuten > 14 then '15問以上正解で有為差有り aSheet.getCellByPosition(1,h+i).value=1 elseif tokuten < 6 then '正解数が5問以下で有為差有り aSheet.getCellByPosition(1,h+i).value=1 else 'それ以外は有為差なし aSheet.getCellByPosition(1,h+i).value=0 end if '有為差判定数に加算する yui = yui + aSheet.getCellByPosition(1,h+i).value '乱数を初期化する a=9 '全員の合計点を計算する(平均処理のため) goukei=goukei+tokuten '計算が長いので、どこまで計算が進んだかをA1セルに書き込む aSheet.getCellByPosition(0,0).value=i next i '有為差判定率、有為差判定者数、平均点を表示する aSheet.getCellByPosition(2,0).value=yui/n*100 aSheet.getCellByPosition(2,1).value=yui aSheet.getCellByPosition(2,2).value=goukei/n End Sub Sub Seikai ' 正解を乱数で決める ' 意図的にならないよう、都度正解を変えられるようにした buch = ThisComponent aSheet=buch.CurrentController.ActiveSheet m = 20 for j = 1 to m a=Rnd() if a>0.5 then atai=1 else atai=0 end if aSheet.getCellByPosition(j+2,3).value=atai a=9 next j End Sub |

