ホットハンド

連続して複数のバスケットを決めるバスケットボール選手は、ホットハンドを持っていると表現されます。 ファンや選手は長年、ホットハンド現象を信じてきましたが、これは各ショットが次のショットから独立しているという仮定を否定するものです。 しかし、1985年の論文で、Gilovich、Vallone、Tverskyは、この信念に反する証拠を収集し、連続するショットが独立したイベントであることを示しました。 この論文は、ホットハンド バスケットボールをGoogle検索するとわかるように、今日まで続く大きな論争を引き起こしました。

この論争を今日解決するつもりはありません。 しかし、このラボでは、このような質問に答えるための一つのアプローチを適用します。 このラボの目標は、(1)独立したイベントと依存したイベントの影響について考えること、(2)Rでシュートの連続をシミュレートする方法を学ぶこと、そして(3)ホットハンド現象が現実であるかどうかを判断するために、シミュレーションを実際のデータと比較することです。

はじめに

パッケージの読み込み

このラボでは、tidyverseスイートのパッケージを使用してデータを探索および視覚化します。 データはOpenIntroラボのコンパニオンパッケージopenintroで見つけることができます。

パッケージを読み込みましょう。

library(tidyverse)
library(openintro)

再現可能なラボレポートの作成

新しいラボレポートを作成するには、RStudioで「New File」->「R Markdown…」に移動し、「From Template」を選択してから、テンプレートのリストから「Lab Report for OpenIntro Statistics Labs」を選択します。

データ

あなたの調査は、ロサンゼルス・レイカーズのコービー・ブライアントという一人の選手のパフォーマンスに焦点を当てます。 2009年のNBAファイナルでのオーランド・マジック戦での彼のパフォーマンスは、彼に最優秀選手の称号をもたらし、多くの観客が彼がホットハンドを示しているように見えたとコメントしました。 使用するデータファイルはkobe_basketです。

glimpse(kobe_basket)

このデータフレームには133の観測値と6つの変数があり、各行はコービー・ブライアントが放ったシュートを記録しています。 このデータセットのshot変数は、シュートがヒット(H)かミス(M)かを示しています。

ヒットとミスの羅列を見るだけでは、コービーがホットハンドでシュートを打っていたかどうかを判断するのは難しいかもしれません。 これに対処する一つの方法は、ホットハンドのシューターはシュートの連続を起こしやすいという信念を考慮することです。 このラボでは、シュートの連続の長さを「ミスが発生するまでの連続したバスケットの数」と定義します。

例えば、ゲーム1でコービーは第1クォーターでの9回のシュート試行で以下のヒットとミスのシーケンスを持っていました。

\[ \textrm{H M | M | H H M | M | M | M} \]

データビューアでデータの最初の9行を表示することで、これを確認できます。

9回のシュート試行の中には、上記の「|」で区切られた6つの連続があります。 それらの長さは1、0、2、0、0、0(発生順)です。

  1. 連続の長さが1とはどういう意味ですか?つまり、連続の長さが1の場合、ヒットとミスはいくつありますか?連続の長さが0の場合はどうですか?

133本のシュートすべてについて連続の長さを手動で数えるのは面倒なので、カスタム関数calc_streakを使用してそれらを計算し、結果をlength変数としてkobe_streakというデータフレームに保存します。

kobe_streak <- calc_streak(kobe_basket$shot)

次に、これらの連続の長さの分布を見てみましょう。

ggplot(data = kobe_streak, aes(x = length)) +
  geom_bar()
  1. 2009年NBAファイナルにおけるコービーの連続の長さの分布を記述してください。彼の典型的な連続の長さはどのくらいでしたか?彼の最長のバスケットの連続は何本でしたか?回答には付随するプロットを必ず含めてください。

何と比較するか?

コービーがいくつかの長いシュートの連続を持っていたことを示しましたが、それらは彼がホットハンドを持っていたという信念を裏付けるほど長いのでしょうか? それらを何と比較できるでしょうか?

これらの質問に答えるために、独立性の概念に戻りましょう。 2つのプロセスは、一方のプロセスの結果がもう一方のプロセスの結果に影響を与えない場合、独立しています。 もし選手が放つ各シュートが独立したプロセスであるならば、最初のシュートを決めたかどうか、外したかどうかは、2番目のシュートを決めるか外すかの確率に影響を与えません。

