Allgemeine Kommentare
"Ich bin in der 10. Klasse und möchte Daten für ein Projekt auf einer Messe für maschinelles Lernen simulieren." Genial. In der 10. Klasse interessierte mich Mathe überhaupt nicht. Ich glaube, ich habe in diesem Jahr so etwas wie Algebra 2 genommen ...? Ich kann es kaum erwarten, dass du mich in ein paar Jahren arbeitslos machst! Ich gebe unten einige Ratschläge, aber: Was versuchen Sie aus dieser Simulation zu lernen? Was kennen Sie bereits in Statistik und maschinellem Lernen? Das zu wissen würde mir (und anderen) helfen, etwas spezifischere Hilfe zusammenzustellen.
Python ist eine sehr nützliche Sprache, aber ich bin der Meinung, dass R besser für die Simulation von Daten ist. Die meisten Bücher / Blogs / Studien / Kurse, die ich zur Simulation von Daten gefunden habe (auch was die Leute als "Monte Carlo Methoden" bezeichnen), sind in R geschrieben. Die R-Sprache wird von Statistikern als "für Statistiker" bezeichnet. "und die meisten Akademiker - die sich auf Simulationsstudien stützen, um zu zeigen, wie ihre Methoden funktionieren - verwenden R. Viele coole Funktionen befinden sich in der Basis-R-Sprache (das heißt, es sind keine zusätzlichen Pakete erforderlich), wie zum Beispiel rnorm
für eine Normalverteilung runif
für die Uniform Distribution, rbeta
für die Beta-Distribution und so weiter. Wenn Sie in R eingeben, ?Distributions
wird eine Hilfeseite angezeigt. Es gibt jedoch viele andere coole Pakete wie mvtnorm
odersimstudy
das sind nützlich. Ich würde DataCamp.com zum Erlernen von R empfehlen, wenn Sie nur Python kennen. Ich denke, dass sie gut dafür sind, sich sanft in die Dinge einzuführen
Anscheinend ist hier eine Menge los: Sie möchten Daten, die über einen längeren Zeitraum (in Längsrichtung), innerhalb des Subjekts (möglicherweise unter Verwendung eines mehrstufigen Modells) und mit einer saisonalen Komponente (möglicherweise einem Zeitreihenmodell) vorliegen und alle vorhersagen ein dichotomes Ergebnis (so etwas wie eine logistische Regression). Ich denke, viele Leute, die mit Simulationsstudien anfangen (auch ich selbst), wollen eine Menge Sachen auf einmal reinwerfen, aber das kann wirklich entmutigend und kompliziert sein. Ich würde also empfehlen, mit etwas Einfachem zu beginnen - vielleicht ein oder zwei Funktionen zum Generieren von Daten - und dann von dort aus aufzubauen.
Spezifische Kommentare
Es sieht so aus, als ob Ihre grundlegende Hypothese lautet: "Die Tageszeit sagt voraus, ob jemand an der Einnahme seiner Medikamente festhält oder nicht." Und Sie möchten zwei zwei simulierte Datensätze erstellen: Eines , wo es ist eine Beziehung , und eine , wo gibt es nicht .
Sie erwähnen auch das Simulieren von Daten, um mehrere Beobachtungen derselben Person darzustellen. Dies bedeutet, dass jede Person ihre eigene Wahrscheinlichkeit der Einhaltung sowie möglicherweise ihre eigene Steigung für die Beziehung zwischen Tageszeit und Wahrscheinlichkeit der Einhaltung haben würde. Ich würde vorschlagen, "mehrstufige" oder "hierarchische" Regressionsmodelle für diese Art von Beziehung zu untersuchen, aber ich denke, Sie könnten einfacher anfangen.
Außerdem erwähnen Sie eine kontinuierliche Beziehung zwischen Zeit und Wahrscheinlichkeit der Einhaltung des Medikationsschemas, was mich auch dazu veranlasst, Zeitreihenmodelle - insbesondere saisonale Trends - als hilfreich für Sie zu betrachten. Das ist auch simulierbar, aber ich denke, wir können einfacher anfangen.
Nehmen wir an, wir haben 1000 Menschen und messen, ob sie ihre Medizin nur einmal eingenommen haben oder nicht. Wir wissen auch, ob sie beauftragt wurden, es morgens, nachmittags oder abends zu nehmen. Nehmen wir an, dass die Einnahme des Arzneimittels 1 ist und nicht 0. Wir können dichotome Daten simulieren, indem wir rbinom
Auszüge aus einer Binomialverteilung verwenden. Wir können für jede Person eine Beobachtung mit einer bestimmten Wahrscheinlichkeit festlegen. Nehmen wir an, 80% der Menschen nehmen es morgens, 50% nachmittags und 65% nachts ein. Ich füge den folgenden Code mit einigen Kommentaren ein #
:
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)
Diese Zusammenfassung zeigt teilweise:
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
Das Intercept
stellt den Nachmittag dar, und wir können sehen, dass sowohl am Abend als auch am Morgen eine signifikant höhere Wahrscheinlichkeit des Anhaftens besteht. Es gibt viele Details zur logistischen Regression, die ich in diesem Beitrag nicht erläutern kann, aber bei t- Tests wird davon ausgegangen, dass Sie eine bedingt normalverteilte abhängige Variable haben. Logistische Regressionsmodelle eignen sich eher für dichotome (0 vs. 1) Ergebnisse wie diese. Die meisten einführenden Statistikbücher befassen sich mit dem t- Test, und viele einführende Bücher zum maschinellen Lernen befassen sich mit logistischer Regression. Ich denke, die Einführung in das statistische Lernen: Mit Applications in R ist großartig, und die Autoren haben das Ganze online gepostet:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
Ich bin mir bei guten Büchern für Simulationsstudien nicht so sicher. Ich lernte nur durch herumspielen, lesen, was andere Leute taten, und durch einen Abschlusskurs über statistisches Rechnen (Materialien für Professoren finden Sie hier: http://pj.freefaculty.org/guides/ ).
Zuletzt können Sie auch simulieren, dass keine Auswirkung vorliegt, indem Sie alle Zeiten auf die gleiche Wahrscheinlichkeit einstellen:
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))
Welches gibt zurück:
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
Dies zeigt keine signifikanten Unterschiede zwischen den Zeiten, wie wir es erwarten würden, wenn die Wahrscheinlichkeit über die Zeiten hinweg gleich ist.