一般的なコメント
「私は10年生で、機械学習サイエンスフェアプロジェクトのデータをシミュレートしたいと考えています。」驚くばかり。私は10年生の数学を全く気にしませんでした。私はその年に代数2のようなものを取ったと思う...?数年後にあなたが私を失業させるまで待ちきれません!以下にいくつかアドバイスをしますが、このシミュレーションから何を学ぼうとしていますか?統計や機械学習ですでに知っていることは何ですか?これを知ることは、私(および他の人)がより具体的なヘルプをまとめるのに役立ちます。
Pythonは非常に便利な言語ですが、データのシミュレーションにはRの方が優れていると思います。データのシミュレーションで出会ったほとんどの本/ブログ/研究/クラス(また、人々が「モンテカルロ法」と呼ぶもの)はRにあります。R言語は、「統計学者、統計学者、シミュレーション研究に基づいてメソッドの動作を確認するほとんどのアカデミックは、Rを使用します。rnorm
正規分布、runif
ユニフォームなど、多くのクールな関数はベースR言語にあります(つまり、追加のパッケージは不要です)配布、rbeta
ベータ配布など。Rでは、入力する?Distributions
とヘルプページが表示されます。しかし、mvtnorm
またはのような他の多くのクールなパッケージがありますsimstudy
それは便利です。Pythonしか知らない場合は、Rの学習にDataCamp.comをお勧めします。物事を優しく紹介するのに良いと思う
ここでは多くのことが行われているようです:経時的(縦方向)、被験者内(多レベルモデルを使用)、季節的コンポーネント(おそらく時系列モデル)を持ち、すべて予測するデータが必要です二分した結果(ロジスティック回帰のようなもの)。シミュレーションの研究を始めた多くの人(私を含む)は一度にたくさんのものを投げ入れたいと思っていますが、これは非常に困難で複雑な場合があります。ですから、私がやることは、データを生成するための関数を1つまたは2つ作成するなど、単純なものから始めて、そこから構築することです。
特定のコメント
あなたの基本的な仮説は次のように見えます:「一日の時間は、誰かが薬を服用することに固執するかどうかを予測します。」そして、2つのシミュレーションデータセットを作成します。1つは関係があり、もう1つは関係がありません。
また、同じ人物からの複数の観測値を表すデータのシミュレーションについても言及します。これは、各人が自分の順守の可能性だけでなく、おそらく、時刻と順守の可能性の間の関係についての自分の傾きを持つことを意味します。このタイプの関係の「マルチレベル」または「階層」回帰モデルを検討することをお勧めしますが、これよりも簡単に始めることができると思います。
また、時間と投薬レジメンを順守する確率との間の継続的な関係に言及しているため、時系列モデリング(特に季節的な傾向を見る)が役立つと思います。これもシミュレーション可能ですが、繰り返しますが、もっと簡単に始められると思います。
私たちには1000人の人がいて、彼らが薬を一度しか飲んだかどうかを測定するとしましょう。また、午前、午後、または夕方に服用するように割り当てられているかどうかもわかります。薬の服用が1であり、服用が0であるとしましょうrbinom
。二項分布からの描画に使用して、二分データをシミュレートできます。特定の確率で各人が1つの観測値を持つように設定できます。人々は朝に80%、午後に50%、夜に65%を摂取する可能性が高いとしましょう。以下のコメントを付けて、以下のコードを貼り付けます#
:
set.seed(1839) # this makes sure the results are replicable when you do it
n <- 1000 # sample size is 1000
times <- c("morning", "afternoon", "evening") # create a vector of times
time <- sample(times, n, TRUE) # create our time variable
# make adherence probabilities based on time
adhere_prob <- ifelse(
time == "morning", .80,
ifelse(
time == "afternoon", .50, .65
)
)
# simulate observations from binomial distribution with those probabilities
adhere <- rbinom(n, 1, adhere_prob)
# run a logistic regression, predicting adherence from time
model <- glm(adhere ~ time, family = binomial)
summary(model)
この概要は、一部を示しています。
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.02882 0.10738 0.268 0.78839
timeevening 0.45350 0.15779 2.874 0.00405 **
timemorning 1.39891 0.17494 7.996 1.28e-15 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Intercept
午後を表し、私たちは夜と朝の両方が付着して有意に高い確率があることがわかります。この投稿では説明できませんが、ロジスティック回帰については多くの詳細がありますが、tテストでは、条件付きで通常分布する従属変数があると仮定しています。ロジスティック回帰モデルは、これらのような二分法(0対1)の結果がある場合により適しています。ほとんどの入門的な統計の本ではt検定について説明し、多くの入門的な機械学習の本ではロジスティック回帰について説明します。私が考えて統計的学習への紹介を:Rにおけるアプリケーションでの素晴らしいです、と著者はオンライン全部を投稿しました:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
シミュレーション研究に適した本については確信がありません。私はただいじり、他の人が何をしたかを読んだり、統計コンピューティングを専攻した大学院のコースから学んだ(教授の資料はこちら:http : //pj.freefaculty.org/guides/)。
最後に、すべての時間を同じ確率に設定することにより、効果がないことをシミュレートすることもできます。
set.seed(1839)
n <- 1000
times <- c("morning", "afternoon", "evening")
time <- sample(times, n, TRUE)
adhere <- rbinom(n, 1, .6) # same for all times
summary(glm(adhere ~ time, binomial))
返されるもの:
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.40306 0.10955 3.679 0.000234 ***
timeevening -0.06551 0.15806 -0.414 0.678535
timemorning 0.18472 0.15800 1.169 0.242360
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
これは、時間の間で確率が同じであることから予想されるように、時間の間に大きな違いはありません。