सांख्यिकीय रूप से महत्वपूर्ण होने के लिए डेटा का अनुकरण कैसे करें?


18

मैं 10 वीं कक्षा में हूं और मैं एक मशीन लर्निंग साइंस फेयर प्रोजेक्ट के लिए डेटा का अनुकरण करना चाहता हूं। अंतिम मॉडल का उपयोग रोगी डेटा पर किया जाएगा और सप्ताह के कुछ निश्चित समय के बीच सहसंबंध की भविष्यवाणी करेगा और इसका प्रभाव किसी एकल रोगी के डेटा के भीतर दवा के पालन पर पड़ेगा। पालन ​​मूल्य द्विआधारी होगा (0 का मतलब है कि उन्होंने दवा नहीं ली, 1 का मतलब है कि उन्होंने किया था)। मैं एक मशीन लर्निंग मॉडल बनाने के लिए देख रहा हूं जो सप्ताह के समय के बीच के रिश्ते से सीखने में सक्षम है, और सप्ताह को 21 समय स्लॉट में अलग कर दिया है, दिन के प्रत्येक समय के लिए तीन (सोमवार की सुबह है, 2 सोमवार दोपहर है) आदि।)। मैं 1,000 मरीजों के डेटा का अनुकरण करना चाह रहा हूं। प्रत्येक रोगी के पास 30 सप्ताह का डेटा होगा। मैं सप्ताह के समय और पालन के साथ जुड़े कुछ रुझानों को सम्मिलित करना चाहता हूं। उदाहरण के लिए, एक डेटा सेट में मैं कह सकता हूं कि सप्ताह के टाइम स्लॉट का पालन के साथ सांख्यिकीय रूप से महत्वपूर्ण संबंध है। मेरे लिए यह निर्धारित करने के लिए कि क्या संबंध सांख्यिकीय रूप से महत्वपूर्ण है या नहीं, मुझे दो नमूना टी-टेस्ट करने की आवश्यकता होगी, जो दूसरों के प्रत्येक के लिए एक समय स्लॉट की तुलना करें और सुनिश्चित करें कि महत्व मान 0.05 से कम है।

हालांकि, अपने स्वयं के डेटा का अनुकरण करने और यह जांचने के बजाय कि मेरे द्वारा डाले गए रुझान महत्वपूर्ण हैं या नहीं, मैं इसके बजाय पीछे की ओर काम करना चाहूंगा और शायद एक ऐसे कार्यक्रम का उपयोग करूं जो मैं एक निश्चित समय स्लॉट को पालन करने के लिए कह सकता हूं कि यह एक महत्वपूर्ण प्रवृत्ति है। द्विआधारी डेटा जिसमें यह प्रवृत्ति है जिसे मैंने पूछा था, और अन्य समय स्लॉट्स के लिए द्विआधारी डेटा जिसमें कुछ शोर शामिल है, लेकिन सांख्यिकीय रूप से महत्वपूर्ण प्रवृत्ति नहीं पैदा करता है।

क्या कोई कार्यक्रम है जो मुझे इस तरह से कुछ हासिल करने में मदद कर सकता है? या शायद एक अजगर मॉड्यूल?

जो भी मदद (मेरी परियोजना पर भी सामान्य टिप्पणी) बहुत सराहना की जाएगी !!


4
यह एक बड़ा सवाल है। और कुछ ऐसा है जो अधिकांश वैज्ञानिकों को अनुदान के लिए आवेदन करने से पहले अध्ययन डिजाइन चरण में करना चाहिए। मैं बहुत बार देखता हूं कि लोग पहले अपना डेटा इकट्ठा करते हैं और यह पता लगाने की कोशिश करते हैं कि बाद में इसका विश्लेषण कैसे किया जाए, जिसके परिणामस्वरूप सांख्यिकीविद् केवल यह बता सकें कि रोनाल्ड फिशर के शब्दों में प्रयोग की क्या मृत्यु हुई थी ।
एस। कोलासा - मोनिका डे

@StephanKolassa हालाँकि, यह बताना बहुत कठिन है कि मानव डेटा के साथ कुछ प्रयोगों में क्या डेटा उपलब्ध होगा, और अन्य सेटिंग में एक डेटा का उपयोग होता है जो उपलब्ध है और अधिक संग्रह नहीं कर सकता ...
18'0 को llrs

