दो-नमूना कोलमोगोरोव-स्मिरनोव टेस्ट पाइथन स्कैपी में


82

मैं पता नहीं लगा सकता कि स्कैपी में दो-नमूना केएस परीक्षण कैसे किया जाए।

प्रलेखन पपड़ी kstest पढ़ने के बाद

मैं देख सकता हूं कि कैसे परीक्षण किया जाए जहां एक वितरण मानक सामान्य वितरण के समान है

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
test_stat = kstest(x, 'norm')
#>>> test_stat
#(0.021080234718821145, 0.76584491300591395)

जिसका अर्थ है कि 0.76 के पी-मूल्य पर हम शून्य परिकल्पना को अस्वीकार नहीं कर सकते हैं कि दो वितरण समान हैं।

हालांकि, मैं दो वितरणों की तुलना करना चाहता हूं और यह देखना चाहता हूं कि क्या मैं इस परिकल्पना को अस्वीकार कर सकता हूं कि वे समान हैं, कुछ इस तरह हैं:

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
z = np.random.normal(1.1,0.9, 1000)

और परीक्षण करें कि क्या x और z समान हैं

मैंने भोले की कोशिश की:

test_stat = kstest(x, z)

और निम्न त्रुटि मिली:

TypeError: 'numpy.ndarray' object is not callable

क्या पायथन में दो-नमूना केएस परीक्षण करने का एक तरीका है? यदि हां, तो मुझे यह कैसे करना चाहिए?

पहले ही, आपका बहुत धन्यवाद


क्या आप लाइन और ट्रेसबैक पोस्ट कर सकते हैं?
cval

जवाबों:


123

आप एक-नमूना केएस परीक्षण का उपयोग कर रहे हैं। आप शायद दो-नमूना परीक्षण चाहते हैं ks_2samp:

>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>> 
>>> np.random.seed(12345678)
>>> x = np.random.normal(0, 1, 1000)
>>> y = np.random.normal(0, 1, 1000)
>>> z = np.random.normal(1.1, 0.9, 1000)
>>> 
>>> ks_2samp(x, y)
Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647)
>>> ks_2samp(x, z)
Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77)

परिणामों की व्याख्या निम्नानुसार की जा सकती है:

  1. आप या तो अपने नमूना आकार के अनुसार statisticअजगर द्वारा दिए गए मूल्य की तुलना केएस-टेस्ट क्रिटिकल वैल्यू टेबल से कर सकते हैं। जब statisticमान महत्वपूर्ण मान से अधिक होता है, तो दो वितरण भिन्न होते हैं।

  2. या आप p-valueएक स्तर के महत्व की तुलना कर सकते हैं , आमतौर पर एक = 0.05 या 0.01 (आप तय करते हैं, कम एक है, अधिक महत्वपूर्ण)। अगर पी-मूल्य से कम है एक है, तो यह बहुत संभव है कि दो वितरण भिन्न हैं।


1
ठीक वैसा ही मैं देख रहा था। आपका बहुत बहुत धन्यवाद!
अकवाल

2
आप इन परिणामों की व्याख्या कैसे करते हैं? क्या आप कह सकते हैं कि नमूने समान वितरण से आते हैं statisticऔर p-value?
फ़ॉफ़ी

4
@ फ़ाकोफ़ी यह वही है जो डची डॉक्स कहता है: " यदि केएस आँकड़ा छोटा है या पी-मूल्य अधिक है, तो हम इस परिकल्पना को अस्वीकार नहीं कर सकते कि दो नमूनों के वितरण समान हैं। "
user3888815

5

यह वही है जो डरपोक डॉक्स कहता है:

यदि केएस आँकड़ा छोटा है या पी-मूल्य अधिक है, तो हम इस परिकल्पना को अस्वीकार नहीं कर सकते हैं कि दो नमूनों के वितरण समान हैं।

अस्वीकार नहीं किया जा सकता इसका मतलब यह नहीं है कि हम पुष्टि करते हैं।


क्या आप अपने उत्तर को और विस्तार से बता सकते हैं? अग्रिम में धन्यवाद!
राजा रीलोड

@KingReload इसका मतलब है कि जब पी मूल्य बहुत छोटा है, तो कहते हैं कि इन दो नमूनों की संभावना एक ही वितरण से नहीं आ रही है बहुत कम है। दूसरे शब्दों में, समान वितरण से आने वाले इन दो नमूनों की संभावना बहुत अधिक है। लेकिन आप इस बारे में 100% सुनिश्चित नहीं हो सकते हैं कि पी मान कभी शून्य नहीं हैं। (कभी-कभी वे 0 के रूप में दिखाते हैं, लेकिन वास्तव में, यह कभी शून्य नहीं होता है)। इसलिए यह कहा जाता है कि हम अशक्त परिकल्पना को अस्वीकार करने में विफल रहे, इसके बजाय हम शून्य परिकल्पना को स्वीकार कर रहे हैं । अशक्त परिकल्पना स्वीकार करना = दो नमूनों का वितरण समान है
एमडी आबिद हसन

3
पी-मूल्य बहुत अधिक होने की संभावना है वे एक ही वितरण से आते हैं, पी-मूल्य छोटी संभावना वे नहीं करते हैं। @MDAbidHasan में यह पीछे की ओर है। वास्तव में, प्रलेखन में वे एक उदाहरण देते हैं: For an identical distribution, we cannot reject the null hypothesis since the p-value is high, 41%: >>> >>> rvs4 = stats.norm.rvs(size=n2, loc=0.0, scale=1.0) >>> stats.ks_2samp(rvs1, rvs4) (0.07999999999999996, 0.41126949729859719)
सुपर हीरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.