我想提供一些工具来帮助学习和教授基本的统计信息。其中之一旨在帮助可视化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)
我有:
有人可以告诉我为什么我的图上z分数-0.9等于1吗?为什么x = 4和分布尾部的末端以及x = -4和另一尾部的末端之间的距离不同?整个情节似乎有些动摇。
我做错了什么?
谢谢 MV
答案 0 :(得分:0)
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
的步骤创建点。