2020年5月16日土曜日

最頻値と中央値と四分位数

講義で使える統計素材」シリーズ.今回は,代表値の図.中央値と最頻値の違いが分かりやすいように,中央値の方は左右で色を分けて等面積にしています.

In [1]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
from scipy.integrate import cumtrapz

最頻値

In [26]:
sigma = 1.0
mu = 3.2

x = np.arange(0.0, 8.0, 0.01)
y = (st.norm.pdf(x, 2.0, 1.0) + st.norm.pdf(x, 4.0, 0.5))/2.0
idx = np.argmax(y)

plt.figure(figsize=(4,4))
plt.ylim(0, 1)
plt.plot(x, y)
plt.fill_between( x, y )
plt.vlines(x[idx], ymin=0,ymax=1,linestyle="dashed")

plt.savefig('plot_out.svg')

中央値と50%領域

In [27]:
sigma = 1.0
mu = 3.2

x = np.arange(0.0, 8.0, 0.01)
y = (st.norm.pdf(x, 2.0, 1.0) + st.norm.pdf(x, 4.0, 0.5))/2.0
cdf = cumtrapz(y, x)
idx = np.searchsorted(cdf, 0.5)

plt.figure(figsize=(4,4))
plt.ylim(0, 1)
plt.plot(x, y)
plt.fill_between( x[idx:], y[idx:], facecolor=(31/255,119/255,180/255))
plt.fill_between( x[:idx], y[:idx], facecolor=(180/255,119/255,31/255))
plt.vlines(x[idx], ymin=0,ymax=1,linestyle="dashed")

plt.savefig('plot_out.svg')

四分位数

In [32]:
sigma = 1.0
mu = 3.2

x = np.arange(0.0, 8.0, 0.01)
y = (st.norm.pdf(x, 2.0, 1.0) + st.norm.pdf(x, 4.0, 0.5))/2.0
cdf = cumtrapz(y, x)
idx1 = np.searchsorted(cdf, 0.25)
idx2 = np.searchsorted(cdf, 0.50)
idx3 = np.searchsorted(cdf, 0.75)

plt.figure(figsize=(4,4))
plt.ylim(0, 1)
plt.plot(x, y)
plt.fill_between( x, y )
plt.vlines(x[idx1], ymin=0,ymax=1,linestyle="dashed")
plt.vlines(x[idx2], ymin=0,ymax=1,linestyle="dashed")
plt.vlines(x[idx3], ymin=0,ymax=1,linestyle="dashed")

plt.savefig('plot_out.svg')