2010-02-24 9 views
22

के साथ "टी परीक्षण" मैं एक मॉडल मैं अजगर में बनाया के बारे में कुछ आँकड़े उत्पन्न करने के लिए देख रहा हूँ की गणना करने के। मैं उस पर टी-टेस्ट जेनरेट करना चाहता हूं, लेकिन यह सोच रहा था कि क्या यह numpy/scipy के साथ ऐसा करने का एक आसान तरीका था। क्या आसपास कोई अच्छी व्याख्या है? मैं उन पर छात्र की टी परीक्षण करना चाहते हैंकैसे आँकड़े numpy

[55.0, 55.0, 47.0, 47.0, 55.0, 55.0, 55.0, 63.0] 

अब,:

उदाहरण के लिए, मैं तीन संबंधित डेटासेट कि इस तरह दिखना है।

उत्तर

26

एक scipy.stats पैकेज में कुछ ttest_... कार्यों देखते हैं। here से उदाहरण देखें:

>>> print 't-statistic = %6.3f pvalue = %6.4f' % stats.ttest_1samp(x, m) 
t-statistic = 0.391 pvalue = 0.6955 
+0

धन्यवाद। ऐसा लगता है कि एक यादृच्छिक चर लेता है। क्या मुझे पहले से ही अपनी नमूना आबादी से एक यादृच्छिक चर उत्पन्न करना है? – Mark

+0

मुझे लगता है कि आप अपने नमूना का उपयोग कर सकते हैं ("नमूना आबादी" नहीं) – van

+0

एक नमूना मूल्य के रूप में नमूना? मैं धारणा है कि मैं एक पैरामीटर के रूप में कई परिणाम का एक नमूना इस्तेमाल कर सकते हैं के तहत किया गया है, लेकिन शायद मैं गुमराह :) – Mark

-4

बार जब आप अपने टी मूल्य मिलता है, आप सोच रहे होंगे कि कैसे एक संभावना के रूप में यह व्याख्या करने के लिए - मैंने किया था। यहां एक ऐसा फ़ंक्शन है जिसे मैंने इसके साथ मदद करने के लिए लिखा था।

यह http://www.vassarstats.net/rsig.html और http://en.wikipedia.org/wiki/Student%27s_t_distribution से प्राप्त जानकारी पर आधारित है। scipy का उपयोग कर

# Given (possibly random) variables, X and Y, and a correlation direction, 
# returns: 
# (r, p), 
# where r is the Pearson correlation coefficient, and p is the probability 
# of getting the observed values if there is actually no correlation in the given 
# direction. 
# 
# direction: 
# if positive, p is the probability of getting the observed result when there is no 
#  positive correlation in the normally distributed full populations sampled by X 
#  and Y 
# if negative, p is the probability of getting the observed result, when there is no 
#  negative correlation 
# if 0, p is the probability of getting your result, if your hypothesis is true that 
# there is no correlation in either direction 
def probabilityOfResult(X, Y, direction=0): 
    x = len(X) 
    if x != len(Y): 
     raise ValueError("variables not same len: " + str(x) + ", and " + \ 
         str(len(Y))) 
    if x < 6: 
     raise ValueError("must have at least 6 samples, but have " + str(x)) 
    (corr, prb_2_tail) = stats.pearsonr(X, Y) 

    if not direction: 
     return (corr, prb_2_tail) 

    prb_1_tail = prb_2_tail/2 
    if corr * direction > 0: 
     return (corr, prb_1_tail) 

    return (corr, 1 - prb_1_tail) 
+1

मैं सिर्फ यह ध्यान रखना चाहता था कि सहसंबंध गुणांक में संभावना के रूप में कोई व्याख्या नहीं है, इसलिए यह बहुत उलझन में है। यह सिर्फ रैखिक निर्भरता का एक उपाय अंतराल [-1,1] –

+0

