Матплотлиб сюжетный масштаб - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу сделать несколько инструментов, которые помогут учиться и преподавать основную статистику. Один из них призван помочь визуализировать таблицу вероятностей z-показателя:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
import scipy.stats as st

def draw_z_score(x, cond, mean, std, title,color='b'):
    y = st.norm.pdf(x, mean, std)
    z = x[cond]
    plt.plot(x, y)
    plt.ylim(ymin=0)
    plt.xlim(xmin=-4.5, xmax=4.5)
    plt.fill_between(z, 0, st.norm.pdf(z, mean, std),color=color)
    plt.title(title)
    plt.tight_layout()
    plt.show()

def z_table_probabilty (z_score, z_score2=None, area='l'):
    normal = np.arange(-3.9, 3.9, 0.1)
    if area == 'l':
       Pz = round(st.norm.cdf(z_score), 4)
       draw_z_score(normal,normal<z_score,0,1,f'z = {z_score}   P(z)={Pz}')
    elif area == 'r':
       Pz = round(1 - st.norm.cdf(z_score), 4)
       draw_z_score(normal,normal>z_score,0,1,f'Z ={z_score}   P(1-z)={Pz}',color='r')
    elif area == 'tt' and z_score2 != None:
       z2 = max(z_score, z_score2)
       z = min(z_score, z_score2)
       Pz = round(st.norm.cdf(z2) - st.norm.cdf(z), 4)
       draw_z_score(normal,(normal<z2)&(normal>z),0, 1, f'z= {z} i z\'= {z2}    P(z\'-z)={Pz}', color='y')

Теперь, когда я пытаюсь:

z_table_probabilty(-0.9)

У меня есть:

г-оценка = -0,9

Может ли кто-нибудь сказать мне, почему z-показатель -0,9 равен 1 на моем графике? И почему расстояния между x = 4 и концом хвоста распределения, а x = -4 и концом другого хвоста отличаются? Весь сюжет, кажется, немного сдвинут.

Что я сделал не так?

Спасибо MV

1 Ответ

0 голосов
/ 09 сентября 2018

normal = np.arange(-3.9, 3.9, 0.1) создает массив от -3.9 до 3.8. Конечная точка не включена. Следовательно, вы видите кривую, начинающуюся в -3.9 и заканчивающуюся в 3.8.

С помощью normal<z_score вы выбираете все точки в normal, которые меньше z_score. Когда z_score=-0.9, эти точки находятся в диапазоне от -3.9 до -1.0, поскольку -0.9 не меньше, чем -0.9.

В целом, я бы порекомендовал определить normal немного более плотным. Это позволило бы избежать двух проблем. Э.Г.

normal = np.linspace(-3.9, 3.9, 391)

для создания точек с шагом 0.02 вместо 0.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...