Загальні коментарі
"Я перебуваю в 10 класі і шукаю змоделювати дані для проекту ярмарку машинного навчання." Дивовижно. Я зовсім не переймався математикою у 10 класі; Я думаю, що я взяв щось на зразок Алгебри 2 того року ...? Я не можу дочекатися, поки ти не звільниш мене з роботи через кілька років! Я даю кілька порад нижче, але: Що ви намагаєтеся навчитися з цього моделювання? Що ви вже знайомі зі статистики та машинного навчання? Знаючи це, я б допомогла мені (та іншим) зібрати ще якусь конкретну допомогу.
Python - дуже корисна мова, але я вважаю, що 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
Зображення Intercept
представляє полудень, і ми можемо бачити, що і ввечері, і вранці значно більша ймовірність дотримання. Є багато деталей щодо логістичної регресії, яку я не можу пояснити в цій публікації, але t -тести припускають, що у вас є умовно нормально розподілена залежна змінна. Логістичні регресійні моделі є більш доцільними, коли у вас є дихотомічні (0 проти 1) результати подібні. Більшість вступних книг зі статистикою будуть говорити про t -test, а багато вступних книг машинного навчання розповідатимуть про логістичну регресію. Я думаю, що вступ до статистичного навчання: із додатками в R чудово, і автори розмістили все це в мережі:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
Я не так впевнений у хороших книгах для симуляційних досліджень; Я навчився просто безладно, читати, що робили інші люди, і після аспірантури я взяв на себе статистичні обчислення (матеріали професора тут: http://pj.freefacturing.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
Це не показує суттєвих відмінностей між часом, як ми могли б очікувати від того, що ймовірність буде однаковою в рази.