統計・資料

検出力分析によるサンプルサイズ設計(と事前登録)

サンプルサイズ設計基本

  • サンプルサイズ: 研究で収集するデータの件数や参加者数。
  • 小さすぎず大きすぎない、適切なサンプルサイズが必要。
    • 小さすぎる場合
      • 検出力が低くなる(後述)
    • 大きすぎる場合
      • ごく小さな差でも「有意」になり、実質的に意味のない差まで検出
      • 不必要に多くの参加者に介入を行うことは倫理的に問題
  • どうやってサンプルサイズを決める?
    検定力分析によるサンプルサイズ設計
  • 検定は間違えることがある
  • 検査の間違え方には2種類ある
    • パターン①: 偽陽性(本当はないのに、「ある」と出てしまう)
      • コロナにかかっているか検査をしたら、本当はかかっていないのに検査では陽性になった
    • パターン②: 偽陰性(本当はあるのに、「ない」と出てしまう)
      • コロナにかかっているか検査をしたら、本当はかかっているのに検査では陰性になった
  • 同様に統計的検定も2種類の間違え方をする
    • タイプⅠエラー(αエラー): 本当は差や効果がないのに「有意」と出てしまう
      • 本当は実験群と統制群の得点に差がないのに、統計的に有意になってしまった
      • 起こる問題: 間違った結論の論文を書いてしまう
    • タイプⅡエラー(βエラー): 本当は差や効果があるのに「非有意」と出てしまう
      • 本当は実験群と統制群の得点に差があるのに、検定の結果は有意でなかった
      • 起こる問題: 本当は言えたはずなのに、何も結論が言えない
  • αエラーを起こす確率 = 有意水準と同じ
    • 統計的検定では、「もし差や効果がないと仮定したら今回のデータはものすごく低い確率(有意水準: 典型的には5%) でしか出ないようなものだった→差や効果がないと考えるほうが間違っていそう→有意と判断する
    • ということは、差や効果が本当になかったとしても有意になる確率が5%はある
    • ゆえにαエラーを起こす確率 = 有意水準と同じになる
      • 心理学分野では、間違える可能性5%なら許容できるということで、有意水準を5%にすることが多い
  • βエラーを起こさない確率(1-β)を「検出力」という
    • 検出力が足りないと、βエラーを起こしやすくなる
    • 十分な検出力が必要
  • 検出力とサンプルサイズの関係
  • ほしい効果量・事前に決めた有意水準・ほしい検出力の情報があれば、それらを満たすにはいくつデータを取ればいいか(サンプルサイズが)わかる!!!
  • 効果量: 差や効果の大きさを表す指標
    • ひとくちに「効果量」といってもさまざまな種類がある。
      • 分析の目的とデータの種類に応じて使い分けがある。
    • 例: 2群の平均値差に関する効果量でよく使われるのは、Cohen’s d という指標
    • 例: 2変数間の関連の強さの効果量としてよく使われるのは、相関係数r
      • Cohen’s d について授業で使っているスライド

G*Powerによるサンプルサイズ設計

G*Powerとは (Kang, 2021)

  • 検出力分析によるサンプルサイズ設計のためのフリーソフト。GUIのソフトで操作が簡単
  • こちらのページからインストールできる。
  • サンプルサイズ設計には統計学に関する幅広い知識やプログラミング知識が必要だった。
  • ソフトウェアも高額だった。
  • 以下の5ステップでサンプルサイズ設計ができる
  1. 研究の目的と仮説の設定
  2. 適切な検定の選択
  3. 検定力分析の5つの方法の中から1つを選ぶ
  4. 分析に必要な変数を入力
  5. 「計算(calculate)」ボタンをクリック

1. 研究の目的と仮説の設定

  • サンプルサイズ設計の第一歩: 「なにを検討したいのか(研究目的)」と「どのような効果を検出したいのか(仮説)」を明確にすること
    • 例: 本研究では、ある介入(例:利他性を促進するメッセージ提示)が、人々の寄付行動に与える影響を検討することを目的とする。
    • 例: 仮説として、介入を受けた実験群の平均寄付額が、介入を受けていない統制群よりも有意に高いと予測
  • 仮説が明確でなければ、サンプルサイズの検討は意味をなさない
  • 仮説には「片側検定」か「両側検定」かも含める必要がある
  • どのような結果が得られたら仮説が支持されたといえるのかを考え、それに合わせてサンプルサイズ設計をする
    • 例: 実験群の平均寄付額が統制群よりも有意に高いこと(5%水準の両側検定で有意)をもって、仮説が支持されたと判断する

