物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python: 正規分布同士の分離度と重なりの割合

分離度(Resolution, R)=2.5のヒストグラムがどういうのか想像できなかったので作ってみた。分離度はそれぞれの分布を正規分布としたとき、隣り合うピークの平均値の差 \mu_i - \mu_j と、各ピークの標準偏差\sigmaを使い、以下の式で定義している。

 \displaystyle{
R = \frac{\mu_i - \mu_j}{2(\sigma_i + \sigma_j)}
}

半値全幅 FWHM は FWHM=2.355\sigmaなので、

 \displaystyle{
R = 1.18\frac{\mu_i - \mu_j}{FWHM_i+FWHM_j}
 }

となる。参照: 島津

重なりの割合も計算し、図示した。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm 

plt.rcParams['figure.figsize'] = [10, 2]

for d in range(1,11):
    arr = []
    sig = 1/d
    a = np.random.normal(0,sig,100000)
    b = np.random.normal(1,sig,100000)
    arr=np.concatenate([a,b])
    overlap = (1-norm.cdf(0.5, loc=0, scale=sig))*2
    label=f"R={1/(sig+sig)/2:.2f}\nσ={sig:.3f}\n1/σ={1/sig:.1f}\nOverlap={overlap*100:.3}%"
    plt.hist(arr,range=[-3,3],bins=200,alpha=0.6,label=label)
    plt.hist(a  ,range=[-3,3],bins=200,alpha=0.2)
    plt.hist(b  ,range=[-3,3],bins=200,alpha=0.2)
    plt.legend()
    plt.show()

f:id:onsanai:20220417075452p:plain

f:id:onsanai:20220417075512p:plain

正規分布から、標準偏差 σ の何倍の外れ値の割合を計算すると以下のようになる。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm 

plt.rcParams['figure.figsize'] = [10, 2]

for d in range(1,8):
    arr = []
    sig = 1/d
    a = np.random.normal(0,sig,100000)
    rate = (1-norm.cdf(1, loc=0, scale=sig))*2
    label=f"σ={sig:.3f}\n1/σ={1/sig:.1f}\nRate(<1)={(1-rate)*100:.10}%\nRate(>1)={rate*100:.10}%"
    plt.hist(a  ,range=[-3,3],bins=200,alpha=0.6,label=label)
    ymin, ymax = plt.gca().get_ylim()
    plt.vlines(1, ymin, ymax)
    plt.vlines(-1, ymin, ymax)
    plt.legend()
    plt.show()

f:id:onsanai:20220417080143p:plain