सांख्यिकीय सॉफ्टवेयर का परीक्षण


10

सांख्यिकीय सॉफ्टवेयर के परीक्षण में कौन सी तकनीक / दृष्टिकोण उपयोगी हैं? मुझे उन कार्यक्रमों में विशेष रूप से दिलचस्पी है जो अधिकतम संभावना का उपयोग करके पैरामीट्रिक अनुमान लगाते हैं।

अन्य कार्यक्रमों या प्रकाशित स्रोतों से उन लोगों के परिणामों की तुलना करना हमेशा संभव नहीं होता है, क्योंकि जब मैं अपनी जरूरत का प्रोग्राम लिखता हूं, तो ज्यादातर यह संभव नहीं होता है क्योंकि किसी मौजूदा सिस्टम में गणना की जरूरत होती है।

मैं उन तरीकों पर जोर नहीं दे रहा हूं जो शुद्धता की गारंटी दे सकते हैं। मैं उन तकनीकों से खुश रहूंगा जो त्रुटियों के कुछ अंश को पकड़ सकती हैं।

जवाबों:


8

एक उपयोगी तकनीक मोंटे कार्लो परीक्षण है। यदि दो एल्गोरिदम हैं जो एक ही काम करते हैं, तो दोनों को लागू करें, उन्हें यादृच्छिक डेटा खिलाएं, और जांच लें कि (संख्यात्मक फज़ल के लिए एक छोटी सहिष्णुता के भीतर) वे एक ही उत्तर का उत्पादन करते हैं। मैंने पहले भी कई बार ऐसा किया है:

  • मैंने केंडल के ताऊ बी के कार्यान्वयन को लागू करने के लिए एक कुशल लेकिन कठिन लिखा था । इसका परीक्षण करने के लिए मैंने एक मृत-सरल 50-लाइन कार्यान्वयन लिखा था जो में चलता था । ( एन 2 )O(N log N)O(N2)

  • मैंने रिज रिग्रेशन करने के लिए कुछ कोड लिखे। ऐसा करने के लिए सबसे अच्छा एल्गोरिथ्म इस बात पर निर्भर करता है कि आप या केस में हैं या नहीं , इसलिए मुझे किसी भी तरह दो एल्गोरिदम की आवश्यकता थी। p > nn>pp>n

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

एक और अच्छा परीक्षण है का दावा है । आपको शायद पता नहीं होगा कि आपकी गणना के सही परिणाम क्या होने चाहिए, लेकिन इसका मतलब यह नहीं है कि आप गणना के विभिन्न चरणों में पवित्रता की जाँच नहीं कर सकते। व्यवहार में यदि आपके पास इनमें से बहुत से कोड हैं और वे सभी पास हो जाते हैं, तो कोड आमतौर पर सही होता है।

संपादित करें: एक तीसरी विधि एल्गोरिदम डेटा (सिंथेटिक या वास्तविक) को खिलाने के लिए है, जहां आपको कम से कम लगभग सही उत्तर पता है, भले ही आप ठीक से नहीं जानते हों, और निरीक्षण द्वारा देखें कि क्या उत्तर उचित है। उदाहरण के लिए, आप ठीक से नहीं जान सकते हैं कि आपके मापदंडों का अनुमान क्या है, लेकिन आप जान सकते हैं कि कौन से "बड़े" माने जाते हैं और कौन से "छोटे" माने जाते हैं।


5

यकीन नहीं होता कि यह वास्तव में आपके प्रश्न का उत्तर है, लेकिन यह कम से कम स्पर्श संबंधी है।

