Comentarios Generales
"Estoy en grado 10 y estoy buscando para simular los datos de una máquina de aprendizaje proyecto de feria de ciencia." Impresionante. No me importaba en absoluto acerca de las matemáticas en grado 10; creo que me tomé algo como Álgebra 2 de ese año...? No puedo esperar hasta que me puso fuera de un puesto de trabajo en un par de años! Puedo dar algunos consejos a continuación, pero: ¿Qué estás tratando de aprender a partir de esta simulación? Lo que ya estás familiarizado con las estadísticas y de aprendizaje de la máquina? Sabiendo esto ayudaría a mí (y a otros) armar un poco más de ayuda específicos.
Python es un lenguaje útil, pero yo soy de la opinión de que R es mejor para la simulación de los datos. La mayoría de los libros/blogs/estudios/clases he llegado a través de la simulación de los datos (también lo que la gente llama "métodos de Monte Carlo" para ser de lujo) en R. El lenguaje R se conoce como "por los estadísticos, para los estadísticos," y la mayoría de los académicos-que se basan en los estudios de simulación para mostrar sus métodos de trabajo-utilizar R. Un montón de funciones interesantes están en la base del lenguaje R (es decir, no hay paquetes adicionales necesarios), como rnorm
para una distribución normal, runif
para la distribución uniforme, rbeta
de la distribución beta, y así sucesivamente. En R, escribiendo en ?Distributions
le mostrará una página de ayuda sobre ellos. Sin embargo, hay muchas otras fresco paquetes como mvtnorm
o simstudy
que son útiles. Yo recomendaría DataCamp.com para el aprendizaje de R, si solo sabes Python; yo creo que son buenos para llegar introducido suavemente a las cosas
Parece que tienes mucho que hacer aquí: desea Que los datos que están a lo largo del tiempo (longitudinal), de sujeto (tal vez usando un modelo multinivel), y tienen un componente estacional para ellos (tal vez un modelo de serie temporal), todas la predicción de un resultado dicotómicas (algo así como una regresión logística). Creo que mucha de la gente que comienza con los estudios de simulación (incluido yo mismo) que desee echar un montón de cosas a la vez, pero esto puede ser muy difícil y complicado. Entonces, ¿qué me recomendaría hacer es empezar con algo simple-quizá haciendo una función o dos para la generación de datos y, a continuación, construir a partir de ahí.
Comentarios Específicos
Parece que su hipótesis básica es: "La hora del día predice si o no una persona se adhiere a tomar su medicación." Y a usted le gustaría, dos, crear dos conjuntos de datos simulados: Uno donde no es una relación, y donde no hay no.
También mencionar la simulación de datos para representar múltiples observaciones de la misma persona. Esto significa que cada persona tiene su propia probabilidad de adherencia así como, tal vez, su propia pendiente de la relación entre el tiempo de día y probabilidad de adherirse. Yo sugeriría mirar en "multinivel" o "jerárquica" de los modelos de regresión para este tipo de relación, pero creo que se podría empezar más sencillo que esto.
También, se menciona una relación de continuidad entre el tiempo y la probabilidad de adherirse al régimen de medicación, lo que me hace pensar también en las series de tiempo de modelado-específicamente en las tendencias de la temporada-sería útil para usted. Esto también es simular, pero de nuevo, creo que podemos empezar más simple.
Digamos que tenemos 1000 personas, y podemos medir si son o no tomó su medicamento sólo una vez. También sabemos que si ellos fueron asignados a la toma en la mañana, la tarde o la noche. Digamos que tomar la medicina es 1, no teniendo es 0. Podemos simular dicotómica de datos usando rbinom
de sorteos a partir de una distribución binomial. Podemos establecer que cada persona tenga 1 observación con una determinada probabilidad. Vamos a decir que la gente está un 80% de probabilidades de tomar en la mañana, el 50% en la tarde, y el 65% en la noche. Me pegue el código de abajo, con algunos comentarios después de la #
:
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)
Este resumen muestra, en parte:
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
El Intercept
representa la tarde, y podemos ver que tanto la noche y la mañana son significativamente mayor probabilidad de adherirse. Hay un montón de detalles acerca de regresión logística que no puedo explicar en este post, pero t-pruebas suponga que tiene un condicional normalmente distribuida de la variable dependiente. Modelos de regresión logística son más apropiadas cuando se tiene dicotómica (0 vs 1) los resultados como estos. La mayoría de introducción a las estadísticas, libros hablará sobre el t-test, y un montón de actividades de aprendizaje de la máquina libros de hablar de regresión logística. Creo Introducción a la Estadística de Aprendizaje: Con Aplicaciones en R es grande, y los autores publicados en línea todo el asunto: https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
Yo no estoy tan seguro acerca de los buenos libros para los estudios de simulación; aprendí de cachondeo, de leer lo que otras personas hicieron, y de un curso de postgrado tomé en informática de estadística (profesor de materiales están aquí: http://pj.freefaculty.org/guides/).
Por último, también puede simular tener ningún efecto por la configuración de todos los tiempos tienen la misma probabilidad:
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))
Que devuelve:
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
Esto muestra que no hay diferencias significativas entre los tiempos, como cabría esperar de la probabilidad de ser el mismo a través de los tiempos.