Genel yorumlar
"10. sınıftayım ve bir makine öğrenimi science fair projesi için veri simülasyonu yapmak istiyorum." Muhteşem. 10. sınıfta matematikle hiç ilgilenmedim; Sanırım o yıl Cebir 2 gibi bir şey aldım ...? Birkaç yıl içinde beni işten çıkaracak kadar bekleyemem! Aşağıda bazı tavsiyelerde bulunuyorum, ancak: Bu simülasyondan ne öğrenmeye çalışıyorsunuz? İstatistik ve makine öğreniminde zaten neleri biliyorsunuz? Bunu bilmek bana (ve diğerlerine) daha özel yardımlar koymamda yardımcı olacaktır.
Python çok kullanışlı bir dildir, ancak R'nin veri simülasyonu için daha iyi olduğunu düşünüyorum. Verileri simüle etmek için karşılaştığım kitapların / blogların / çalışmaların / sınıfların çoğu (ayrıca insanların "Monte Carlo yöntemlerini" fantezi olarak adlandırdığı şey) de R'dir. R dili, istatistikçiler tarafından, istatistikçiler için " "ve yöntemlerinin işe yaradığını göstermek için simülasyon çalışmalarına dayanan çoğu akademisyen R'yi kullanır. üniforma için rnorm
normal bir dağıtım gibi, temel R dilinde (yani ek paket gerekmez) birçok harika işlev vardır. runif
dağıtım, rbeta
beta dağıtım vb. R yazdığınızda ?Distributions
, üzerlerinde bir yardım sayfası gösterilir. Ancak, mvtnorm
veya gibi birçok harika paket varsimstudy
faydalıdır. Sadece Python biliyorsanız, R öğrenmek için DataCamp.com tavsiye ederim; Bence bir şeyleri nazikçe tanıtmak
Burada çok şey oluyor gibi görünüyor: Zaman içinde (boyuna), öznenin içinde (belki de çok düzeyli bir model kullanıyor) ve bunlara ilişkin mevsimsel bir bileşene (belki de bir zaman serisi modeli) sahip olan verilerin olmasını istiyorsunuz. ikilik bir sonuç (lojistik regresyon gibi bir şey). Bence simülasyon çalışmaları ile başlayan birçok insan (ben dahil) aynı anda bir sürü şey atmak istiyor, ancak bu gerçekten göz korkutucu ve karmaşık olabilir. Yapmayı tavsiye ettiğim şey basit bir şeyle başlamak - belki de veri üretmek için bir iki işlev yapmak - ve oradan oluşturmak.
Özel Yorumlar
Temel hipoteziniz şu şekildedir: "Günün zamanı, birisinin ilaçlarını almaya bağlı olup olmadığını tahmin eder." Ve iki iki simüle veri kümeleri oluşturmak istiyorum: Orada biri olan bir ilişki ve bir olduğu yerde değil .
Aynı kişiden gelen birden fazla gözlemi temsil etmek için veri simülasyonundan da bahsediyorsunuz. Bu, her bireyin kendi bağlılık olasılığının yanı sıra belki de günün saati ile yapışma olasılığı arasındaki ilişki için kendi eğimine sahip olacağı anlamına gelir. Bu tür bir ilişki için "çok düzeyli" veya "hiyerarşik" regresyon modellerine bakmanızı öneririm, ancak bence bundan daha basit başlayabilirsiniz.
Ayrıca, zaman ve ilaç rejimine uyma olasılığı arasında sürekli bir ilişkiden bahsediyorsunuz, bu da bana zaman serisi modellemesinin - özellikle mevsimsel eğilimlere bakmak - sizin için yararlı olacağını düşündürüyor. Bu da simüle edilebilir, ancak yine daha basit başlayabiliriz.
Diyelim ki 1000 kişimiz var ve ilaçlarını sadece bir kez alıp almadıklarını ölçüyoruz. Ayrıca sabah, öğleden sonra veya akşam almak üzere görevlendirildiklerini de biliyoruz. Diyelim ki ilacı almak 1, onu almamak 0. rbinom
Binom dağılımından çekilişler kullanarak iki boyutlu verileri simüle edebiliriz . Her bir kişiyi belirli bir olasılıkla 1 gözlem yapmaya ayarlayabiliriz. Diyelim ki insanlar sabahları% 80, öğleden sonra% 50 ve geceleri% 65. Aşağıdaki kodu, sonra bazı yorumlar ile yapıştırın #
:
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)
Bu özet kısmen göstermektedir:
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
Intercept
Öğleden temsil eder ve biz akşam ve sabah hem kalarak önemli ölçüde daha yüksek olasılık olduğunu görebilirsiniz. Bu yazıda açıklayamadığım lojistik regresyon hakkında birçok ayrıntı var, ancak t- testleri, koşullu olarak normal olarak dağıtılmış bağımlı bir değişkeniniz olduğunu varsayar. Bunun gibi iki (0 - 1) sonuç elde ettiğinizde lojistik regresyon modelleri daha uygundur. Çoğu giriş istatistik kitabı t- testi hakkında konuşacak ve birçok giriş makinesi öğrenme kitabı lojistik regresyon hakkında konuşacaktır. Bence R Uygulamaları: İstatistiksel Öğrenmeye Giriş harika ve yazarlar çevrimiçi şeyi yayınladı:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
Simülasyon çalışmaları için iyi kitaplar konusunda emin değilim; Sadece etrafta dolaşmaktan, diğer insanların ne yaptığını okumaktan ve lisansüstü bir dersten istatistiksel hesaplama üzerine öğrendim (profesörün materyalleri burada: http://pj.freefaculty.org/guides/ ).
Son olarak, her zaman aynı olasılığa sahip olacak şekilde ayarlayarak herhangi bir etkisinin olmadığını simüle edebilirsiniz:
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))
Hangi döndürür:
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
Bu, olasılıklar arasında aynı olmasını beklediğimizden, zamanlar arasında önemli bir fark göstermemektedir.