2. 適切な検定の選択

  • 研究目的に応じて、使用する統計的検定の手法を決める
    • 平均値の比較→t検定(対応あり/なし)
    • 比率の比較→カイ二乗検定やz検定
    • 相関の検定→無相関検定
      • 例: 実験群の平均寄付額と統制群の平均寄付額の比較なので、対応のないt検定

3. 検定力分析の5つの方法の中から1つを選ぶ

  • G*Powerで可能な5種類の分析のうち1つを選ぶ
    • A priori(事前分析):必要なサンプルサイズを計算(最も一般的)
    • Compromise:検定力と有意水準の両方に妥協してサンプルサイズを決める 
    • Criterion:閾値(例:検定力0.8)を満たす効果量を計算
    • Post hoc(事後分析):得られたサンプルサイズで検出できる検定力を計算
    • Sensitivity:効果量の検出可能な下限値を推定
      • A priori(事前分析)をして何人分のデータをとればよいか計算

4. 分析に必要な変数を入力

  • 効果量(Cohen’s dなど)、有意水準(α)、検定力(1-β)、標本の割り付け比などを画面にしたがって入力
    • 例: 先行研究と同じくらいの中くらいの効果量、有意水準は一般的な0.05(5%)検出力も一般的な0.8(80%)

5. 「計算(calculate)」ボタンをクリック

  • 必要な情報を入力してボタンを押すと、すぐに結果が出る。

複雑なサンプルサイズ設計

交互作用効果 (Sommet et al., 2023)

交互作用効果を検出するための検定力分析に特化して、適切なサンプルサイズ設計の方法とよくある間違いを解説した論文。

  • 心理学や社会科学では、交互作用効果を検討することがよくある。
  • それにも関わらず、交互作用効果を検出するための適切な検定力分析がほとんど行われていない。
  • 交互作用効果は主効果よりも効果量(f^2)が小さい傾向にあるので、主効果に基づいた検定力分析では人数が不十分なことがある
  • なにを知りたいかに合わせて検出力分析をすべき。
  • 具体的な提案:
    • 小(small): f^2=0.02 の効果量を設定。
  • 視覚的に使いやすいツールとしてINT×Powerというウェブアプリが紹介されていた。今後のバージョンでは3要因の交互作用、3水準以上、調整変数、ロジスティック回帰やポアソン回帰にも対応予定らしい。

混合効果モデル

  • 階層構造をもつデータ(級内相関のあるデータ)は必要サンプルサイズが多くなる
    • 各データポイントが独立していないので、情報量がサンプルサイズ分ない
      • 生徒(Level 1) が クラスまたは学校(Level 2) に所属
        → 生徒の成績や態度が教師や学校特性に依存する
      • 個人(Level1) がグループ (Level2) で実験に参加
        →グループ内での相関が高くなる
      • 商品購入データ(Level 1) が 消費者(Level 2) にネスト

→消費者によって買い物の傾向が違う

Summary-statistics-based power analysis (Murayama et al., 2023)

  • 混合効果モデルの検定力分析は難しい。
    • 知識的にも。
    • 既存のツールでは入力しないといけないパラメータが多い(12項目も入力しないといけないツールもある)が、それらは先行研究で報告されていないことが多い。
  • そこで、先行研究のt値とサンプルサイズの情報だけを使って、新しい研究に必要なサンプルサイズを計算する方法を提案。
  • Summary-statistics-based power analysis for mixed-effects modelling

Rパッケージの紹介

simrパッケージ (Green & MacLeod, 2016)

  • GLMM(またはLMM)における検定力分析
    • 固定効果・ランダム効果を組み合わせたモデル(混合モデル)に対応
    • 正規分布ではない応答変数(例:2値、カテゴリデータ)もOK
  • シミュレーションによる検定力分析を行う
    • 効果が存在すると仮定し、応答変数をシミュレーションで生成
    • 生成されたデータに再度モデルを適用
    • 統計的検定を行う

を繰り返し、効果があるときにどれくらい検出できるか(検定力)を求める

他パッケージとの比較 (Green & MacLeod, 2016)

  • チュートリアルにしたがってやってみた
    • ① パッケージの読み込みとサンプルデータの準備
      • simdataというサンプルデータがパッケージに付属