2
@llrs: यह पूरी तरह से सही है। और यह निश्चित रूप से सिमुलेशन अभ्यास को सूचित करना चाहिए। पहले से यह सोचना बेहतर है कि क्या डेटा उपलब्ध हैं, प्रयोग के बाद यह पता लगाने के बजाय कि महत्वपूर्ण डेटा प्राप्त नहीं किया जा सकता है।
एस। कोलासा - मोनिका

(+1) मुझे इस प्रश्न को कुछ हद तक आपत्तिजनक
रॉबर्ट लांग

@RobertLong, आप ऐसा क्यों कहते हैं? मैं केवल इसलिए पूछता हूं क्योंकि मैं यह सुनिश्चित करना चाहता हूं कि मैं प्रतिक्रिया में कुछ भी याद नहीं कर रहा हूं जो इसे कम विश्वसनीय बनाता है।
नीलाशा भट्टाचार्जी

जवाबों:


14

सामान्य टिप्पणियाँ

  • "मैं 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

यह समय के बीच कोई महत्वपूर्ण अंतर नहीं दिखाता है, क्योंकि हम संभावना से कई बार समान होने की उम्मीद करेंगे।


पुस्तक अनुशंसा के लिए बहुत बहुत धन्यवाद! बस मुझे छुट्टी पढ़ने के लिए क्या चाहिए था!
एमडी-टेक

इस के लिए बहुत बहुत धन्यवाद! मुझे पता था कि मुझे अपनी परियोजना के मशीन सीखने के पहलू के लिए एक लॉजिस्टिक रिग्रेशन मॉडल की आवश्यकता थी, लेकिन ऐसा लगता है कि डेटा के साथ-साथ अनुकरण भी किया गया है। हालांकि, मैं इस धारणा के तहत था कि लॉजिस्टिक रिग्रेशन को समय के क्रम के लिए आवश्यक है, लेकिन इस मामले में ऐसा नहीं है क्योंकि हर बार एक अलग श्रेणी होती है जिसका दूसरे से कोई संबंध नहीं है। मैं अपने गणित के शिक्षक के साथ चर्चा करने के बाद इस निष्कर्ष पर आया था, लेकिन हम दोनों बहुत अच्छी तरह से गलत हो सकते हैं। क्या आप स्पष्ट कर सकते हैं कि वास्तव में लॉजिस्टिक प्रतिगमन का उपयोग यहां क्यों किया जा सकता है?
नीलाशा भट्टाचार्जी

@NeelashaBhattacharjee डेटा का अनुकरण करना और लॉजिस्टिक रिग्रेशन मॉडल को फिट करना दो अलग-अलग चरण हैं- हम एक ही डेटा का अनुकरण कर सकते थे और यदि हम चाहते थे तो एक आकस्मिक तालिका और ची-स्क्वायर स्टेटिस्टिक का उपयोग करके इसका विश्लेषण कर सकते थे। आप सही हैं कि मैं जिस मॉडल को फिट करता हूं, वह समय में किसी भी क्रम को एन्कोड नहीं करता है। हालांकि, प्रतिगमन मॉडल इस बात पर धारणा बनाते हैं कि निर्भर चर कैसे वितरित किया जाता है, स्वतंत्र चर नहीं। हम भविष्यवक्ताओं, निरंतर भविष्यवक्ताओं, भविष्यवक्ताओं की गिनती, इत्यादि का आदेश दे सकते थे और वे सभी लॉजिस्टिक प्रतिगमन के लिए ठीक होंगे।
मार्क व्हाइट

@ नीलाशताचरजी लॉजिस्टिक रिग्रेशन का उपयोग यहां किया जा सकता है क्योंकि हम एक द्विध्रुवीय आश्रित चर का निर्माण कर रहे हैं - यानी दो और केवल दो संभावित परिणाम। लॉजिस्टिक रिग्रेशन क्या करता है, "लॉजिस्टिक लिंक फंक्शन" का उपयोग रिग्रेशन समीकरण (उदाहरण के लिए, b0 + b1 * x) के सभी अनुमानित मानों को 0 और 1 के बीच फिट करने के लिए करते हैं। और हम इन नंबरों को संभावना कहते हैं जो किसी के पास हैं। 1. पर निर्भर चर का मान
मार्क व्हाइट

