Общие комментарии
«Я учусь в 10-м классе и собираюсь смоделировать данные для проекта ярмарки машинного обучения». Потрясающие. Я не заботился о математике в 10 классе; Я думаю, что взял что-то вроде Алгебры 2 в этом году ...? Не могу дождаться, пока ты меня уволишь через несколько лет! Ниже я даю несколько советов, но: что вы пытаетесь извлечь из этого моделирования? С чем вы уже знакомы в области статистики и машинного обучения? Знание этого поможет мне (и другим) собрать более конкретную помощь.
Python - очень полезный язык, но я считаю, что R лучше для симуляции данных. Большинство книг / блогов / исследований / классов, с которыми я сталкивался по моделированию данных (также то, что люди называют «методами Монте-Карло» для фантазии), написаны на языке R. Язык R известен как «статистиками, для статистиков, «и большинство ученых, которые полагаются на симуляционные исследования, чтобы показать свои методы работы, используют R. Многие классные функции написаны на базовом языке R (то есть никаких дополнительных пакетов не требуется), например, rnorm
для нормального распределения, runif
для униформы. дистрибутив, rbeta
для бета-дистрибутива и так далее. В R, введя ?Distributions
, покажет вам страницу справки о них. Тем не менее, есть много других интересных пакетов, таких как mvtnorm
илиsimstudy
это полезно. Я бы порекомендовал DataCamp.com для изучения R, если вы знаете только Python; Я думаю, что они хороши для того, чтобы быть осторожно представленными вещам
Похоже, что у вас здесь много чего происходит: вам нужны данные, которые со временем (продольные), внутри-субъектные (возможно, с использованием многоуровневой модели) и имеют сезонный компонент (возможно, модель временных рядов), все предсказывают дихотомический результат (что-то вроде логистической регрессии). Я думаю, что многие люди, начинающие с симуляционных исследований (в том числе и я), хотят сразу добавить кучу вещей, но это может быть очень сложным и сложным. Поэтому я бы порекомендовал начать с чего-то более простого - возможно, с создания функции или двух для генерации данных, - а затем наращивать ее оттуда.
Конкретные комментарии
Похоже, ваша основная гипотеза такова: «Время дня предсказывает, соблюдает ли кто-то свои лекарства». А вы хотели бы два создать два смоделированных наборов данных: один , где есть отношения и тот , где есть не .
Вы также упоминаете моделирование данных для представления нескольких наблюдений от одного человека. Это означает, что у каждого человека будет своя собственная вероятность присоединения, а также, возможно, собственный наклон для связи между временем суток и вероятностью соблюдения. Я бы предложил рассмотреть "многоуровневые" или "иерархические" регрессионные модели для этого типа отношений, но я думаю, что вы могли бы начать проще, чем это.
Кроме того, вы упоминаете о постоянной взаимосвязи между временем и вероятностью соблюдения режима приема лекарств, что также заставляет меня думать, что моделирование временных рядов, особенно с учетом сезонных тенденций, будет для вас полезным. Это также можно моделировать, но, опять же, я думаю, что мы можем начать проще.
Допустим, у нас 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
The 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
Это не показывает существенных различий между временами, как мы могли бы ожидать от вероятности того же времени.