सहसंबंध गुणांक स्पष्ट रूप से संभावना से संबंधित है में मान नहीं ले रहा है (इस समारोह की वापसी मान को देखो): http://docs.scipy.org/doc/scipy /reference/generated/scipy.stats.pearsonr.html मजबूत गुणांक, अधिक संभावना है कि दो चीजें वास्तव में सहसंबंधित होंगी। यदि आप पूर्ण ब्रह्मांड का नमूना लेते हैं तो आप सहसंबंध को वास्तविक रूप से ले सकते हैं, लेकिन यदि आपके पास सीमित नमूना आकार है, तो यह केवल सहसंबंध का संकेत है: एक संभावना। –

+0

सहसंबंध गुणांक उस सीमा को मापता है जिस पर एक मूल्य की भविष्यवाणी की जा सकती है, जिसे अन्य ज्ञात है: यह दूसरे द्वारा समझाए गए एक चर में भिन्नता का अनुपात है। सिर्फ इसलिए कि यह 0 और 1 (या इसके पूर्ण मूल्यों) के बीच मान लेता है इसका मतलब यह नहीं है कि यह एक संभावना है। इस वजह से, यह सीमा में बाइनरी मान नहीं लेता है, जैसा कि आप सुझाव देते हैं: अनंत नमूना आकारों के लिए यह अंतराल [-1,1] में अभी भी कोई मूल्य लेता है। इसका मूल्य संबंधों की ताकत को इंगित करता है, जो नमूना आकार के बावजूद कमजोर हो सकता है। –

1

वैन का जवाब बिल्कुल सही है और scipy.stats.ttest_* फ़ंक्शन का उपयोग बहुत सुविधाजनक है।

लेकिन मैं इस पृष्ठ पर शुद्ध numpy के साथ समाधान की तलाश में आया, जैसा कि शीर्षक में कहा गया है, भरोसेमंद निर्भरता से बचने के लिए। इस अंत में, मुझे यहां दिए गए उदाहरण को इंगित करने दें: https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.standard_t.html

मुख्य समस्या यह है कि numpy संचयी वितरण कार्यों नहीं है, इसलिए मेरा निष्कर्ष यह है कि आपको वास्तव में उपयोग करना चाहिए। मूल प्रश्न मैं अनुमान लगा रहा हूँ कि आप एक टी परीक्षण एक महत्वपूर्ण विचलन है कि क्या वहाँ के साथ अपने डेटासेट और न्यायाधीश की तुलना करना चाहते से

: वैसे भी, केवल numpy का उपयोग कर सकता है? इसके अलावा, नमूने जोड़े गए हैं? (https://en.wikipedia.org/wiki/Student%27s_t-test#Unpaired_and_paired_two-sample_t-tests देखें) उस मामले में, तुम इतनी तरह टी और पी-मूल्य की गणना कर सकते हैं:

import numpy as np 
sample1 = np.array([55.0, 55.0, 47.0, 47.0, 55.0, 55.0, 55.0, 63.0]) 
sample2 = np.array([54.0, 56.0, 48.0, 46.0, 56.0, 56.0, 55.0, 62.0]) 
# paired sample -> the difference has mean 0 
difference = sample1 - sample2 
# the t-value is easily computed with numpy 
t = (np.mean(difference))/(difference.std(ddof=1)/np.sqrt(len(difference))) 
# unfortunately, numpy does not have a build in CDF 
# here is a ridiculous work-around integrating by sampling 
s = np.random.standard_t(len(difference), size=100000) 
p = np.sum(s<t)/float(len(s)) 
# using a two-sided test 
print("There is a {} % probability that the paired samples stem from distributions with the same means.".format(2 * min(p, 1 - p) * 100)) 

यह There is a 73.028 % probability that the paired samples stem from distributions with the same means. प्रिंट होगा चूंकि यह किसी भी समझदार विश्वास अंतराल (जैसे कि 5%), आपको चाहिए ऊपर दूर है ठोस मामले के लिए कुछ भी खत्म नहीं है। जवाब देने के लिए