Ich bin in der 10. Klasse und möchte Daten für ein Projekt auf einer Messe für maschinelles Lernen simulieren. Das endgültige Modell wird für Patientendaten verwendet und sagt die Korrelation zwischen bestimmten Zeiten der Woche und den Auswirkungen voraus, die dies auf die Medikamenteneinhaltung innerhalb der Daten eines einzelnen Patienten hat. Die Adhärenzwerte sind binär (0 bedeutet, dass sie das Arzneimittel nicht eingenommen haben, 1 bedeutet, dass sie es getan haben). Ich möchte ein Modell für maschinelles Lernen erstellen, das aus der Beziehung zwischen der Wochenzeit lernen kann, und habe die Woche in 21 Zeitfenster unterteilt, drei für jede Tageszeit (1 ist Montagmorgen, 2 ist Montagnachmittag, etc.). Ich möchte Daten für 1.000 Patienten simulieren. Jeder Patient wird 30 Wochen Daten haben. Ich möchte bestimmte Trends einfügen, die mit einer Zeit der Woche und der Einhaltung verbunden sind. Beispielsweise, In einem Datensatz kann ich sagen, dass Zeitfenster 7 der Woche einen statistisch signifikanten Zusammenhang mit der Einhaltung hat. Damit ich feststellen kann, ob die Beziehung statistisch signifikant ist oder nicht, muss ich einen t-Test mit zwei Stichproben durchführen, bei dem ein Zeitfenster mit dem anderen verglichen wird, und sicherstellen, dass der Signifikanzwert unter 0,05 liegt.
Anstatt jedoch meine eigenen Daten zu simulieren und zu überprüfen, ob die von mir eingefügten Trends signifikant sind oder nicht, würde ich lieber rückwärts arbeiten und möglicherweise ein Programm verwenden, das ich bitten könnte, einem bestimmten Zeitfenster einen signifikanten Trend mit Einhaltung zuzuweisen, und es würde zurückkehren Binärdaten, die den von mir gewünschten Trend enthalten, sowie Binärdaten für die anderen Zeitfenster, die Rauschen enthalten, jedoch keinen statistisch signifikanten Trend erzeugen.
Gibt es ein Programm, mit dem ich so etwas erreichen kann? Oder vielleicht ein Python-Modul?
Jede Hilfe (auch allgemeine Kommentare zu meinem Projekt) wird sehr geschätzt !!
quelle
Antworten:
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 Normalverteilungrunif
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 wiemvtnorm
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ührenAnscheinend 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#
:Diese Zusammenfassung zeigt teilweise:
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.pdfIch 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:
Welches gibt zurück:
Dies zeigt keine signifikanten Unterschiede zwischen den Zeiten, wie wir es erwarten würden, wenn die Wahrscheinlichkeit über die Zeiten hinweg gleich ist.
quelle
Wenn Sie bereits Python kennen, können Sie mit Base Python
numpy
und / oder auf jeden Fall das erreichen, was Sie brauchenpandas
. Wie Mark White jedoch vorschlägt, ist eine Menge simulations- und statistikbezogener Dinge in R eingebettet, also auf jeden Fall einen Blick wert.Im Folgenden finden Sie ein Grundgerüst, wie Sie mit einer Python-Klasse vorgehen können. Sie können jedes Motiv so
np.random.normal
einstellen, dassbaseline_adherence
Rauschen entsteht. Dies gibt Ihnen eine pseudozufällige Einhaltung, zu der Sie die gezielte reduzierte Einhaltung an bestimmten Tagen hinzufügen können.quelle
Dies ist ein großartiges Projekt. Projekte wie dieses sind mit einer Herausforderung verbunden, und Ihre Methode zur Verwendung simulierter Daten ist eine hervorragende Möglichkeit, diese zu bewerten.
Haben Sie eine A-priori-Hypothese, z. B. "Menschen sind abends vergesslicher"? In diesem Fall wird ein statistischer Test durchgeführt, der die Häufigkeit des Vergessens am Abend im Vergleich zum Morgen vergleicht. Dies ist eine Bernoulli-Verteilung, wie die vorherigen Antwortenden sagten.
Der andere Ansatz besteht darin, Ihre Daten zu durchsuchen, um herauszufinden, welches Zeitfenster die höchste Fehlerrate aufweist. Es muss eines geben, also lautet die Frage: "Ist das nur ein Zufallsergebnis?". Die Signifikanzschwelle ist in diesem Fall höher. Wenn Sie sich darüber informieren möchten, suchen Sie nach "false discovery rate".
In Ihrem Fall ist das System so einfach, dass Sie die Schwelle mit Bedacht berechnen können. Es kann jedoch auch die allgemeine Methode angewendet werden: Simulieren Sie 1000 Datensätze ohne Ratenschwankung und ermitteln Sie dann die Häufigkeitsverteilung zufällig kleiner Zahlen. Vergleichen Sie Ihren realen Datensatz damit. Wenn 1pm der dünn besetzte Slot in den realen Daten ist, aber 50/1000 simulierte Datensätze einen genauso dünn besetzten Slot haben, ist das Ergebnis nicht robust.
quelle