普通的留言
“我在 10 年级,我正在寻找为机器学习科学博览会项目模拟数据。” 惊人的。我在 10 年级时根本不关心数学;我想我那年学了代数2之类的东西……?我等不及几年后你让我失业了!我在下面给出一些建议,但是:你想从这个模拟中学到什么?您在统计和机器学习方面已经熟悉什么?知道这一点将帮助我(和其他人)整理一些更具体的帮助。
Python 是一种非常有用的语言,但我认为 R 更适合模拟数据。我遇到的大多数关于模拟数据的书籍/博客/研究/课程(也就是人们所谓的“蒙特卡洛方法”)都是用 R 语言编写的。R 语言被称为“统计学家,统计学家, ” 并且大多数学者——依靠模拟研究来证明他们的方法有效——使用 R。许多很酷的函数都在基础 R 语言中(也就是说,不需要额外的包),例如rnorm
正态分布,runif
均匀分布分布,rbeta
对于 beta 分布,等等。在 R 中,输入?Distributions
会显示一个关于它们的帮助页面。但是,还有许多其他很酷的软件包,例如mvtnorm
或simstudy
这是有用的。如果你只知道 Python,我会推荐 DataCamp.com 来学习 R;我认为它们很适合温和地介绍事物
看起来你在这里做了很多事情:你想要随着时间的推移(纵向)、主题内(可能使用多级模型)的数据,并且它们具有季节性成分(可能是时间序列模型),所有预测二分法结果(类似于逻辑回归)。我认为很多从模拟研究开始的人(包括我自己)都想一次性投入一大堆东西,但这确实令人生畏和复杂。所以我建议做的是从一些简单的事情开始——也许制作一两个函数来生成数据——然后从那里开始构建。
具体意见
看起来您的基本假设是:“一天中的时间可以预测某人是否坚持服药。” 您希望两个创建两个模拟数据集:一个有关系,一个没有关系。
您还提到模拟数据以表示来自同一个人的多个观察结果。这意味着每个人都有自己的依从概率,也许还有他们自己的斜率,用于一天中的时间和遵守概率之间的关系。我建议研究这种类型的关系的“多级”或“分层”回归模型,但我认为你可以开始比这更简单。
此外,您提到时间和坚持服药方案的概率之间的连续关系,这也让我认为时间序列建模(特别是查看季节性趋势)会对您有所帮助。这也是可模拟的,但我认为我们可以从更简单的开始。
假设我们有 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 -tests 假设您有一个条件正态分布的因变量。当您有这样的二分法(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
这表明时间之间没有显着差异,正如我们所期望的那样,不同时间的概率是相同的。