मैं एक और दो पूंछ स्वतंत्र टी परीक्षण के लिए टी सांख्यिकी और पी-मूल्यों की गणना करने के लिए अपने खुद के अजगर कोड लिखने की कोशिश कर रहा हूँ। मैं सामान्य अनुमान का उपयोग कर सकता हूं, लेकिन इस पल के लिए मैं केवल टी-वितरण का उपयोग करने की कोशिश कर रहा हूं। मैं अपने परीक्षण डेटा पर SciPy की सांख्यिकी लाइब्रेरी के परिणामों से मेल खाने में असफल रहा हूं। मैं आंखों की एक नई जोड़ी का उपयोग यह देखने के लिए कर सकता हूं कि मैं सिर्फ एक गूंगा गलती कर रहा हूं या नहीं।SciPy के `ttest_ind द्वारा बनाई गई मान्यताओं नीचे ट्रैकिंग()` समारोह
नोट, यह cross-posted from Cross-Validated है क्योंकि यह बिना किसी प्रतिक्रिया के थोड़ी देर के लिए रहा है, इसलिए मैंने सोचा कि यह कुछ सॉफ़्टवेयर डेवलपर राय प्राप्त करने के लिए भी चोट नहीं पहुंचा सकता है। मैं वहाँ एल्गोरिथ्म मैं उपयोग कर रहा हूँ, जो SciPy का परिणाम पुन: पेश करना चाहिए में कोई त्रुटि है, तो समझने की कोशिश कर रहा हूँ। यह एक साधारण एल्गोरिदम है, इसलिए यह परेशान है कि मैं गलती का पता क्यों नहीं लगा सकता।
मेरे कोड:
import numpy as np
import scipy.stats as st
def compute_t_stat(pop1,pop2):
num1 = pop1.shape[0]; num2 = pop2.shape[0];
# The formula for t-stat when population variances differ.
t_stat = (np.mean(pop1) - np.mean(pop2))/np.sqrt(np.var(pop1)/num1 + np.var(pop2)/num2)
# ADDED: The Welch-Satterthwaite degrees of freedom.
df = ((np.var(pop1)/num1 + np.var(pop2)/num2)**(2.0))/( (np.var(pop1)/num1)**(2.0)/(num1-1) + (np.var(pop2)/num2)**(2.0)/(num2-1))
# Am I computing this wrong?
# It should just come from the CDF like this, right?
# The extra parameter is the degrees of freedom.
one_tailed_p_value = 1.0 - st.t.cdf(t_stat,df)
two_tailed_p_value = 1.0 - (st.t.cdf(np.abs(t_stat),df) - st.t.cdf(-np.abs(t_stat),df))
# Computing with SciPy's built-ins
# My results don't match theirs.
t_ind, p_ind = st.ttest_ind(pop1, pop2)
return t_stat, one_tailed_p_value, two_tailed_p_value, t_ind, p_ind
अद्यतन:
वेल्श की टी परीक्षण पर थोड़ा अधिक पढ़ने के बाद, मैंने देखा कि मैं की डिग्री की गणना करने के वेल्च-Satterthwaite सूत्र का उपयोग किया जाना चाहिए आजादी। मैंने इसे प्रतिबिंबित करने के लिए ऊपर दिए गए कोड को अपडेट किया है।
स्वतंत्रता के नए डिग्री के साथ, मैं एक करीब परिणाम मिलता है। मेरा दो तरफा पी-वैल्यू साइपी संस्करण से लगभग 0.008 तक बंद है ... लेकिन यह अभी भी बहुत बड़ी त्रुटि है इसलिए मुझे अभी भी कुछ गलत करना होगा (या SciPy वितरण कार्य बहुत खराब हैं, लेकिन विश्वास करना मुश्किल है वे केवल 2 दशमलव स्थानों के लिए सटीक हैं)।
दूसरा अद्यतन:
चीजों की कोशिश करने के लिए जारी रखने, वहीं मैंने सोचा कि शायद SciPy के संस्करण स्वचालित रूप से टी-वितरण के लिए सामान्य सन्निकटन की गणना करता है जब स्वतंत्रता की डिग्री काफी अधिक होती है (मोटे तौर पर> 30)। इसलिए मैं बजाय सामान्य वितरण का उपयोग कर मेरे कोड को फिर से भाग गया, और गणना परिणाम वास्तव में आगे SciPy के से दूर जब मैं t- बंटन का उपयोग की तुलना में कर रहे हैं।
बोनस सवाल :) (अधिक सांख्यिकीय संबंधित सिद्धांत, की अनदेखी करने के लिए स्वतंत्र महसूस)
इसके अलावा, टी आंकड़ा नकारात्मक है। मैं बस सोच रहा था कि इसका एक तरफा टी-टेस्ट के लिए क्या मतलब है। क्या इसका आमतौर पर मतलब है कि मुझे परीक्षण के लिए नकारात्मक धुरी दिशा में देखना चाहिए? मेरे परीक्षण आंकड़ों में, आबादी 1 एक नियंत्रण समूह है जिसे एक निश्चित रोजगार प्रशिक्षण कार्यक्रम नहीं मिला। जनसंख्या 2 इसे प्राप्त किया, और मापा डेटा इलाज से पहले/बाद में मजदूरी मतभेद हैं।
तो मेरे पास यह सोचने का कोई कारण है कि आबादी 2 का मतलब बड़ा होगा। लेकिन एक सांख्यिकीय सिद्धांत बिंदु से, यह इस तरह से एक परीक्षण concoct सही प्रतीत नहीं होता है। मैं डेटा के बारे में व्यक्तिपरक ज्ञान पर निर्भर रहे बिना नकारात्मक दिशा में (एक तरफा परीक्षण के लिए) की जाँच के लिए जाना जाता हो सकता था? या यह सिर्फ उन frequentist चीजें हैं जो, जबकि दार्शनिक कठोर नहीं, व्यवहार में किया जाना चाहिए में से एक है?
इस गणना के लिए scipy.stats में पहले से ही फ़ंक्शंस हैं: ttest_ind और ttest_rel –
कृपया मेरा प्रश्न दोबारा पढ़ें। – ely
दो कारण हैं। (ए) यह अंतिम कोड नहीं है (जो सी ++ में होगा), लेकिन मैं यह सुनिश्चित करना चाहता था कि .cpp संस्करण लिखने से पहले मेरा एल्गोरिदम सही है। बूस्ट के माध्यम से मैं सीडीएफ सुविधा कार्यों में से अधिकांश प्राप्त कर सकता हूं और अपना खुद का मतलब और भिन्न कैलकुलेटर लिखना आसान है। तो यह चित्रित करता है कि यह पाइथन में मेरे परीक्षण डेटा पर काम करता है (सी ++ में इसका परीक्षण करने से बहुत आसान है जहां मेरे पास तुलना करने के लिए एक प्रतिस्पर्धी विधि नहीं है) मुझे यह बताना है कि मैं इसे सही कर रहा हूं ताकि मैं आगे बढ़ सकूं। – ely