सामान्य टिप्पणियाँ
"मैं 10 वीं कक्षा में हूं और मैं मशीन लर्निंग साइंस फेयर प्रोजेक्ट के लिए डेटा का अनुकरण करना चाह रहा हूं।" बहुत बढ़िया। मैंने 10 वीं कक्षा में गणित के बारे में बिल्कुल भी ध्यान नहीं दिया; मुझे लगता है कि मैंने उस वर्ष बीजगणित 2 जैसा कुछ लिया था ...? मैं तब तक इंतजार नहीं कर सकता जब तक आप मुझे कुछ सालों में नौकरी से निकाल नहीं देते! मैं नीचे कुछ सलाह देता हूं, लेकिन: आप इस सिमुलेशन से क्या सीखने की कोशिश कर रहे हैं? आप पहले से ही सांख्यिकी और मशीन सीखने में क्या परिचित हैं? यह जानने से मुझे (और अन्य) कुछ और विशिष्ट मदद मिल सकेगी।
पायथन एक बहुत ही उपयोगी भाषा है, लेकिन मेरी राय है कि डेटा का अनुकरण करने के लिए आर बेहतर है। अधिकांश पुस्तकों / ब्लॉगों / अध्ययनों / कक्षाओं में मैं डेटा के अनुकरण पर आया हूं (जिसे लोग फैंसी होने के लिए "मोंटे कार्लो तरीके" भी कहते हैं) आर में हैं। आर भाषा को "सांख्यिकीविदों द्वारा" के रूप में जाना जाता है, सांख्यिकीविदों के लिए, "और अधिकांश शिक्षाविद - जो अपने तरीकों को काम करने के लिए सिमुलेशन अध्ययन पर भरोसा करते हैं - आर का उपयोग करें। बहुत सारे शांत कार्य आधार आर भाषा में हैं (जो कि कोई अतिरिक्त पैकेज आवश्यक नहीं है), जैसे कि rnorm
सामान्य वितरण के runif
लिए, वर्दी के लिए। वितरण, rbeta
बीटा वितरण के लिए, और इसी तरह। आर में, टाइपिंग ?Distributions
आपको उन पर एक सहायता पृष्ठ दिखाएगा। हालांकि, कई अन्य शांत पैकेज हैं जैसे mvtnorm
याsimstudy
यह उपयोगी हैं। मैं R सीखने के लिए DataCamp.com की सिफारिश करूंगा, यदि आप केवल पायथन को जानते हैं; मुझे लगता है कि चीजों को धीरे से पेश करने के लिए वे अच्छे हैं
ऐसा लगता है कि आपके यहाँ बहुत कुछ हो रहा है: आप ऐसे डेटा चाहते हैं जो समय के साथ हों (अनुदैर्ध्य), भीतर-विषय (शायद एक बहुस्तरीय मॉडल का उपयोग करके), और उनके पास एक मौसमी घटक है (शायद एक समय श्रृंखला मॉडल), सभी भविष्यवाणी कर रहे हैं एक द्विगुणित परिणाम (एक लॉजिस्टिक प्रतिगमन जैसा कुछ)। मुझे लगता है कि सिमुलेशन अध्ययन (खुद सहित) से शुरू होने वाले बहुत से लोग एक ही बार में सामान का एक गुच्छा फेंकना चाहते हैं, लेकिन यह वास्तव में चुनौतीपूर्ण और जटिल हो सकता है। इसलिए मैं जो करने की सलाह दूंगा वह कुछ सरल से शुरू हो रहा है - शायद डेटा बनाने के लिए एक फ़ंक्शन या दो बनाना - और फिर वहां से निर्माण करना।
विशिष्ट टिप्पणियाँ
ऐसा लगता है कि आपकी मूल परिकल्पना है: "दिन का समय इस बात की भविष्यवाणी करता है कि कोई व्यक्ति अपनी दवा लेने का पालन करता है या नहीं।" और अगर आप दो दो नकली डेटा सेट बनाने चाहते हैं: एक, जहां है एक रिश्ता है और एक जहां नहीं ।
आप एक ही व्यक्ति से कई टिप्पणियों का प्रतिनिधित्व करने के लिए अनुकरण डेटा का भी उल्लेख करते हैं। इसका मतलब है कि प्रत्येक व्यक्ति के पालन की अपनी संभावना होगी और साथ ही, शायद, दिन के समय और पालन करने की संभावना के बीच संबंध के लिए उनकी अपनी ढलान होगी। मैं इस प्रकार के संबंधों के लिए "बहुस्तरीय" या "पदानुक्रमित" प्रतिगमन मॉडल देखने का सुझाव दूंगा, लेकिन मुझे लगता है कि आप इससे भी सरल शुरुआत कर सकते हैं।
इसके अलावा, आप समय और दवा के पालन की संभावना के बीच एक निरंतर संबंध का उल्लेख करते हैं, जिससे मुझे भी लगता है कि समय श्रृंखला मॉडलिंग - विशेष रूप से मौसमी रुझानों को देखना- आपके लिए उपयोगी होगी। यह भी अनुकरण-योग्य है, लेकिन फिर से, मुझे लगता है कि हम सरल शुरुआत कर सकते हैं।
मान लीजिए कि हमारे पास 1000 लोग हैं, और हम मापते हैं कि उन्होंने केवल एक बार अपनी दवाई ली या नहीं। हम यह भी जानते हैं कि क्या उन्हें सुबह, दोपहर या शाम को लेने के लिए सौंपा गया था। मान लें कि दवा लेना 1 है, इसे नहीं लेना 0. हम rbinom
द्विपद वितरण से ड्रॉ के लिए उपयोग करके द्विबीजपत्री डेटा का अनुकरण कर सकते हैं । हम प्रत्येक व्यक्ति को दी गई संभावना के साथ 1 अवलोकन करने के लिए सेट कर सकते हैं। मान लीजिए कि लोगों को इसे सुबह लेने की संभावना 80% है, दोपहर में 50% और रात में 65%। मैं नीचे दिए गए कोड को कुछ टिप्पणियों के साथ पेस्ट करता हूं #
:
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)
यह सारांश दिखाता है, भाग में:
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
दोपहर का प्रतिनिधित्व करता है, और हम देख सकते हैं कि शाम और सुबह दोनों पालन करने की काफी अधिक संभावना है। लॉजिस्टिक रिग्रेशन के बारे में बहुत सारे विवरण हैं जो मैं इस पोस्ट में नहीं समझा सकता हूं, लेकिन टी- टिट्स यह मानते हैं कि आपके पास सशर्त रूप से वितरित-निर्भर डिपॉज़िट चर है। लॉजिस्टिक रिग्रेशन मॉडल तब अधिक उपयुक्त होते हैं जब आपके पास इन जैसे डायकोटोमस (0 बनाम 1) परिणाम होते हैं। अधिकांश परिचयात्मक सांख्यिकी पुस्तकें t -est के बारे में बात करेंगी , और बहुत सारी परिचयात्मक मशीन सीखने की किताबें लॉजिस्टिक प्रतिगमन के बारे में बात करेंगी। मुझे लगता है कि सांख्यिकीय सीखना का परिचय: आर में अनुप्रयोग के साथ महान है, और लेखकों ने पूरी बात ऑनलाइन पोस्ट की है:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
मैं सिमुलेशन अध्ययन के लिए अच्छी पुस्तकों के बारे में सुनिश्चित नहीं हूं; मैंने सिर्फ गड़बड़ करने से सीखा, अन्य लोगों ने क्या किया, और एक स्नातक पाठ्यक्रम से मैंने सांख्यिकीय कंप्यूटिंग पर काम किया (प्रोफेसर की सामग्रियां यहां हैं: http://pj.freefacademy.org/guides/ )।
अंत में, आप एक ही संभावना होने के लिए सभी समय निर्धारित करके कोई प्रभाव नहीं होने का अनुकरण कर सकते हैं:
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))
कौन सा रिटर्न:
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
यह समय के बीच कोई महत्वपूर्ण अंतर नहीं दिखाता है, क्योंकि हम संभावना से कई बार समान होने की उम्मीद करेंगे।