install.packages("simr")
library(simr)
data(simdata)

> head(simdata)
y x g z

1 8.139081 1 a 3

2 7.947861 2 a 3

3 9.283638 3 a 3

4 7.779489 4 a 2

5 5.803512 5 a 3

6 6.131720 6 a 2
  • ②モデルを適合させる(今回の場合は、切片に群のランダム効果を仮定したポアソン回帰モデル)

model1 <- glmer(z ~ x + (1 | g), data = simdata, family = poisson)

summary(model1)

  • ③効果量を指定する(ためしにx <- -0.05)

fixef(model1)["x"] <- -0.05

  • ④検定力を出す
set.seed(123)  

powerSim(model1)

    33.40% (30.48, 36.42)

Test: z-test

      Effect size for x is -0.050

Based on 1000 simulations, (0 warnings, 0 errors)

alpha = 0.05, nrow = 30

Time elapsed: 0 h 1 m 9 s
  • やってみてわかったこと
    • まずは、モデルを指定する。 
    • 次に、必要な効果量(固定効果の傾きなど)を指定する。
    • 検定力を知りたいとき(この数で足りるか?)は、powerSim(モデル名)
    • 必要な数を知りたいときは、powerCurve(モデル名, along = “ランダム効果があればその単位”, breaks = c(人数の範囲))
      • 人数のシミュレーションにはすごく時間がかかる

mlpwrパッケージ (Zimmer et al., 2023)

  • surrogate modelingを使って少ないシミュレーションで複雑なモデルの検定力分析をする。
  • 任意の統計モデル(lmer, glmer, brms, rstan, lavaan など)を使える。
  • 複数の要素の最適化(予算など)も可能
    • 予算の制約下で、最大の検出力を持つ設計を自動で探す
  • 具体例1: 項目反応理論におけるサンプルサイズ設計
    • find.design 関数で以下のように書くだけで、人数を出力してくれる。計算は230秒。探索範囲を指定する (c(100,500)部分)。
res <- find.design(simfun = simfun_irt, boundaries = c(100, 500), power = 0.95)

summary(res)

Call: find.design(simfun = simfun_irt, boundaries = c(100, 500), power = 0.95)

Design: N = 331

Power: 0.95009, SE: 0.00414

Evaluations: 4000, Time: 229.84, Updates: 16

Surrogate: Logistic regression
  • 具体例2: 国ごとのマルチレベルモデルにおける国と参加者数のサンプルサイズ設計
    • 予算を指定したいときは、以下のように設定する
costfun_multi <- function(n, n.countries) {

  n * n.countries * 5 + n.countries * 1000

}

res <- find.design(

  simfun = simfun_multi,

  costfun = costfun_multi,

  boundaries = list(n = c(20, 300), n.countries = c(4, 30)),

  power = 0.95,

  evaluations = 6000

)
#探索時間は約689秒

Call: find.design(...)

Design: n = 92, n.countries = 14

Power: 0.9491, SE: 0.00598

Cost: 20440

Evaluations: 6000, Time: 689.04, Updates: 32

Surrogate: Gaussian process regression

サンプルサイズ設計と事前登録

結果を見てからサンプルサイズを変えてはいけない

統制群と実験群の差を検定するために、20人を対象に 10回の実験を行う。 有意な場合はそのまま報告するが、有意でなかった場合は サンプルサイズを各条件で一つずつ大きくし、 もう一度検定を行う。有意になるまで検定と実験を繰り返していく。

  • 上記の場合にタイプⅠのエラー確率 (本当は有意でないのに有意だと言ってしまう間違い)がどのように変化するのか、シミュレーションで確認 (小杉・紀ノ定・清水, 2023; pp229-230)
  •  タイプⅠエラーを起こす確率が13.4%まで跳ね上がり(本来であれば5%)、10000回シミュレーションして出てきたp値の分布も値が小さなところに集中していておかしい(本来であればエラー確率が一定: 一様分布になるはず)

事前にサンプルサイズ設計→事前登録

  • 「自分はこれくらいのエラー確率で検定をしますよ」というのを事前登録しておく
  • 事前登録研究はそうでない研究に比べて検定力分析を行っている割合が高く(55% vs 23%)、サンプルサイズが大きかった(平均959.0 vs 536.6) (Van Den Akker et al., 2023)

