Estoy en décimo grado y estoy buscando simular datos para un proyecto de feria de ciencias de aprendizaje automático. El modelo final se usará en los datos del paciente y predecirá la correlación entre ciertos momentos de la semana y el efecto que esto tiene sobre la adherencia a la medicación dentro de los datos de un solo paciente. Los valores de adherencia serán binarios (0 significa que no tomaron el medicamento, 1 significa que sí). Estoy buscando crear un modelo de aprendizaje automático que pueda aprender de la relación entre la hora de la semana, y separé la semana en 21 franjas horarias, tres para cada hora del día (1 es lunes por la mañana, 2 es lunes por la tarde, etc.) Estoy buscando simular datos de 1,000 pacientes. Cada paciente tendrá un valor de 30 semanas de datos. Quiero insertar ciertas tendencias asociadas con un momento de la semana y la adherencia. Por ejemplo, En un conjunto de datos, puedo decir que el intervalo de tiempo 7 de la semana tiene una relación estadísticamente significativa con la adherencia. Para poder determinar si la relación es estadísticamente significativa o no, me requeriría realizar una prueba t de dos muestras comparando un intervalo de tiempo con cada uno de los otros y asegurarme de que el valor de significancia sea menor que 0.05.
Sin embargo, en lugar de simular mis propios datos y verificar si las tendencias que inserté son significativas o no, prefiero trabajar hacia atrás y tal vez usar un programa al que podría pedirle que asigne un cierto intervalo de tiempo a una tendencia significativa con adherencia, y volvería datos binarios que contienen dentro de él la tendencia que solicité, y también datos binarios para los otros intervalos de tiempo que contienen algo de ruido pero no producen una tendencia estadísticamente significativa.
¿Hay algún programa que pueda ayudarme a lograr algo como esto? ¿O tal vez un módulo de Python?
¡Cualquier ayuda (incluso comentarios generales sobre mi proyecto) será muy apreciada!
fuente
Respuestas:
Comentarios generales
"Estoy en décimo grado y estoy buscando simular datos para un proyecto de feria de ciencias de aprendizaje automático". Increíble. No me importaban las matemáticas en décimo grado; Creo que tomé algo como Álgebra 2 ese año ...? ¡No puedo esperar hasta que me dejen sin trabajo en unos años! Te doy algunos consejos a continuación, pero: ¿Qué estás tratando de aprender de esta simulación? ¿Con qué estás familiarizado en estadística y aprendizaje automático? Saber esto me ayudaría (y a otros) a reunir una ayuda más específica.
Python es un lenguaje muy útil, pero creo que R es mejor para simular datos. La mayoría de los libros / blogs / estudios / clases que he encontrado sobre la simulación de datos (también lo que la gente llama "métodos Monte Carlo" para ser elegantes) están en R. El lenguaje R se conoce como "estadísticos, para estadísticos, "y la mayoría de los académicos, que se basan en estudios de simulación para mostrar que sus métodos funcionan, usan R. Muchas funciones interesantes están en el lenguaje base R (es decir, no se necesitan paquetes adicionales), como
rnorm
para una distribución normal,runif
para el uniforme distribución,rbeta
para la distribución beta, y así sucesivamente. En R, escribir?Distributions
le mostrará una página de ayuda sobre ellos. Sin embargo, hay muchos otros paquetes geniales comomvtnorm
osimstudy
que son utiles Recomendaría DataCamp.com para aprender R, si solo conoces Python; Creo que son buenos para ser amablemente introducidos en las cosas.Parece que está sucediendo mucho aquí: desea datos que están en el tiempo (longitudinales), dentro del tema (tal vez usando un modelo multinivel) y que tienen un componente estacional (tal vez un modelo de serie temporal), todos prediciendo Un resultado dicotómico (algo así como una regresión logística). Creo que muchas personas que comienzan con estudios de simulación (incluido yo mismo) quieren lanzar un montón de cosas a la vez, pero esto puede ser realmente desalentador y complicado. Entonces, lo que recomendaría hacer es comenzar con algo simple, tal vez hacer una función o dos para generar datos, y luego construir desde allí.
Comentarios Especificos
Parece que su hipótesis básica es: "La hora del día predice si alguien se adhiere o no a tomar su medicamento". Y que le gustaría dos crean dos conjuntos de datos simulados: Uno donde no es una relación y uno donde hay no .
También mencionas datos de simulación para representar múltiples observaciones de la misma persona. Esto significa que cada persona tendría su propia probabilidad de adhesión, así como, tal vez, su propia pendiente para la relación entre la hora del día y la probabilidad de adhesión. Sugeriría buscar modelos de regresión "multinivel" o "jerárquicos" para este tipo de relación, pero creo que podría comenzar de manera más simple que esto.
Además, usted menciona una relación continua entre el tiempo y la probabilidad de adherirse al régimen de medicamentos, lo que también me hace pensar que el modelado de series de tiempo, específicamente las tendencias estacionales, sería útil para usted. Esto también se puede simular, pero nuevamente, creo que podemos comenzar de manera más simple.
Digamos que tenemos 1000 personas, y medimos si tomaron o no su medicamento solo una vez. También sabemos si fueron asignados para tomarlo en la mañana, tarde o noche. Digamos que tomar el medicamento es 1, no tomarlo es 0. Podemos simular datos dicotómicos utilizando
rbinom
para sorteos de una distribución binomial. Podemos establecer que cada persona tenga 1 observación con una probabilidad dada. Digamos que las personas tienen un 80% de probabilidades de tomarlo por la mañana, 50% por la tarde y 65% por la noche. Pego el código a continuación, con algunos comentarios después#
:Este resumen muestra, en parte:
El
Intercept
representa la tarde, y podemos ver que tanto la tarde como la mañana tienen una probabilidad significativamente mayor de adherirse. Hay muchos detalles sobre la regresión logística que no puedo explicar en esta publicación, pero las pruebas t suponen que tiene una variable dependiente condicionalmente distribuida normalmente. Los modelos de regresión logística son más apropiados cuando tiene resultados dicotómicos (0 frente a 1) como estos. La mayoría de los libros de estadísticas introductorias hablarán sobre la prueba t , y muchos libros introductorios de aprendizaje automático hablarán sobre regresión logística. Creo que Introducción al aprendizaje estadístico: con aplicaciones en R es excelente, y los autores publicaron todo en línea:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdfNo estoy tan seguro de buenos libros para estudios de simulación; Aprendí solo jugando, leyendo lo que hicieron otras personas, y de un curso de posgrado tomé computación estadística (los materiales del profesor están aquí: http://pj.freefaculty.org/guides/ ).
Por último, también puede simular que no tiene ningún efecto configurando todos los tiempos para que tengan la misma probabilidad:
Que devuelve:
Esto no muestra diferencias significativas entre los tiempos, ya que esperaríamos que la probabilidad sea la misma en todos los tiempos.
fuente
Si ya conoces algo de Python, definitivamente podrás lograr lo que necesitas usando Python base junto con
numpy
y / opandas
. Sin embargo, como sugiere Mark White, muchas cosas relacionadas con simulación y estadísticas están integradas en R, por lo que definitivamente vale la pena echarle un vistazo.A continuación se muestra un marco básico sobre cómo puede abordar esto usando una clase Python. Puede usar
np.random.normal
para ajustar elbaseline_adherence
de cada sujeto para insertar algo de ruido. Esto le proporciona una adherencia pseudoaleatoria, a la que puede agregar la adherencia reducida específica en días específicos.fuente
Este es un gran proyecto. Hay un desafío para proyectos como este, y su método de usar datos simulados es una excelente manera de evaluarlos.
¿Tiene una hipótesis a priori, por ejemplo, "las personas son más olvidadizas por la noche"? En ese caso, una prueba estadística que compara la frecuencia del olvido en la noche en comparación con la mañana lo probará. Esta es una distribución de Bernoulli, como dijeron los respondedores anteriores.
El otro enfoque es rastrear sus datos para averiguar qué intervalo de tiempo tiene la tasa más alta de falla. Es probable que haya uno, por lo que la pregunta es "¿es solo un resultado casual?". El umbral de significancia es más alto en este caso. Si desea leer más sobre esto, busque "tasa de descubrimiento falso".
En su caso, el sistema es lo suficientemente simple como para que pueda calcular el umbral con un poco de reflexión. Pero también se podría utilizar el método general: 1000 conjuntos de datos similares sin variación de velocidad, luego averiguar la distribución de frecuencias de números bajos coincidentes. Compare su conjunto de datos real con él. Si 1pm es el espacio escaso en los datos reales, pero 50/1000 conjuntos de datos simulados tienen un espacio igualmente escaso, entonces el resultado no es sólido.
fuente