Observations générales
"Je suis en 10e année et je cherche à simuler des données pour un projet de salon des sciences de l'apprentissage automatique." Impressionnant. Je ne me souciais pas du tout des mathématiques en 10e année; Je pense que j'ai pris quelque chose comme Algebra 2 cette année-là ...? Je ne peux pas attendre jusqu'à ce que vous me mettiez au chômage dans quelques années! Je donne quelques conseils ci-dessous, mais: qu'essayez-vous d'apprendre de cette simulation? Que connaissez-vous déjà en statistiques et en apprentissage automatique? Savoir cela m'aiderait (ainsi que d'autres) à rassembler une aide plus spécifique.
Python est un langage très utile, mais je suis d'avis que R est meilleur pour simuler des données. La plupart des livres / blogs / études / classes que j'ai rencontrés sur la simulation de données (aussi ce que les gens appellent "les méthodes de Monte Carlo" pour être fantaisistes) sont en R. Le langage R est connu comme étant "par les statisticiens, pour les statisticiens, "et la plupart des universitaires - qui s'appuient sur des études de simulation pour montrer que leurs méthodes fonctionnent - utilisent R. Beaucoup de fonctions intéressantes sont dans le langage R de base (c'est-à-dire, aucun package supplémentaire n'est nécessaire), comme rnorm
pour une distribution normale, runif
pour l'uniforme distribution, rbeta
pour la distribution bêta, etc. Dans R, la saisie ?Distributions
vous montrera une page d'aide à leur sujet. Cependant, il existe de nombreux autres packages sympas comme mvtnorm
ousimstudy
qui sont utiles. Je recommanderais DataCamp.com pour apprendre R, si vous ne connaissez que Python; Je pense qu'ils sont bons pour s'initier doucement aux choses
Il semble que vous ayez beaucoup de choses à faire ici: vous voulez des données qui sont au fil du temps (longitudinal), au sein du sujet (peut-être en utilisant un modèle à plusieurs niveaux), et qui ont une composante saisonnière (peut-être un modèle de série chronologique), toutes prédisant un résultat dichotomique (quelque chose comme une régression logistique). Je pense que beaucoup de gens qui commencent par des études de simulation (y compris moi-même) veulent jeter un tas de choses à la fois, mais cela peut être vraiment intimidant et compliqué. Donc, ce que je recommanderais de faire, c'est de commencer par quelque chose de simple - peut-être de créer une fonction ou deux pour générer des données - puis de construire à partir de là.
Commentaires spécifiques
Il semble que votre hypothèse de base soit: "L'heure de la journée prédit si quelqu'un adhère ou non à la prise de ses médicaments." Et vous voudriez que deux créent deux ensembles de données simulés: un où il y a une relation et un où il n'y en a pas .
Vous mentionnez également la simulation de données pour représenter plusieurs observations d'une même personne. Cela signifie que chaque personne aurait sa propre probabilité d'adhésion ainsi que, peut-être, sa propre pente pour la relation entre l'heure de la journée et la probabilité d'adhésion. Je suggérerais d'étudier des modèles de régression "multiniveaux" ou "hiérarchiques" pour ce type de relation, mais je pense que vous pourriez commencer plus simplement que cela.
En outre, vous mentionnez une relation continue entre le temps et la probabilité d'adhérer au régime médicamenteux, ce qui me fait également penser que la modélisation de séries chronologiques - en particulier en regardant les tendances saisonnières - serait utile pour vous. Il est également possible de simuler, mais encore une fois, je pense que nous pouvons commencer plus simplement.
Disons que nous avons 1 000 personnes et nous mesurons si elles ont ou non pris leurs médicaments une seule fois. Nous savons également s'ils ont été chargés de le prendre le matin, l'après-midi ou le soir. Disons que prendre le médicament est 1, ne pas le prendre est 0. Nous pouvons simuler des données dichotomiques en utilisant rbinom
des tirages à partir d'une distribution binomiale. Nous pouvons définir chaque personne pour avoir 1 observation avec une probabilité donnée. Disons que les gens sont 80% susceptibles de le prendre le matin, 50% l'après-midi et 65% la nuit. Je colle le code ci-dessous, avec quelques commentaires après #
:
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)
Ce résumé montre, en partie:
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
Le Intercept
représente l'après-midi, et nous pouvons voir que le soir et le matin ont une probabilité d'adhésion significativement plus élevée. Il y a beaucoup de détails sur la régression logistique que je ne peux pas expliquer dans ce post, mais les tests t supposent que vous avez une variable dépendante conditionnellement distribuée normalement. Les modèles de régression logistique sont plus appropriés lorsque vous avez des résultats dichotomiques (0 contre 1) comme ceux-ci. La plupart des livres de statistiques d'introduction parleront du test t , et beaucoup de livres d'initiation à l'apprentissage automatique parleront de régression logistique. Je pense que l' introduction à l'apprentissage statistique: avec des applications en R est géniale, et les auteurs ont publié le tout en ligne:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
Je ne suis pas aussi sûr de bons livres pour les études de simulation; J'ai appris simplement en jouant, en lisant ce que les autres ont fait et en suivant un cours de troisième cycle, j'ai suivi l'informatique statistique (les documents du professeur sont ici: http://pj.freefaculty.org/guides/ ).
Enfin, vous pouvez également simuler sans effet en définissant toutes les heures pour avoir la même probabilité:
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))
Qui retourne:
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
Cela ne montre pas de différences significatives entre les époques, comme nous nous attendrions à ce que la probabilité soit la même à travers les époques.