実際にした登録1

 効果量d

 Chen et al. (2009) で報告されているt値を元に効果量dを算出したところ1.12であったことから、大きい効果量の目安である0.8とした。 

有意水準α 

0.05に設定した。

検出力(1-β) 

0.8~0.9に設定した。 

級内相関 (ICC)

Chen et al. (2009)ではグループごとの貢献額のICCが報告されていなかったため、水野・清水 (2021b) の本研究のフェーズ2に該当するピリオド6~ピリオド10の級内相関をHAD (清水, 2016) で計算した。算出された②ICCは.76 (95%CI[.60, .87]) であった。ICCが大きくなるほど必要サンプルサイズが大きくなるため、上限である.87に設定した。 サンプルサイズの算出にはR3.6.0 (R Core Team, 2019) および宇佐美 (2011) の式(22)を使用した。検出力が0.8の場合のサンプルサイズは184名 (4名×46グループ)、0.9の場合のサンプルサイズは240名 (4名×60グループ) であった。検出力 (1-β) の上限は0.9とした。 よって本研究のサンプルサイズは、上記の効果量d、有意水準α、級内相関 (ICC) のもとでの③検出力(1-β)の下限が0.8、上限が0.9になるように、少なくとも184名(46グループ)、目標は240名 (60グループ) に設定する。募集人数は230名~300名である。

t値→d 

②より必要サンプルサイズが大きくなるように、信頼区間の上限を使った。

③実際に何人のデータがとれるかは幅があるので、検出力の下限と上限を設定してサンプルサイズを決定した。

実際にした登録2

We conducted a pre-test power analysis for Mixed-Model. The effect size was set at 0.20, which is the standard for small effect size, based on Study 1 (effect size was almost 0); the within-class correlation (ρ) was set at 0.43 based on Study 1; the significance level (α) was set at 0.125 because four tests will be conducted; and the power (1-β) was set at 0.8. As a result, the required sample size was estimated to be N=6390. However, due to the limited experimental funding we can only collect N=800 data. With this sample size, we can only detect d=0.568 with 80% probability, but in this study we will post once a recruitment for participation in the experiment with a maximum of 800 people. Since it is not known whether 800 participants will be obtained or how many will drop out of the experiment, we plan to conduct a post power analysis. 

混合モデルに対して事前の検定力分析を実施した。 ①効果量は0.20に設定した。これは、小さい効果の基準値であり、Study 1において効果量がほぼ0であったことに基づいている。クラス内相関(ρ)は、同様にStudy 1の結果に基づき0.43とした。 有意水準(α)は4つの検定を行う予定であるため0.125に設定し、検出力(1-β)は0.8とした。 その結果、②必要なサンプルサイズはN = 6390と推定された。 しかし、実験に使用可能な資金に限りがあるため、収集可能なデータ数は最大でN = 800である。 このサンプルサイズにおいては、効果量d = 0.568であれば80%の確率で効果を検出できる。 本研究では、800名を上限とした参加者募集を一度のみ行う予定である。 なお、800名すべてを確保できるか、あるいは脱落者がどの程度生じるかは不明であるため、事後の検定力分析(post-hoc power analysis)を実施する予定である。

①自分の前の実験を根拠に効果量を設定。

②必要サンプルサイズが非常に多く現実的に無理な数(6390!)だったので、その人数で検出できる効果量を正直に書いた。(今回の実験では、大きな効果量しか検出できない限界点がありますということ)

Open Science Framework (OSF) で事前登録の匿名リンクを作成する

事前登録の匿名リンク

OSFで研究の事前登録をしたあと、査読用に匿名リンクを作りたいけどうまくいかない(リンクを開くと事前登録ではなくプロジェクトのページに飛んでしまう)という話を聞いたので、方法をまとめることにしました。

前提: 事前登録は事前登録用の場所にアップする!

OSFでは、プロジェクトのページの中に事前登録用の場所があります。事前登録は、プロジェクトのページに直にアップするのではなく、「Registrations」からアップします。

うまくいかないやり方

下図のように、プロジェクトのトップページで作ったCreate view only link※からだと、事前登録へのアクセスができません。

※OSFでは、Create view only linkを押すと匿名のリンク(匿名リンクからアクセスするとContributorsのところがanonymousと表示されるので査読時に有用)が作成できます。

うまくいくやり方

トップページからリンクを作成するのではなく、「Registrations」のページからリンクを作ります。

1. 「Registrations」のページへ行く。

2. 登録した事前登録のページへ行く。

