নমুনা ডেটা থেকে একটি আত্মবিশ্বাসের ব্যবধান গণনা করুন


109

আমার কাছে নমুনা ডেটা রয়েছে যা আমি একটি সাধারণ বন্টন ধরে ধরে একটি আত্মবিশ্বাসের ব্যবধান গণনা করতে চাই।

আমি নম্পি এবং স্কিপি প্যাকেজগুলি খুঁজে পেয়েছি এবং ইনস্টল করেছি এবং একটি গড় এবং স্ট্যান্ডার্ড বিচ্যুতি (numpy.mean (ডেটা) হিসাবে একটি তালিকা হিসাবে ডেটা রয়েছে) ফিরে পেতে নপি পেয়েছি। একটি নমুনার আত্মবিশ্বাসের ব্যবধান পাওয়ার বিষয়ে যে কোনও পরামর্শই প্রশংসিত হবে।


1
আমি মনে করি আপনি যদি নিশ্চিত হন যে আপনি নমুনা গড় বা জনসংখ্যার গড় জন্য সিআই গণনা করতে চান। এটি নির্ধারণ করবে যে আপনি জেড-স্কোর গণনা করতে সাধারণ বা টি বিতরণ ব্যবহার করতে চান কিনা। এবং নীচের উপরের উত্তরটি নমুনা গড়ের জন্য, সুতরাং বিতরণে ব্যবহৃত হয়।
জেক 20

উত্তর:


162
import numpy as np
import scipy.stats


def mean_confidence_interval(data, confidence=0.95):
    a = 1.0 * np.array(data)
    n = len(a)
    m, se = np.mean(a), scipy.stats.sem(a)
    h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
    return m, m-h, m+h

আপনি এইভাবে গণনা করতে পারেন।


1
sp.stats.stderr হ্রাস করা হয়। আমি sp.stats.sem প্রতিস্থাপন এবং এটি দুর্দান্ত কাজ!
Bmayer0122

1
আমদানি করা scipyঅগত্যা সমস্ত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে আমদানি করে না। সাব-প্যাকেজটি scipy.statsসুস্পষ্টভাবে আমদানি করা আরও ভাল ।
বিক্রম

31
"ব্যক্তিগত" এর ব্যবহারের সাথে যত্নশীল sp.stats.t._ppf। আমি সেখানে আর কোনও ব্যাখ্যা ছাড়াই তাতে স্বাচ্ছন্দ্য বোধ করি না। sp.stats.t.ppfসরাসরি ব্যবহার করা ভাল, যদি না আপনি নিশ্চিত হন যে আপনি কী করছেন। উত্সের তাত্ক্ষণিক পরিদর্শন করার সাথে এখানে একটি মোটামুটি কোড এড়ানো যায় _ppf। সম্ভবত সৌম্য, তবে সম্ভবত একটি অনিরাপদ অপ্টিমাইজেশনের প্রচেষ্টা?
রুশ

আমি এটি পছন্দ করি কারণ আপনি কেবল *ss.t._ppf((1+conf)/2.,n-1) বিল্ট-ইন পান্ডাস ডেটাফ্রেম .semপদ্ধতিতে যুক্ত করতে পারেন যাতে আপনার কোনও চিন্তা করতে হবে নাapply
TNT

1
এই গণনাটি কেবলমাত্র নমুনা গড়ের জন্য স্পষ্ট করে বলতে চাই, তাই বিতরণে ব্যবহৃত হয়। যদি প্রশ্নগুলি জনসংখ্যার অর্থ গণনা করা হয়, তবে একটি সাধারণ বিতরণ ব্যবহার করা উচিত এবং একই আত্মবিশ্বাসের স্তরের জন্য আত্মবিশ্বাসের ব্যবধানটি ছোট হবে।
জ্যাক 20

133

এখানে শसानের কোডের একটি সংক্ষিপ্ত সংস্করণ, অ্যারের গড়ের 95% আত্মবিশ্বাসের ব্যবধান গণনা করে a:

import numpy as np, scipy.stats as st

st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))

তবে স্ট্যাটাসমোডেলস ব্যবহার করা তর্কাত্মকভাবে tconfint_meanএমনকি আরও সুন্দর:

import statsmodels.stats.api as sms

sms.DescrStatsW(a).tconfint_mean()

উভয়ের জন্য অন্তর্নিহিত অনুমানগুলি aহ'ল অজানা স্ট্যান্ডার্ড বিচ্যুতি ( ম্যাথওয়ার্ড বা উইকিপিডিয়া দেখুন ) সহ একটি সাধারণ বিতরণ থেকে নমুনা (অ্যারে ) স্বাধীনভাবে আঁকা হয়েছিল ।

বৃহত নমুনা আকার এন এর জন্য, নমুনা গড়টি সাধারণত বিতরণ করা হয় এবং কেউ এর ব্যবহার করে এর আত্মবিশ্বাসের ব্যবধান গণনা করতে পারে st.norm.interval()(যায়েমের মন্তব্যে প্রস্তাবিত)। তবে উপরের সমাধানগুলি ছোট এন এর জন্যও সঠিক, যেখানে st.norm.interval()আত্মবিশ্বাসের ব্যবধানগুলি খুব সংকীর্ণ (যেমন, "জাল আত্মবিশ্বাস") দেয়। আরও তথ্যের জন্য আমার অনুরূপ প্রশ্নের উত্তর দেখুন (এবং এখানে রাশিয়ার একটি মন্তব্য)।

