Python/Matplotlib에서 양측 95% 신뢰 구간을 그림에 추가
10634 단어 파이썬matplotlib통계
기본 그리기
예를 들어, 이러한 느낌의 데이터 프레임이 있다고 가정합니다.
x y
0 2 0.954025
1 3 0.146810
2 1 0.409961
3 1 0.164558
4 3 0.782152
5 2 0.905869
6 3 0.210528
7 1 0.437970
8 1 0.801206
9 3 0.089576
10 2 0.960357
11 2 0.670732
이 데이터 프레임에서 표준 오차가있는 그림을 그리려고하면 이러한 느낌.
import numpy as np
import matplotlib.pyplot as plt
m = df.pivot_table(index='x', values='y', aggfunc='mean')
e = df.pivot_table(index='x', values='y', aggfunc='sem')
m.plot(xlim=[0.8, 3.2], yerr=e)
따라서 yerr에 오류의 크기를 지정하여 오류 막대를 만들 수 있습니다.
신뢰 구간을 이용한 도면
따라서 신뢰 구간의 길이를 결정하는 cilen을 정의하고 사용합니다.
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def cilen(arr, alpha=0.95):
if len(arr) <= 1:
return 0
m, e, df = np.mean(arr), stats.sem(arr), len(arr) - 1
interval = stats.t.interval(alpha, df, loc=m, scale=e)
cilen = np.max(interval) - np.mean(interval)
return cilen
m = df.pivot_table(index='x', values='y', aggfunc='mean')
e = df.pivot_table(index='x', values='y', aggfunc=cilen)
m.plot(xlim=[0.8, 3.2], yerr=e)
신뢰 구간이있는 다이어그램을 만들 수있었습니다.
덤
신뢰 구간을 계산하는 방법은 「n인가 n-1인가」문제의 탓으로 엉망입니다.
「바퀴의 재발명은 피하라」에 따라, 우선 「신뢰 구간 Python」등으로 검색한 사람은,
근처를 보고, 미묘하게 다르게 곤란하면서도 둘 다 시험해보고, 그리고 결과가 다른 것에 능숙하게 된다고 생각합니다 (되었습니다).
R과 같은 대답이 되는 것은 1의 쪽. 다른 것은 2쪽입니다. 조금 시도해 보겠습니다.
> x <- c(1, 1, 3, 3)
> t.test(x)
One Sample t-test
data: x
t = 3.4641, df = 3, p-value = 0.04052
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
0.1626138 3.8373862
sample estimates:
mean of x
2
1가지 방법
import numpy as np
from scipy import stats
alpha = 0.95
data = [1, 1, 3, 3]
mean_val = np.mean(data)
sem_val = stats.sem(data) # standared error of the mean
ci = stats.t.interval(alpha, len(data)-1, loc=mean_val, scale=sem_val)
print(ci)
>> (0.16261376896260105, 3.837386231037399)
2가지 방법
import math
import numpy as np
from scipy import stats
alpha = 0.95
data = [1, 1, 3, 3]
mean_val = np.mean(data)
std_val = np.std(data)
ci = stats.t.interval(alpha,len(data)-1,loc=mean_val,scale=std_val/math.sqrt(len(data)))
print(ci)
>> (0.40877684735786857, 3.5912231526421312)
이번은 천하의 R에 따르기로 했으므로 1을 채용하고 있습니다.
덧붙여 2는 무엇이 다른가 하면, ci를 계산하는 개소의 마지막 쪽
math.sqrt(len(data))
이것입니다. n으로 나눕니다. 그러나 추측 통계를 수행한다면 n-1로 나누는 것이 좋습니다. t 분포를 가정하기 때문입니다. 사실,
math.sqrt(len(data) - 1)
그렇다면 방법 2의 대답도 R과 정확히 일치합니다.
Reference
이 문제에 관하여(Python/Matplotlib에서 양측 95% 신뢰 구간을 그림에 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mytk0u0/items/5b87a17d48ff344e333d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)