3. 右上のContributersを押す。このステップがわかりにくいですよね。

4. 下のView-only-Linksの横の「Add」を押す。

5. 適当なリンク名をつけ、Anonymizeにチェックをつけ、「Create」を押してリンクを作成する。

Link nameは自分の識別用なので、どんな名前でも大丈夫です。

上記の手順によって、事前登録への匿名リンクができました!査読時にはこちらのリンクを論文に貼っておけばOKです。

匿名リンクから事前登録にアクセスした場合は、以下のように表示されます。

オンライン実験 (oTree) で時間内にマッチングが成立しなかった場合に自動で別のメッセージを出す方法

クラウドソーシングサービス×oTreeでのオンライン実験

普段から私は、クラウドソーシングサービスとoTreeで作った実験プログラムを使ってオンライン実験をしています。クラウドソーシングサービスで参加者を募集してoTreeでの実験プログラムへのリンクにアクセスしてもらい、実験プログラムの最後に表示されるコードを入力してもらうことで謝礼を支払います。つまり、参加者の募集と謝礼の支払いをクラウドソーシングサービスで、実験課題と入力用コードの表示をoTreeで行っているということです。

マッチング不成立問題

しかし、グループで相互作用ををするタイプの実験をするときに、困ることがあります。それは、なかなか参加者のマッチングが成立しない場合があることです。例えば、4人グループで行う実験で最後の一人がなかなか来ないと、先に来た3人は実験課題が始められず、ずっと待つことになってしまうわけです。

その対策として、以前はマッチング待機画面を用意して「5分以上マッチングが成立しない場合は連絡してください、謝礼をお渡しするためのコードを送ります」とお伝えしていたのですが、必要以上に連絡をお願いするのもよくないですし、手動だと安定しないので、自動で謝礼支払い用のコードが表示されるようにしました。

画面見本

※ 静止画だとわからないですが、黒丸部分がアニメーションになっていて、動きます。

方法: 時間が経過したらメッセージを表示するJavescriptのついたWaitページを用意する

matchingWait.html

oTreeで使うテンプレートとして、こちらのコードをmatchingWait.htmlとして追加します。

static→templatesの中に新しいhtmlファイルmatchingWait.htmlを追加します。

{{ block content }}
<div id="wait-text">
    他の参加者が来るのを待っています。5分経っても4人の参加者がマッチングしなかった場合は、謝礼をお渡しするためのコードを自動で表示します。
</div>
<div class="spinner" id="spinner">
    <div class="double-bounce1"></div>
    <div class="double-bounce2"></div>
</div>
<script type="text/javascript">
    function startCountdown() {
        var countdownEnd = localStorage.getItem('countdownEnd');
        if (!countdownEnd) {
            countdownEnd = Date.now() + 5* 60 * 1000; // 5分後のタイムスタンプを保存
            localStorage.setItem('countdownEnd', countdownEnd);
        }

        var interval = setInterval(function() {
            var now = Date.now();
            var timeLeft = countdownEnd - now;

            if (timeLeft <= 0) {
                clearInterval(interval);
                clearInterval(refreshInterval); // リフレッシュを停止
                document.getElementById('wait-text').innerText = '5分以内にマッチングしませんでした。【数字】0000 をクラウドソーシング側にご入力いただければ、謝礼をお支払いします。入力後、こちらの画面は閉じていただいて構いません。この度は誠にありがとうございました。';
                document.getElementById('spinner').style.display = 'none'; // アニメーションを停止
                localStorage.removeItem('countdownEnd');
            }
        }, 1000);
    }

    // ページがリロードされてもタイマーを保持
    startCountdown();

    // 5秒ごとにページをリフレッシュ
    var refreshInterval = setInterval(function() {
        location.reload();
    }, 5000);
</script>

<style>
    .spinner {
        width: 40px;
        height: 40px;
        position: relative;
        margin: 100px auto;
    }

    .double-bounce1, .double-bounce2 {
        width: 100%;
        height: 100%;
        border-radius: 50%;
        background-color: #333;
        opacity: 0.6;
        position: absolute;
        top: 0;
        left: 0;
        -webkit-animation: sk-bounce 2.0s infinite ease-in-out;
        animation: sk-bounce 2.0s infinite ease-in-out;
    }

    .double-bounce2 {
        -webkit-animation-delay: -1.0s;
        animation-delay: -1.0s;
    }

    @-webkit-keyframes sk-bounce {
        0%, 100% { -webkit-transform: scale(0.0) }
        50% { -webkit-transform: scale(1.0) }
    }

    @keyframes sk-bounce {
        0%, 100% { 
            transform: scale(0.0);
            -webkit-transform: scale(0.0);
        } 50% { 
            transform: scale(1.0);
            -webkit-transform: scale(1.0);
        }
    }
