pythonで相関係数の信頼区間をだしたい時ってありますよね。
統計系はRかpythonかくらいの流れなのに、(少なくとも僕が調べた限りは・・・)pythonに相関係数の信頼区間を求めるよく使われているfunctionはscipyなどでは定義されていなさそうです。
ですので、自前実装してみました。
Code
def corr_CI(a, b, alpha = 0.95):
r = stats.pearsonr(a, b)[0]
n = len(a)
if n <= 3:
AssertionError("Not enough amount data")
z= 0.5*np.log((1+r)/(1-r))
za = stats.norm.ppf(0.5 + 0.5 * alpha)
zl = z - za * math.sqrt(1/(n-3))
zu = z + za * math.sqrt(1/(n-3))
rhol = (math.exp(2 * zl) - 1 )/ (math.exp(2 * zl) +1 )
rhou = (math.exp(2 * zu) - 1 )/ (math.exp(2 * zu) +1 )
return rhol, rhou
利用例
例えば、iris datasetで利用してみるなら
import pandas as pd
from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
sl = df["sepal length (cm)"]
sw = df["sepal width (cm)"]
corr_CI(sl, sw)
とすると信頼区間の下限、上限が出力される
参考資料
https://bellcurve.jp/statistics/course/9591.html
というかほぼコピペ・・・