Estou na 10ª série e pretendo simular dados para um projeto de feira de ciências de aprendizado de máquina. O modelo final será usado nos dados do paciente e preverá a correlação entre determinados horários da semana e o efeito que isso tem na adesão ao medicamento nos dados de um único paciente. Os valores de adesão serão binários (0 significa que eles não tomaram o medicamento, 1 significa que eles tomaram). Estou procurando criar um modelo de aprendizado de máquina capaz de aprender com o relacionamento entre a hora da semana e separar a semana em 21 horários, três para cada hora do dia (1 é segunda-feira pela manhã, 2 é segunda-feira à tarde, etc.) Eu estou procurando simular 1.000 pacientes no valor de dados. Cada paciente terá 30 semanas de dados. Quero inserir certas tendências associadas a um horário da semana e aderência. Por exemplo, em um conjunto de dados, posso dizer que o intervalo de tempo 7 da semana tem uma relação estatisticamente significativa com a adesão. Para determinar se o relacionamento é estatisticamente significativo ou não, seria necessário realizar um teste t de duas amostras comparando um intervalo de tempo com cada um dos outros e garantir que o valor de significância seja menor que 0,05.
No entanto, em vez de simular meus próprios dados e verificar se as tendências que inseri são significativas ou não, prefiro trabalhar de trás para frente e talvez usar um programa que eu poderia pedir para atribuir a um determinado intervalo de tempo uma tendência significativa com aderência e retornaria dados binários que contêm a tendência solicitada e também dados binários para os outros intervalos de tempo que contêm algum ruído, mas não produzem uma tendência estatisticamente significativa.
Existe algum programa que possa me ajudar a conseguir algo assim? Ou talvez um módulo python?
Qualquer ajuda (mesmo comentários gerais sobre o meu projeto) será extremamente apreciada!
fonte
Respostas:
Comentários gerais
"Estou na 10ª série e pretendo simular dados para um projeto de feira de ciências de aprendizado de máquina". Impressionante. Eu não me importava com matemática na 10ª série; Eu acho que peguei algo como Álgebra 2 naquele ano ...? Mal posso esperar até você me deixar de trabalhar em alguns anos! Dou alguns conselhos abaixo, mas: O que você está tentando aprender com esta simulação? Com o que você já está familiarizado em estatística e aprendizado de máquina? Saber disso me ajudaria (e outros) a reunir alguma ajuda mais específica.
Python é uma linguagem muito útil, mas sou da opinião de que R é melhor para simular dados. A maioria dos livros / blogs / estudos / aulas que encontrei sobre a simulação de dados (também o que as pessoas chamam de "métodos de Monte Carlo" são chiques) estão em R. A linguagem R é conhecida como "por estatísticos, para estatísticos, "e a maioria dos acadêmicos - que dependem de estudos de simulação para mostrar que seus métodos funcionam - usam R. Muitas funções interessantes estão na linguagem R básica (ou seja, nenhum pacote adicional necessário), como
rnorm
para uma distribuição normal,runif
para o uniforme distribuição,rbeta
para a distribuição beta, e assim por diante. No R, digitar?Distributions
mostrará uma página de ajuda sobre eles. No entanto, existem muitos outros pacotes interessantes, comomvtnorm
ousimstudy
que são úteis. Eu recomendaria o DataCamp.com para aprender R, se você apenas conhece Python; Eu acho que eles são bons para serem gentilmente apresentados às coisasParece que você tem muita coisa acontecendo aqui: você quer dados com o tempo (longitudinal), dentro do assunto (talvez usando um modelo multinível) e que tenham um componente sazonal (talvez um modelo de série temporal), todos prevendo um resultado dicotômico (algo como uma regressão logística). Acho que muitas pessoas que começam os estudos de simulação (inclusive eu) querem jogar um monte de coisas de uma só vez, mas isso pode ser realmente assustador e complicado. Então, o que eu recomendaria fazer é começar com algo simples - talvez criar uma função ou duas para gerar dados - e depois construir a partir daí.
Comentários específicos
Parece que sua hipótese básica é: "A hora do dia prediz se alguém adere ou não a tomar seus medicamentos". E você gostaria dois criam dois conjuntos de dados simulados: um onde não é um relacionamento e aquele em que há não .
Você também menciona a simulação de dados para representar várias observações da mesma pessoa. Isso significa que cada pessoa teria sua própria probabilidade de adesão, bem como, talvez, sua própria inclinação para a relação entre hora do dia e probabilidade de adesão. Eu sugeriria olhar para modelos de regressão "multinível" ou "hierárquico" para esse tipo de relacionamento, mas acho que você poderia começar mais simples que isso.
Além disso, você menciona uma relação contínua entre tempo e probabilidade de aderir ao regime de medicação, o que também me faz pensar que a modelagem de séries temporais - olhando especificamente para as tendências sazonais - seria útil para você. Isso também é capaz de simular, mas, novamente, acho que podemos começar mais simples.
Digamos que temos 1000 pessoas e medimos se eles tomaram ou não seus remédios apenas uma vez. Também sabemos se eles foram designados para levá-lo pela manhã, tarde ou noite. Digamos que tomar o medicamento seja 1 e não 0. Podemos simular dados dicotômicos usando
rbinom
empates de uma distribuição binomial. Podemos definir que cada pessoa tenha 1 observação com uma determinada probabilidade. Digamos que as pessoas tenham 80% de chance de tomá-lo pela manhã, 50% à tarde e 65% à noite. Eu colo o código abaixo, com alguns comentários depois#
:Este resumo mostra, em parte:
O
Intercept
representa a tarde, e podemos ver que a noite e a manhã têm uma probabilidade significativamente maior de aderir. Há muitos detalhes sobre a regressão logística que não posso explicar neste post, mas os testes t presumem que você tenha uma variável dependente condicionalmente distribuída normalmente. Modelos de regressão logística são mais apropriados quando você tem resultados dicotômicos (0 vs. 1) como esses. A maioria dos livros introdutórios de estatística fala sobre o teste t , e muitos livros introdutórios de aprendizado de máquina falam sobre regressão logística. Eu acho ótimo Introdução ao aprendizado estatístico: com aplicativos em R , e os autores postaram tudo online:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdfNão tenho tanta certeza sobre bons livros para estudos de simulação; Eu aprendi apenas brincando, lendo o que as outras pessoas fizeram, e em um curso de graduação que fiz em computação estatística (os materiais do professor estão aqui: http://pj.freefaculty.org/guides/ ).
Por fim, você também pode simular sem efeito, definindo todos os tempos para ter a mesma probabilidade:
Que retorna:
Isso não mostra diferenças significativas entre os tempos, como seria de esperar da probabilidade ser a mesma ao longo dos tempos.
fonte
Se você já conhece algum Python, definitivamente poderá conseguir o que precisa usando o Python base junto com
numpy
e / oupandas
. Como Mark White sugere, porém, muitas coisas relacionadas a estatísticas e estatísticas são incorporadas ao R, então vale a pena dar uma olhada.Abaixo está uma estrutura básica de como você pode abordar isso usando uma classe Python. Você pode usar
np.random.normal
para ajustar obaseline_adherence
assunto de cada um para inserir algum ruído. Isso fornece uma aderência pseudo-aleatória, à qual você pode adicionar a aderência reduzida direcionada em dias específicos.fonte
Este é um ótimo projeto. Há um desafio para projetos como esse, e seu método de usar dados simulados é uma ótima maneira de avaliá-los.
Você tem uma hipótese a priori, por exemplo, "as pessoas esquecem mais à noite"? Nesse caso, um teste estatístico que compara a frequência do esquecimento à noite em comparação com a manhã o testará. Esta é uma distribuição de Bernoulli, como disseram os respondentes anteriores.
A outra abordagem é rastrear seus dados para descobrir qual intervalo de tempo tem a maior taxa de falhas. É provável que haja um, então a pergunta é "este é apenas um resultado casual?". O limite de significância é mais alto neste caso. Se você quiser ler sobre isso, pesquise "taxa de descoberta falsa".
No seu caso, o sistema é simples o suficiente para que você possa calcular o limite com um pouco de reflexão. Mas o método geral também pode ser usado: simule 1000 conjuntos de dados sem variação de taxa e descubra a distribuição de frequência de números baixos coincidentes. Compare seu conjunto de dados real com ele. Se 13:00 for o slot esparso nos dados reais, mas os conjuntos de dados simulados 50/1000 tiverem um slot igualmente esparso, o resultado não será robusto.
fonte