</style>
{{ endblock }}

ポイントは、5秒おきにリフレッシュしているところです。これをしないと、マッチングが成立したのにも関わらず画面がこのページのまま自動で切り替わらないという問題が起こりました。

また、<style>~<style>の部分は、待っているときのアニメーションを表示させるためだけのコードなので、別になくてもいいです(上の画面見本の黒い〇の部分です)。

iniy.py Pages部分での設定

作ったテンプレートを読み込むように設定しています。

# PAGES

class matchingWait(WaitPage):

    def is_displayed(player):

        return player.round_number == 1

    template_name = 'matchingWait.html'

    def after_all_players_arrive(group: Group):

懸念点: サーバーへの負荷

懸念点として、「5秒ごとにリフレッシュする」という動作がどれくらいサーバーに負担をかけるのかがわかっていません。

少なくともこの間の実験では、Herokuサーバーの
dyno: Standard x2
Postgress Standard 7
同時接続: 100人
で、問題はありませんでした。

oTreeで実験を作る環境の構築

本記事の目的は、以下の疑問に答えることです。

  • oTreeで実験を作ってみたいけど、何から始めればいい?
  • どこでoTreeの実験の中身を編集すればいい?

必要なもの

oTreeで実験を作っていく前に、そのために必要なコンピュータの環境について紹介します。

  1. Python oTreeはPythonがベースになっているので、Pythonが必要です。
  2. oTree これがないと始まりません。※先にPythonを入れてから入れます
  3. エディタ (なんでもいい) 実験を編集していくときに必要です。エディタと呼ばれるツールであればなんでもいいですが、VS Code が軽くて使いやすくおすすめです。
  4. Powershell/コマンドプロンプト/ターミナル (どれでもいい) ※ 元々入っていますので、新しく入れる必要はありません。

1. Pythonのインストール

oTreeはPythonがベースになっているので、Pythonが必要です。

https://kinsta.com/jp/knowledgebase/install-python/ こちらの記事が、Windows、Mac、Linuxそれぞれについて書いてくださっていてわかりやすかったです。

注意: Python2.xと3.xがありますが、oTreeは3.xにしか対応していません。3.xを入れてください

既に入っている/入れ終わったら2.oTreeのインストールに進みます。

2. oTreeのインストール

コンピュータに元々入っている、PowerShell/コマンドプロンプト/ターミナルを開きます。コンピュータ内のアプリの中から探してください。WindowsにはPowerShellとコマンドプロンプト、Macにはターミナルが入っています。

PowerShell/コマンドプロンプト/ターミナルが開けたら、oTreeをインストールするためのコードを入力し、実行します (エンターキーで実行できます)。

pip3 install -U otree

3. エディタ

実験を編集していくときに必要です。エディタと呼ばれるツールであればなんでもいいですが、VS Code が軽くて使いやすくおすすめです。https://code.visualstudio.com/download こちらからインストールできます。

コンピュータ内にoTree用の場所を用意する

必要なものがインストールできたら、コンピュータ内に、oTreeで作った実験 (プロジェクト) を保存するようの場所を作ります。

※ 本項は、ディレクトリ構造にあまり詳しくない方向けです。ご自身で場所を指定できる方は読み飛ばしていただいて大丈夫です。

「ディレクトリ?場所?なにそれ?」という方は、Cドライブ直下にoTree用の場所を用意することをおすすめします。理由は、パス名 (ファイルがどこにあるかの住所みたいなものです) が短くて済み、問題が起こりにくいためです。

では早速やってみましょう。

Cドライブを開きます。

その中に「ユーザー」というフォルダがあるので開き、さらに自分のユーザー名のフォルダを開きます。

そこに、「oTree」というフォルダを作ります。

これで、oTreeで作った実験 (プロジェクト) の置き場ができました!

oTreeの実験の作り方・編集の仕方

oTreeプロジェクトを作ってみよう

oTreeで作った実験は、下図のように実験全体の「プロジェクト」とプロジェクト内の「アプリケーション」がある、という階層構造になっています。

