2015-05-22 114 views
3

有沒有一種方法可以在Python中找到r置信區間?使用等效於Python中cor.test的R's

cor.test(m, h) 

    Pearson's product-moment correlation 

data: m and h 
t = 0.8974, df = 4, p-value = 0.4202 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
-0.6022868 0.9164582 
sample estimates: 
     cor 
0.4093729 

在Python我可以計算出R(COR):

在R I可以做類似

r,p = scipy.stats.pearsonr(df.age, df.pets) 

但是,這並不返回將R置信區間。

回答

5

下面就來計算置信內部

首先得到的相關值(皮爾遜)

In [85]: from scipy import stats 

In [86]: corr = stats.pearsonr(df['col1'], df['col2']) 

In [87]: corr 
Out[87]: (0.551178607008175, 0.0) 

使用Fisher變換得到ž

In [88]: z = np.arctanh(corr[0]) 

In [89]: z 
Out[89]: 0.62007264620685021 

一個方式,Σ值即標準錯誤

In [90]: sigma = (1/((len(df.index)-3)**0.5)) 

In [91]: sigma 
Out[91]: 0.013840913308956662 

獲取正常的95%區間的概率密度函數的正常連續型隨機變量適用two-sided條件公式

In [92]: cint = z + np.array([-1, 1]) * sigma * stats.norm.ppf((1+0.95)/2) 

最後以雙曲正切獲得間隔值的95%

In [93]: np.tanh(cint) 
Out[93]: array([ 0.53201034, 0.56978224]) 
+0

謝謝你,解決它。我想知道爲什麼(如果)statsmodels和/或scipy還沒有提供這個。 – ComposedTreatment

+0

那麼,我也很驚訝,或者我沒有足夠好地搜索堆棧。 – Zero