기본 콘텐츠로 건너뛰기

라벨이 ECDF인 게시물 표시

[matplotlib]quiver()함수

Graph code related to statistical tests

The following graphs are the codes for the figures included in Chapter 5 of the e-book Statistics with Python . import numpy as np import pandas as pd from scipy import stats from sklearn.preprocessing import StandardScaler import yfinance as yf import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") #fig511 st=pd.Timestamp(2024, 4,20) et=pd.Timestamp(2024, 5, 30) da1=yf.download('GOOGL', st, et)["Close"] da2=yf.download('MSFT', st, et)["Close"] da1=da1.iloc[:,0].pct_change()[1:]*100 da2=da2.iloc[:,0].pct_change()[1:]*100 da=pd.DataFrame([da1, da2], index=['data1', 'data2']).T da.index=range(len(da1)) mu1, sd1, n1=np.mean(da1), np.std(da1, ddof=1), len(da1) mu2, sd2, n2=np.mean(da2), np.std(da2, ddof=1), len(da2) s_p=np.sqrt(((n1-1)*sd1**2+(n2-1)*sd2**2)/(n1+n2-2)) se=s_p*np.sqrt((1/n1+1/n2)) df=n1+n2-2 mu=mu1-mu2 testStatic=((mu1-mu2)-0)/se x=np.linspace(-3, 3, 500) p=stats.t.pdf(x, df) l=stats.t...

통계 검정에 관련된 그래프

다음 그래프들은 전자책 파이썬과 함께하는 통계이야기 5 장에 수록된 그림들의 코드들입니다. import numpy as np import pandas as pd from scipy import stats from sklearn.preprocessing import StandardScaler import FinanceDataReader as fdr import yfinance as yf import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") #fig 511 st=pd.Timestamp(2024, 4,20) et=pd.Timestamp(2024, 5, 30) da1=fdr.DataReader('091160', st, et)["Close"] da2=fdr.DataReader('005930', st, et)["Close"] da1=da1.pct_change()[1:]*100 da2=da2.pct_change()[1:]*100 da=pd.DataFrame([da1, da2], index=['data1', 'data2']).T da.index=range(len(da1)) mu1, sd1, n1=np.mean(da1), np.std(da1, ddof=1), len(da1) mu2, sd2, n2=np.mean(da2), np.std(da2, ddof=1), len(da2) s_p=np.sqrt(((n1-1)*sd1**2+(n2-1)*sd2**2)/(n1+n2-2)) se=s_p*np.sqrt((1/n1+1/n2)) se=s_p*np.sqrt((1/n1+1/n2)) df=n1+n2-2 mu=mu1-mu2 ci=stats.t.interval(0.95, df, mu, se) testStatic=((mu1-mu2)-0)/se x=np.linspace(-3, 3, 500) ...

[seaborn] 데이터분포의 시각화 3: 경험적 누적분포(ECDF)

데이터분포의 시각화 3: 경험적 누적분포(ECDF) 식 1에 의해 계산되는 경험적 누적분포함수는 데이터 분포의 정규성을 평가하거나 서로 다른 여러 표본 분포를 비교할 때 사용합니다( Kolmogorov-Smirnov Test 참조). 이 함수는 샘플 기반의 누적분포(CDF)의 계단함수(step function)을 나타냅니다. \begin{align}&\text{ECDF}=\frac{n(i)}{N}\\ &n(i): \text{오름차순으로 정렬한 각 요소의 위치} \\&H: \text{자료의 크기} \end{align} scipy.stats.ecdf() 함수로 계산할 수 있으며 이 함수의 속성 .probailities 로 ECDF를 확인할 수 있습니다. 이 함수에 전달되는 객체는 오름차순으로 정렬된 데이터입니다. import numpy as np from sklearn.datasets import make_blobs import pandas as pd from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt plt.rcParams['font.family'] ='NanumGothic' plt.rcParams['axes.unicode_minus'] =False import seaborn as sns import yfinance as yf 사용할 데이터로 코스피 지수의 일일자료(^KS11)를 모듈 yfiance를 사용하여 호출합니다. 그 자료에서 에 대해 일일변화율(시가에 대한 종가의 변화율)과 일간 거래량(Volume)의 변화율을 목록화하여 첨가하여 다음코드의 결과인 kos1df 자료를 생성합니다. st=pd.Timestamp(2023, 10, 17) et=pd.Timestamp(2024, 10, 17) kos=yf.download("^KS11",st, et) kos=kos.drop...

[data analysis]Kolmogorov-Smirnov Test

Kolmogorov-Smirnov Test 관련된 내용 Q-Q plot shapiro-Wilk test Kolmogorov-Smirnov Test Anderson-Darling 검정 Jarque-Bera test Kolmogorov-Smirnov 검정 (K-S test)은 표본이 특정 분포를 가진 모집단에서 추출되었는지 결정하는 데 사용됩니다. 즉, 자료의 분포가 특정한 분포와의 일치정도를 정량화하여 검정하는 방법입니다. 분석대상 자료의 분포를 알 수 없으므로 식 1에 의해 생성된 경험적 분포 함수 (Emperical distribution fucntion, ECDF) 와 특정분포를 비교합니다. $$ECDF =\frac{n(i)}{N}$$ (식 1) 식 1의 n(i)는 데이터를 오름차순으로 정렬한 경우의 각 요소의 위치이며 분모인 N은 전체 자료수입니다. 자료가 오름차순으로 정렬되면 각 값까지의 누적확률은 그것이 위치하는 순서에 의존됩니다. 예를 들어 총 20개의 데이터 중의 2번째의 값의 누적확률은 0.1(2/20)이 됩니다. 전체적으로 각 데이터마다 1/20씩 증가하는계단함수가 됩니다. 이것을 경험적 누적분포함수라고 하며 이 함수가 정규분포의 누적함수와의 일치 정도로 자료의 정규성을 검정합니다. 그림 1은 100개의 랜덤 샘플에 대한 경험적 누적분포함수와 정규누적분포함수를 작성한 것입니다. np.random.seed(3) N=100 da=np.sort(np.random.randn(N)) ecdf=[i/N for i in range(1, N+1)] nCdf=stats.norm.cdf(da) plt.figure(figsize=(4,2)) plt.plot(da, ecdf, color="blue", label="ECDF") plt.plot(da, nCdf, color="red", label="normCDF") plt.legend(loc=...