এখানে একটি উদাহরণ যেখানে সঠিক বিকল্পগুলি অভিন্ন আত্মবিশ্বাসের অন্তর দেয়:

In [9]: a = range(10,14)

In [10]: mean_confidence_interval(a)
Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)

In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Out[11]: (9.4457397432391215, 13.554260256760879)

In [12]: sms.DescrStatsW(a).tconfint_mean()
Out[12]: (9.4457397432391197, 13.55426025676088)

এবং অবশেষে, ব্যবহার করে ভুল ফলাফল st.norm.interval():

In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)

1
আমি বিশ্বাস করি যে আপনার st.t.interval(0.05)95% আত্মবিশ্বাসের ব্যবধান পাওয়ার জন্য ফোন করা উচিত ।
স্কিমোনস্টার

5
না, st.t.interval(0.95)95% আস্থা ব্যবধান জন্য, দেখুন সঠিক ডক্স জন্য scipy.stats.talphaযদিও সাইকপাইয়ের যুক্তির নাম যুক্তিটি আদর্শের চেয়ে কম মনে হচ্ছে।
উলিরিখ স্টার্ন

যদি আমার কাছে দুটি অ্যারে ডেটা থাকে এবং তারপরে তার গড়ের পার্থক্য গণনা করি। এই গড় পার্থক্যের জন্য একটি 95% সিআই পাওয়ার কোনও উপায় আছে কি? আপনি এখানে স্ট্যাটাসমডেলস ব্যবহার করে যেভাবে সরবরাহ করেছেন তার মতো করার কোনও সহজ উপায়ের কথা ভাবতে পারেন?
স্টিভেন

@ স্টেভেন, দেখা যাচ্ছে, আমি এই সম্পর্কে একটি প্রশ্নের উত্তর দিয়েছি । :)
উলিখ স্টার্ন

16

আপ খুঁজছেন দিয়ে শুরু করুন Z-মান A থেকে আপনার পছন্দসই আস্থা ব্যবধান জন্য লুক-আপ টেবিল । আত্মবিশ্বাসের ব্যবধানটি তখন mean +/- z*sigma, যেখানে sigmaআপনার নমুনার আনুমানিক স্ট্যান্ডার্ড বিচ্যুতিটি বোঝানো হয় sigma = s / sqrt(n), যেখানে দেওয়া হয় , যেখানে sআপনার নমুনা ডেটা থেকে স্ট্যান্ডার্ড বিচ্যুতিটি গণনা করা হয় এবং nএটি আপনার নমুনার আকার।


29
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
জাইমে

4
মূল প্রশ্নকর্তা ইঙ্গিত করেছিলেন যে একটি সাধারণ বন্টন ধরে নেওয়া উচিত, তবে এটি উল্লেখ করার মতো যে ছোট নমুনা জনগোষ্ঠীর জন্য (এন <100 বা তাই), সাধারণ বিতরণের পরিবর্তে শিক্ষার্থীদের টি বিতরণে জেড সন্ধান করা ভাল is । শসানের উত্তর ইতিমধ্যে এটি করেছে।
রাশ

3
আত্মবিশ্বাসের ব্যবস্থার জন্য প্রস্তাবিত ক্যালকুলাস সম্পর্কে @ বগাট্রন মানে +/- জেড * সিগমা / স্ক্রুট (এন) হবে না , যেখানে নমুনা আকার?
ডেভিড

3
@ ডেভিড, আপনি সঠিক আমি এর অর্থ ভুল করে দিয়েছি sigmasigmaআমার উত্তরে নমুনাটির অনুমিত মানের বিচ্যুতি হওয়া উচিত, বন্টনের আনুমানিক স্ট্যান্ডার্ড বিচ্যুতি নয়। আমি উত্তর স্পষ্ট করে আপডেট করেছি। যে ইশারা জন্য ধন্যবাদ।
বগাট্রন

15

শুরু হচ্ছে Python 3.8, মানক গ্রন্থাগারটি মডিউলের NormalDistঅংশ হিসাবে অবজেক্টটি সরবরাহ করে statistics:

from statistics import NormalDist

def confidence_interval(data, confidence=0.95):
  dist = NormalDist.from_samples(data)
  z = NormalDist().inv_cdf((1 + confidence) / 2.)
  h = dist.stdev * z / ((len(data) - 1) ** .5)
  return dist.mean - h, dist.mean + h

এই:

  • NormalDistডেটা নমুনা থেকে একটি অবজেক্ট তৈরি করে ( NormalDist.from_samples(data)যা আমাদের নমুনার গড় এবং স্ট্যান্ডার্ড বিচ্যুতির মাধ্যমে NormalDist.meanএবং এর মাধ্যমে অ্যাক্সেস দেয় NormalDist.stdev

  • ক্রমবর্ধমান বিতরণ ফাংশন ( ) এর বিপরীতমুখী ব্যবহার করে প্রদত্ত আত্মবিশ্বাসের জন্য Z-scoreস্ট্যান্ডার্ড সাধারণ বিতরণ (প্রতিনিধিত্ব করে NormalDist()) এর ভিত্তিতে গণনা করুন inv_cdf

  • নমুনার মানক বিচ্যুতি এবং গড়ের উপর ভিত্তি করে আত্মবিশ্বাসের ব্যবধান উত্পাদন করে।


এটি ধরে নেয় যে নমুনার আকারটি যথেষ্ট বড় (আসুন say 100 পয়েন্টের বেশি বলি) zমানটি গণনা করার জন্য শিক্ষার্থীর টি বিতরণের চেয়ে মানক সাধারণ বিতরণ ব্যবহার করার জন্য ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.