Я учусь в 10 классе и собираюсь смоделировать данные для проекта ярмарки машинного обучения. Окончательная модель будет использоваться на данных пациента и будет предсказывать корреляцию между определенным временем недели и влиянием, которое это оказывает на приверженность к лечению в данных одного пациента. Значения приверженности будут двоичными (0 означает, что они не принимали лекарство, 1 означает, что они принимали). Я пытаюсь создать модель машинного обучения, которая способна учиться на основе взаимосвязи между временем недели и разделить неделю на 21 временной интервал, по три на каждое время дня (1 - утро понедельника, 2 - понедельник днем, и т.д.). Я хочу смоделировать данные на 1000 пациентов. Каждый пациент получит данные за 30 недель. Я хочу вставить определенные тенденции, связанные со временем недели и приверженностью. Например, в одном наборе данных я могу сказать, что временной интервал 7 недели имеет статистически значимую связь с приверженностью. Для того, чтобы я мог определить, является ли взаимосвязь статистически значимой или нет, мне потребуется выполнить t-тест из двух выборок, сравнивая один временной интервал с каждым из остальных, и убедиться, что значение значимости меньше 0,05.
Однако вместо того, чтобы имитировать мои собственные данные и проверять, являются ли введенные мной тренды значительными или нет, я бы предпочел работать задом наперед и, возможно, использовать программу, которую я мог бы попросить назначить определенному временному интервалу значительную тенденцию с соблюдением, и она вернется. двоичные данные, которые содержат в себе тенденцию, о которой я просил, а также двоичные данные для других временных интервалов, которые содержат некоторый шум, но не дают статистически значимого тренда.
Есть ли какая-нибудь программа, которая может помочь мне достичь чего-то подобного? Или, может быть, модуль Python?
Буду очень признателен за любую помощь (даже общие комментарии к моему проекту) !!
источник
Ответы:
Общие комментарии
«Я учусь в 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% ночью. Я вставляю код ниже, с некоторыми комментариями после#
:Это резюме показывает, частично:
The
Intercept
представляет день, и мы можем видеть, что как вечером, так и утром значительно выше вероятность прилипания. Есть много деталей о логистической регрессии, которые я не могу объяснить в этом посте, но t -tests предполагают, что у вас есть условно нормально распределенная зависимая переменная. Модели логистической регрессии являются более подходящими, когда у вас есть дихотомические (0 против 1) результаты, подобные этим. В большинстве вводных книг по статистике будет рассказано о t- тесте, а во многих вводных книгах по машинному обучению - о логистической регрессии. Я думаю, что Введение в статистическое обучение: с приложениями в R это здорово, и авторы выложили все это онлайн:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdfЯ не так уверен в хороших книгах для симуляционных исследований; Я научился только возиться, читать то, что делали другие люди, а также получить диплом магистра по статистическим вычислениям (материалы профессора здесь: http://pj.freefaculty.org/guides/ ).
Наконец, вы также можете смоделировать отсутствие эффекта, установив для всех времен одинаковую вероятность:
Который возвращает:
Это не показывает существенных различий между временами, как мы могли бы ожидать от вероятности того же времени.
источник
Если вы уже знаете некоторый Python, то вы определенно сможете достичь того, что вам нужно, используя базовый Python вместе с
numpy
и / илиpandas
. Тем не менее, как предполагает Марк Уайт, в R добавлено много вещей, связанных с симуляцией и статистикой, так что определенно стоит посмотреть.Ниже приведена базовая структура того, как вы можете подойти к этому, используя класс Python. Вы можете использовать
np.random.normal
для настройкиbaseline_adherence
каждого объекта, чтобы вставить шум. Это дает вам псевдослучайную приверженность, к которой вы можете добавить целевую сниженную приверженность в определенные дни.источник
Это отличный проект. Для таких проектов есть проблема, и ваш метод использования смоделированных данных - отличный способ оценить его.
Есть ли у вас априорная гипотеза, например, «люди более забывчивы вечером»? В этом случае статистический тест, который сравнивает частоту забываний вечером с утренней проверкой. Это распределение Бернулли, как говорили предыдущие респонденты.
Другой подход заключается в тралении ваших данных, чтобы выяснить, какой временной интервал имеет наибольшую частоту отказов. Должен быть один, поэтому возникает вопрос: «Это просто случайный результат?». Порог значимости выше в этом случае. Если вы хотите прочитать об этом, ищите «уровень ложного обнаружения».
В вашем случае система достаточно проста, чтобы вы могли рассчитать порог, немного подумав. Но можно также использовать общий метод: подобрать 1000 наборов данных без изменения скорости, а затем выяснить распределение частот совпадения малых чисел. Сравните ваш реальный набор данных с ним. Если 1РМ является разреженным интервалом в реальных данных, но моделируемые наборы данных 50/1000 имеют одинаково разреженный интервал, то результат не является надежным.
источник