ホットハンドのシューターは、互いに独立していないシュートを打ちます。 具体的には、シューターが最初のシュートを決めた場合、ホットハンドモデルでは、2番目のシュートを決める確率が高くなると言われています。

ホットハンドモデルがコービーに有効であると一時的に仮定しましょう。 彼のキャリア中、コービーがバスケットを決める割合(すなわち彼のシュート成功率)は約45%であり、確率表記では以下のようになります。

\[ P(\textrm{shot 1 = H}) = 0.45 \]

もし彼が最初のシュートを決め、ホットハンドを持っている(独立していないシュート)場合、彼が2番目のシュートを決める確率は、例えば60%に上がるとしましょう。

\[ P(\textrm{shot 2 = H} \, | \, \textrm{shot 1 = H}) = 0.60 \]

これらの確率の増加の結果、コービーはより長い連続を記録すると予想されるでしょう。 これを、コービーがホットハンドを持っていないという懐疑的な見方と比較してみましょう。この場合、各シュートは次のシュートとは独立しています。 もし彼が最初のシュートを決めたとしても、2番目のシュートを決める確率は依然として0.45です。

\[ P(\textrm{shot 2 = H} \, | \, \textrm{shot 1 = H}) = 0.45 \]

言い換えれば、最初のシュートを決めたことは、2番目のシュートを決める確率に何の影響も与えませんでした。 もしコービーのシュートが独立しているならば、彼は過去のシュートに関係なく、すべてのシュートを打つ確率は同じ:45%になるでしょう。

これで状況を独立したシュートという観点から述べたので、質問に戻りましょう。コービーのシュートの連続が、彼がホットハンドを持っていることを示すのに十分な長さであるかどうかをどうやって判断するのでしょうか? 彼の連続の長さを、ホットハンドを持たない誰か、つまり独立したシューターと比較することができます。

Rでのシミュレーション

独立したシュートをするシューターのデータは持っていませんが、そのようなデータはRで非常に簡単にシミュレートできます。 シミュレーションでは、ランダムプロセスの基本ルールを設定し、コンピューターは乱数を使用してそれらのルールに従う結果を生成します。 簡単な例として、以下のコードで公平なコイン投げをシミュレートできます。

coin_outcomes <- c("heads", "tails")
sample(coin_outcomes, size = 1, replace = TRUE)

ベクトルcoin_outcomesは、headsと書かれた紙切れとtailsと書かれた紙切れが2枚入った帽子と考えることができます。 sample関数は帽子から1枚の紙切れを引いて、それが表か裏かを教えてくれます。

上記の2番目のコマンドを数回実行してください。 コイン投げと同じように、時には表が出たり、時には裏が出たりしますが、長期的には、ほぼ同数の結果になると予想されるでしょう。

公平なコインを100回投げるシミュレーションを行いたい場合、関数を100回実行するか、あるいはより簡単に、サンプリングする数(replace = TRUE引数は、再度引く前に紙切れを帽子に戻すことを示します)を制御するsize引数を調整することができます。 結果として得られる表と裏のベクトルをsim_fair_coinという新しいオブジェクトに保存してください。

sim_fair_coin <- sample(coin_outcomes, size = 100, replace = TRUE)

このシミュレーションの結果を見るには、オブジェクトの名前を入力し、tableを使って表と裏の数を数えます。

sim_fair_coin
table(sim_fair_coin)

coin_outcomesには2つの要素しかないため、「コインを投げて」表が出る確率は0.5です。 私たちが知っている限り、20%の確率でしか表が出ない不公平なコインをシミュレートしようとしているとしましょう。 これには、2つの確率重みのベクトルを提供するprobという引数を追加することで調整できます。

sim_unfair_coin <- sample(coin_outcomes, size = 100, replace = TRUE,
                          prob = c(0.2, 0.8))

