مكتبات Standard C أو Python لحساب الانحراف المعياري للتوزيع الطبيعي
-
11-07-2019 - |
سؤال
لنفترض أن لدينا التوزيع الطبيعي n(x):يعني=0 و \int_{-a}^{a} n(x) = P.
ما هي أسهل طريقة لحساب الانحراف المعياري لهذا التوزيع؟هل من الممكن أن تكون هناك مكتبات قياسية لـ python أو C مناسبة لهذه المهمة؟
المحلول
الانحراف المعياري للتوزيع الغوسي المتوسط الصفري مع Pr(-a < X < a) = P هو
a/(sqrt(2)*inverseErf(P))
وهو التعبير الذي تبحث عنه، حيث inverseErf هو معكوس دالة الخطأ (المعروفة باسم erf).
بالنسبة للغة C، تعد مكتبة Gnu العلمية (GSL) مصدرًا جيدًا.ومع ذلك، فهو يحتوي فقط على erf، وليس inverseErf، لذا يتعين عليك عكسه بنفسك (بحث ثنائي بسيط سيفي بالغرض).وبدلاً من ذلك، إليك طريقة رائعة لتقريب erf وinverseErf:
http://homepages.physik.uni-muenchen.de/~Winitzki/erf-approx.pdf
بالنسبة لبيثون، inverseErf متاح كـ erfinv
في مكتبة SciPy، وبالتالي فإن ما يلي يعطي الانحراف المعياري:
a/(math.sqrt(2)*erfinv(P))
ملاحظة:يوجد نوع من الأخطاء في عرض عنوان URL الخاص بـ Stackoverflow ولن يسمح لي بالارتباط بـ GSL أعلاه: http://www.gnu.org/software/gsl.يصبح الأمر خاطئًا أيضًا عندما أجعل عنوان URL أعلاه مع ملف pdf رابطًا مناسبًا.
نصائح أخرى
إذا كان X طبيعيًا بمتوسط 0 وانحراف معياري سيجما، فيجب أن يكون ثابتًا
P = Prob[ -a <= X <= a ] = Prob[ -a/sigma <= N <= a/sigma ]
= 2 Prob[ 0 <= N <= a/sigma ]
= 2 ( Prob[ N <= a/sigma ] - 1/2 )
حيث N طبيعي بمتوسط 0 وانحراف معياري 1.لذلك
P/2 + 1/2 = Prob[ N <= a/sigma ] = Phi(a/sigma)
حيث Phi هي دالة التوزيع التراكمي (cdf) لمتغير عادي بمتوسط 0 وstddev 1.الآن نحن بحاجة إلى معكوس cdf عادي (أو "دالة النقطة المئوية")، وهي في بايثون هي scipy.stats.norm.ppf().عينة من الرموز:
from scipy.stats import norm
P = 0.3456
a = 3.0
a_sigma = float(norm.ppf(P/2 + 0.5)) # a/sigma
sigma = a/a_sigma # Here is the standard deviation
على سبيل المثال، نحن نعلم أن احتمال سقوط متغير N(0,1) في الفترة [-1.1] هو ~ 0.682 (المنطقة الزرقاء الداكنة في هذا الرقم).إذا قمت بتعيين P = 0.682 وa = 1.0، فستحصل على sigma ~ 1.0، وهو بالفعل الانحراف المعياري.
نلقي نظرة على مشروع سيبي, ، ينبغي أن يكون لديك ما تحتاجه.