اذهب إلى المحتوى

السؤال

نشر

لدي عينة من البيانات التي أود حساب مجال الثقة لها  Confidence Interval، بافتراض التوزيع الطبيعي.

لقد وجدت حزمتي numpy و scipy وقمت بتثبيتها واستخدمت numpy لإرجاع الانحراف المتوسط mean deviation والمعياري standard deviation من خلال الكود التالي:

numpy.mean(data)

لكن لا أعرف كيفية الحصول على مجال الثقة Confidence Interval للبيانات التي لدي.

كيف أستخدم مكتبة Numpy و scipy للحصول على مجال الثقة Confidence Interval؟

Recommended Posts

  • 0
نشر (معدل)

يمكنك حلها بالدالة التالية ببساطة:

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

كذلك هناك دالة داخلية يمكنك استعمالها كالتالي:

import numpy as np, scipy.stats as st

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

حيث ان 0.95 تمثل نسبة ال Confidence 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)

لاحظ ان قيم ال Confidence Interval في كلتا الطريقتين واحدة 

تم التعديل في بواسطة Ahmed Sharshar
  • 1
نشر (معدل)

كما نعلم فأن مجال الثقة هو مجال عددي يُتوقع أن يحتوي على القيمة الحقيقية لمَعلَمة (كمية عددية تميّز و"تلخص" التوزع الاحتمالي لمجموعة من الأحداث المتشابهة) إحصائية يراد معرفتها لمجموعة من العناصر أو الأحداث المتشابهة (تسمى في عالم الإحصاء مجتمع إحصائي) التي تكون (بجميع عناصرها) موضوعا لدراسة علمية ما.في أغلب الأبحاث أن يتم استخدام مجالات ثقة بمستوى ثقة قدره 95% ولكن يمكن أن يتم أيضا حسابها بمستويات ثقة أخرى مثل 99% و90%. في بايثون يمكنك استخدام scipy.stats.t.interval للحصول على مجال الثقة لعينة إحصائية ما. في بايثون يمكنك حسابه كالتالي:

import scipy
import scipy.stats as s
import numpy as np
sample=np.array([1,2,3,4,5,6])
confidence_level = 0.95
degrees_freedom = sample.size - 1
mean = np.mean(sample)
standard_error = scipy.stats.sem(sample)
confidenceinterval = s.t.interval(confidence_level, degrees_freedom, mean, standard_error)
confidenceinterval
# (1.5366856922723917, 5.463314307727608)

استخدم numpy.ndarray.size - 1 مع numpy.array كمصفوفة من بيانات العينة للعثور على درجة الحرية. ثم استدعي numpy.mean(arr) لحساب المتوسط الحسابي لبيانات العينة arr، ثم استدعي scipy.stats.sem(arr) لحساب الخطأ المعياري لها "standard error" (طريقة قياس أو تقدير الانحراف المعياري) ثم استدعي scipy.stats.t.interval(confidence_level, degrees_freedom, mean, std) لحساب مجال الثقة.
يمكنك أيضاً حسابها بالشكل التالي من خلال استخدام  الدالة NormalDist :

from statistics import NormalDist
import scipy
import numpy as np
sample=np.array([1,2,3,4,5,6])
def confidenceinterval(s, confidence=0.95):
  #NormalDist.stdev& NormalDist.mean ترجع لنا كائن يحتوي معلومات أهمها المتوسط والانحراف المعياري من خلال استدعاء الواصفتين
  dist = NormalDist.from_samples(s)
  z = NormalDist().inv_cdf((1 + confidence) / 2.)
  h = dist.stdev * z / ((len(s) - 1) ** .5)
  return dist.mean - h, dist.mean + h

 

تم التعديل في بواسطة Ali Haidar Ahmad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...