プロジェクトは実験全体、アプリケーションはその中のひとつひとつの実験課題です。例えば、(1)事前質問紙→(2)最後通牒ゲーム→(3)事後質問紙という実験をしたい場合、その3つを別々のアプリケーションして作ることになります。

では、プロジェクトを作ってみましょう。さっき作った「oTree」のフォルダ内にプロジェクトを作りたいので、「oTree」フォルダへ移動します。Powershell/コマンドプロンプト/ターミナル で、

cd otree 

と入力し、実行してください。そのあと、oTreeプロジェクトを作る指示

を入力し、実行します。「otree startproject 〇〇」という指示は、「〇〇という名前のotreeプロジェクトを作ってね!」という意味です。

otree startproject sampleproject 

実行すると、Include sample games? (y or n): と聞かれますが、今回はn (NO) と答えます。ちなみにyにすると、サンプルのアプリケーションが大量に入ります。

Include sample games? (y or n): n

【発生しうる問題】

Macの場合に、ターミナルに管理者権限がないことでうまくプロジェクトを作成できない問題が生じることがあります。「Mac ターミナル 権限」等で調べると解決法が出てきます。

エディタでプロジェクトを確認

プロジェクトができたかどうか確認するために、作ったプロジェクトをエディタ (VS Code) で見てみましょう。

VS Codeを開いて、File→Open Folderで、先ほど作った「sampleproject」を開きます。

確認すると、色々なファイルが自動で作られていると思います。

なかでも重要なのが、下図のsettings.pyファイルです。

settings.pyファイルをいじることで、

  • どの順番でどのアプリケーションを参加者にやってもらうかの設定
  • 言語の設定
  • ゲーム内で得た通貨と実際の謝礼額の対応の設定

など、ゲーム全体の設定を行います。

oTreeのアプリケーションを作ってみよう

次に、プロジェクトの中にアプリケーションを作ってみます。先ほど述べたように、アプリケーションは一つ一つの実験課題 (例: 事前質問紙、最後通牒ゲーム、事後質問紙) のことです。

「sampleproject」というプロジェクトの中にアプリケーションを作るために、Powershell/コマンドプロンプト/ターミナルに戻って、「sampleproject」フォルダへ移動します。

cd sampleproject

※ ここで「パスが存在しない」というエラーが出る場合は、一回Powershell/コマンドプロンプト/ターミナルを閉じて場所が元に戻ってしまったのが原因なので、もう一度 cd otree で「otree」のフォルダに移動してから、cd sampleproject を実行してください。

#パスが存在しないというエラーが出る場合
cd otree
cd sampleproject

「sampleproject」に移動できたら、アプリケーションを作る指示

otree startapp samplegame

を入力し、実行します。プロジェクトを作るときと同じように、otree startapp 〇〇は、「〇〇という名前のアプリケーションを作ってね!」という意味です。

エディタでアプリケーションを確認

うまくアプリケーションができていれば、「sampleproject」の中に「samplegame」ができていて、さらにその中に「init.py」、「MyPage.html」、「Results.html」があるはずです。

oTreeではこれらのページをいじることで実験を作ります。具体的には、

  • init.py: どんな実験をするか、実験課題の挙動について設定する場所。
  • .htmlのファイル: 実験画面の見た目を編集する場所。必要な画面の数だけ増やすことができます。

以上が、

  • oTreeで実験を作ってみたいけど、何から始めればいい?
  • どこでoTreeの実験の中身を編集すればいい?

という話になります。閲覧くださりありがとうございました!

オンライン開講になった実験実習用に、廃棄物処理ゲーム( Hirose et al., 2004) をoTreeで作りました

はじめに

COVID-19感染拡大防止のため、社会心理学実験の授業がオンライン開講になりました。そこで、例年グループでトランプを使って行っていた廃棄物処理ゲーム ( Hirose et al., 2004) の授業回をオンラインでもできるよう、ゲームをoTreeで作りました。コードを全て載せています。

続きを読む

oTreeで作った実験をサーバーへアップして動かす

オンライン経済実験ツールoTreeで作った実験をサーバーにアップして、データをとることができたのでまとめておきます。※Windowsです。
oTree Hubを使う方法と、使わない方法の二つを紹介します。
実験全体ができていて、otree devserverで確認ができていて、あとは外部からアクセスして使えるようにしたいだけの状況を想定しています。

続きを読む