आपको बहुत - बहुत धन्यवाद! हालांकि, मैं सोच रहा था कि आप दो सिम्युलेटेड डेटा सेटों के बीच पी मूल्यों को कैसे देख सकते हैं और यह निर्धारित कर सकते हैं कि क्या एक महत्वपूर्ण प्रवृत्ति और दूसरा था। मेरे लिए, दोनों सेटों में p मान हैं जो महत्वपूर्ण होने के लिए पर्याप्त भिन्न हैं।
नीलाशा भट्टाचार्जी

4

यदि आप पहले से ही कुछ पायथन को जानते हैं, तो आप निश्चित रूप से आधार पायथन के साथ numpyऔर / या का उपयोग करने की आवश्यकता को प्राप्त कर पाएंगे pandas। जैसा कि मार्क व्हाइट ने सुझाव दिया है, बहुत सारे सिमुलेशन और आँकड़े-संबंधित सामान आर में बेक किए गए हैं, इसलिए निश्चित रूप से देखने लायक है।

नीचे एक बुनियादी ढांचा है कि आप पायथन वर्ग का उपयोग करके इसे कैसे देख सकते हैं। आप कुछ शोर सम्मिलित करने के लिए प्रत्येक विषय को np.random.normalसमायोजित करने के लिए उपयोग कर सकते हैं baseline_adherence। यह आपको एक छद्म यादृच्छिक पालन देता है, जिसमें आप विशिष्ट दिनों में लक्षित कम पालन को जोड़ सकते हैं।

import pandas as pd
import numpy as np

from itertools import product

class Patient:

    def __init__(self, number, baseline_adherence=0.95):
        self.number = number
        self.baseline_adherence = baseline_adherence
        self.schedule = self.create_schedule()

    def __repr__(self):
        return "I am patient number {}".format(self.number)

    def create_schedule(self):

        time_slots = []
        for (day, time) in product(range(1, 8), range(1, 4)):
            time_slots.append("Day {}; Slot {}".format(day, time))
        week_labels = ["Week {}".format(x) for x in range(1, 31)]
        df = pd.DataFrame(np.random.choice([0, 1],
                                           size=(30, 21),#1 row per week, 1 column per time slot
                                           p=(1-self.baseline_adherence, self.baseline_adherence)),
                          index=week_labels,
                          columns=time_slots
                         )
        return df

    def targeted_adherence(self, timeslot, adherence=0.8):

        if timeslot in self.schedule.columns:
            ad = np.random.choice([0, 1],
                                  size=self.schedule[timeslot].shape,
                                  p=(1-adherence, adherence)
                                 )
            self.schedule[timeslot] = ad


sim_patients = [Patient(x) for x in range(10)]
p = sim_patients[0]
p.targeted_adherence("Day 1; Slot 3")

1

यह एक बड़ी परियोजना है। इस तरह की परियोजनाओं के लिए एक चुनौती है, और नकली डेटा का उपयोग करने का आपका तरीका इसका आकलन करने का एक शानदार तरीका है।

क्या आपके पास एक प्राथमिकता परिकल्पना है, जैसे "लोग शाम को अधिक भुलक्कड़ हैं"? उस मामले में, सुबह की तुलना में शाम को भूलने की आवृत्ति की तुलना करने वाला एक सांख्यिकीय परीक्षण इसका परीक्षण करेगा। यह एक बर्नोली वितरण है, जैसा कि पिछले उत्तरदाताओं ने कहा था।

दूसरा तरीका यह है कि आपके डेटा को पता लगाया जाए कि किस टाइम स्लॉट में विफलता की दर सबसे अधिक है। एक होने के लिए बाध्य है, इसलिए सवाल यह है कि "क्या यह सिर्फ एक मौका है?"। इस मामले में महत्व की सीमा अधिक है। यदि आप इस बारे में पढ़ना चाहते हैं, तो "झूठी खोज दर" खोजें।

आपके मामले में प्रणाली काफी सरल है कि आप थोड़े से विचार के साथ सीमा की गणना कर सकते हैं। लेकिन सामान्य विधि का भी उपयोग किया जा सकता है: बिना किसी भिन्नता वाले 1000 डेटासेटों का अनुकरण करें, फिर संयोगात्मक संख्याओं की आवृत्ति वितरण का पता लगाएं। अपने असली डेटासेट की तुलना करें। यदि 1pm वास्तविक डेटा में स्पार्स स्लॉट है, लेकिन 50/1000 सिम्युलेटेड डेटासेट में समान रूप से स्पार्स स्लॉट है, तो परिणाम मजबूत नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.