prob=c(0.2, 0.8) は、outcomes ベクトル内の2つの要素について、最初の heads を確率0.2で、2番目の tails を確率0.8で選択したいことを示します。 これを別の方法で考えると、結果の空間を10枚のチップが入った袋と考えることができます。そのうち2枚のチップには「表」、8枚のチップには「裏」と書かれています。 したがって、各抽選で「表」と書かれたチップを引く確率は20%、「裏」と書かれたチップを引く確率は80%です。

  1. 不公平なコインを100回投げるシミュレーションで、何回表が出ましたか?回答には不公平なコインをサンプリングするコードを含めてください。markdownファイルはコードを実行し、Knitするたびに新しいサンプルを生成するため、サンプリングするに「シードを設定する」必要があります。シードの設定については以下をお読みください。

シード設定に関する注意: シードを設定すると、ドキュメントをニットするたびにRは同じサンプルを選択します。 これにより、ニットするたびに結果が変わることがなくなり、作業の再現性も保証されます(同じシードを設定することで、結果を再現することが可能になります)。 シードは次のように設定できます。

set.seed(35797)                 # make sure to change the seed

上記の数字は完全に任意です。 インスピレーションが必要な場合は、あなたのID、誕生日、または単なるランダムな数字の文字列を使用できます。 重要なことは、各シードをドキュメント内で一度だけ使用することです。 上記の演習でサンプリングするにこれを行うことを忘れないでください。

ある意味で、「表」と書かれた紙切れのサイズを縮小し、引かれる可能性を低くし、「裏」と書かれた紙切れのサイズを拡大し、引かれる可能性を高くしました。 公平なコインをシミュレートしたとき、両方の紙切れは同じサイズでした。 prob引数を指定しない場合、これがデフォルトで発生します。outcomesベクトル内のすべての要素は、引かれる確率が均等になります。

sampleまたはその他の関数について詳しく知りたい場合は、いつでもそのヘルプファイルを確認できることを思い出してください。

?sample

独立したシューターのシミュレーション

独立したシュートをするバスケットボール選手をシミュレートするには、コイン投げをシミュレートするために使用したのと同じメカニズムを使用します。 シュート成功率50%の独立したシューターから1本のシュートをシミュレートするには、次のように入力します。

shot_outcomes <- c("H", "M")
sim_basket <- sample(shot_outcomes, size = 1, replace = TRUE)

コービーとシミュレートされた独立したシューターとの間で有効な比較を行うには、両方のシュート成功率とシュート試行回数を合わせる必要があります。

  1. sample関数をシュート成功率45%を反映するように変更するには、どのような変更が必要ですか?この調整を行い、133本のシュートをサンプリングするシミュレーションを実行してください。このシミュレーションの出力をsim_basketという新しいオブジェクトに割り当ててください。

新しいベクトルsim_basketに、以前のシュート成功率50%を反映したベクトルと同じ名前を付けたことに注意してください。 この状況では、Rは古いオブジェクトを新しいオブジェクトで上書きするため、名前を再割り当てする前に、古いベクトル内の情報が不要であることを常に確認してください。

シミュレーションの結果がsim_basketとして保存されているので、コービーを独立したシューターと比較するために必要なデータが揃いました。

両方のデータセットは、それぞれ133回のシュート試行の結果を表しており、シュート成功率はどちらも45%です。 シミュレートされたデータは、独立したシュートをするシューターからのものであることを私たちは知っています。 つまり、シミュレートされたシューターはホットハンドを持っていないことを知っています。


さらなる演習

コービー・ブライアントと独立したシューターの比較

  1. calc_streakを使用して、sim_basketの連続の長さを計算し、結果をsim_streakというデータフレームに保存してください。

  2. 連続の長さの分布を記述してください。 シュート成功率45%のシミュレートされた独立したシューターの典型的な連続の長さはどのくらいですか? 133本のシュートで、選手の最長のバスケットの連続は何本ですか? 回答にはプロットを必ず含めてください。

  3. 独立したシューターのシミュレーションを2回目実行した場合、その連続分布は上記の質問の分布とどのように比較されると予想しますか? 完全に同じ? ある程度似ている? まったく異なる? 理由を説明してください。

  4. コービー・ブライアントの連続の長さの分布は、シミュレートされたシューターの連続の長さの分布とどのように比較されますか? この比較を使用して、ホットハンドモデルがコービーのシュートパターンに合致するという証拠はありますか? 説明してください。


Creative Commons License
この作品は、クリエイティブ・コモンズ 表示 - 継承 4.0 国際ライセンスの下に提供されています。