मैं मेपल में सांख्यिकी पैकेज बनाए रखता हूं । कोड का परीक्षण करने में मुश्किल का एक दिलचस्प उदाहरण विभिन्न वितरणों के अनुसार यादृच्छिक नमूना पीढ़ी है; यह परीक्षण करना आसान है कि कोई भी त्रुटि उत्पन्न नहीं हुई है, लेकिन यह निर्धारित करना मुश्किल है कि उत्पन्न होने वाले नमूने अनुरोधित वितरण "अच्छी तरह से" के अनुरूप हैं या नहीं। चूंकि मेपल में प्रतीकात्मक और संख्यात्मक दोनों विशेषताएं हैं, आप (विशुद्ध रूप से संख्यात्मक) नमूना पीढ़ी का परीक्षण करने के लिए कुछ प्रतीकात्मक सुविधाओं का उपयोग कर सकते हैं:

  1. हमने कुछ प्रकार के सांख्यिकीय परिकल्पना परीक्षण को लागू किया है, जिनमें से एक ची स्क्वायर उपयुक्त मॉडल परीक्षण है - दिए गए प्रायिकता वितरण के उलटा सीडीएफ से निर्धारित डिब्बे में नमूनों की संख्या का ची वर्ग परीक्षण। इसलिए, उदाहरण के लिए, कॉची वितरण नमूना पीढ़ी का परीक्षण करने के लिए, मैं कुछ ऐसा चलाता हूं

    with(Statistics):
    infolevel[Statistics] := 1:
    distribution := CauchyDistribution(2, 3):
    sample := Sample(distribution, 10^6):
    ChiSquareSuitableModelTest(sample, distribution, 'bins' = 100, 'level' = 0.001);
    

    क्योंकि मैं जितना चाहे उतना बड़ा नमूना तैयार कर सकता हूं, मैं बहुत छोटा बना सकता हूं ।α

  2. परिमित क्षणों के वितरण के लिए, मैं एक ओर कई नमूना क्षणों की गणना करता हूं, और दूसरी ओर, मैं प्रतीकात्मक रूप से संबंधित वितरण क्षणों और उनके मानक त्रुटि की गणना करता हूं। इसलिए उदाहरण के लिए बीटा वितरण:

    with(Statistics):
    distribution := BetaDistribution(2, 3):
    distributionMoments := Moment~(distribution, [seq(1 .. 10)]);
    standardErrors := StandardError[10^6]~(Moment, distribution, [seq(1..10)]);
    evalf(distributionMoments /~ standardErrors);
    

    यह संख्याओं की घटती सूची दिखाता है, जिनमें से अंतिम 255.1085766 है। तो 10 वें पल के लिए भी, पल का मूल्य नमूने के लिए नमूना क्षण के मानक त्रुटि के मूल्य से 250 गुना से अधिक है । इसका मतलब यह है कि मैं एक परीक्षण लागू कर सकता हूं जो निम्न प्रकार से चलता है:106

    with(Statistics):
    sample := Sample(BetaDistribution(2, 3), 10^6):
    sampleMoments := map2(Moment, sample, [seq(1 .. 10)]);
    distributionMoments := [2/5, 1/5, 4/35, 1/14, 1/21, 1/30, 4/165, 1/55, 2/143, 1/91];
    standardErrors := 
      [1/5000, 1/70000*154^(1/2), 1/210000*894^(1/2), 1/770000*7755^(1/2), 
       1/54600*26^(1/2), 1/210000*266^(1/2), 7/5610000*2771^(1/2), 
       1/1567500*7809^(1/2), 3/5005000*6685^(1/2), 1/9209200*157366^(1/2)];
    deviations := abs~(sampleMoments - distributionMoments) /~ standardErrors;
    

    इसमें नंबर पहले नंबर से आते हैं distributionMomentsऔर standardErrorsऊपर आते हैं। अब यदि नमूना पीढ़ी सही है, तो विचलन में संख्या अपेक्षाकृत कम होनी चाहिए। मुझे लगता है कि वे लगभग सामान्य रूप से वितरित किए जाते हैं (जो कि वे वास्तव में नहीं हैं, लेकिन यह काफी करीब आता है - याद रखें कि ये नमूने के क्षणों के स्केल किए गए संस्करण हैं, न कि नमूने खुद) और इस तरह मैं उदाहरण के लिए, ऐसे मामले को चिह्नित कर सकता हूं जहां विचलन है 4 से अधिक - एक नमूना पल के समान जो वितरण क्षण से मानक त्रुटि से चार गुना से अधिक विचलन करता है। यदि नमूना पीढ़ी अच्छी है, तो यह यादृच्छिक रूप से होने की बहुत संभावना नहीं है। दूसरी ओर, यदि पहले 10 नमूना क्षण वितरण के क्षणों को आधे प्रतिशत से कम के भीतर मेल खाते हैं, तो हमारे पास वितरण का काफी अच्छा अनुमान है।

इन दोनों तरीकों से काम करने की कुंजी यह है कि नमूना पीढ़ी कोड और प्रतीकात्मक कोड लगभग पूरी तरह से असंतुष्ट हैं। यदि दोनों के बीच ओवरलैप होगा, तो उस ओवरलैप में एक त्रुटि नमूना पीढ़ी और उसके सत्यापन में दोनों ही प्रकट कर सकती है, और इस प्रकार पकड़ा नहीं जा सकता है।


आपके उत्तर के लिए धन्यवाद। मैं दूसरे उत्तर को "स्वीकार" कर रहा हूं क्योंकि मुझे केवल एक को चुनने की अनुमति है और यह मेरी वर्तमान स्थिति को थोड़ा बेहतर लगता है। लेकिन आपका जवाब बहुत मददगार भी था।
ज्योतिर्मय भट्टाचार्य

2

ब्रूस मैककुल्फ ने सांख्यिकीय सॉफ्टवेयर का आकलन करने में एक कुटीर उद्योग का एक सा हिस्सा था (व्यापक अर्थों में; उन्होंने माइक्रोसॉफ्ट एक्सेल का परीक्षण किया था। और यह चाहते हुए पाया)। दो कागजात जो उसके दृष्टिकोण का हिस्सा बताते हैं, वे यहां और यहां हैं।


2

इस Stata जर्नल लेख में StataCorp के अध्यक्ष विलियम गोल्ड द्वारा बहुत सारे विवरण दिए गए हैं। 1 यह सांख्यिकीय सॉफ्टवेयर की गुणवत्ता नियंत्रण के बारे में एक बहुत ही दिलचस्प लेख है।

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