本文目錄一覽:
- 1、pytnon中如何計算皮爾遜的p值
- 2、Python氣象數據處理與繪圖(2):常用數據計算方法
- 3、初學python,怎樣用python做pearson相關係數的檢驗呢,求指導啊
- 4、相關性係數介紹+python代碼實現 correlation analysis
pytnon中如何計算皮爾遜的p值
如何理解皮爾遜相關係數(Pearson Correlation Coefficient)?
皮爾遜相關係數理解有兩個角度
其一, 按照高中數學水平來理解, 它很簡單, 可以看做將兩組數據首先做Z分數處理之後, 然後兩組數據的乘積和除以樣本數
Z分數一般代表正態分布中, 數據偏離中心點的距離.等於變數減掉平均數再除以標準差.(就是高考的標準分類似的處理)
標準差則等於變數減掉平均數的平方和,再除以樣本數,最後再開方.
所以, 根據這個最樸素的理解,我們可以將公式依次精簡為:
其二, 按照大學的線性數學水平來理解, 它比較複雜一點,可以看做是兩組數據的向量夾角的餘弦.
皮爾遜相關的約束條件
從以上解釋, 也可以理解皮爾遜相關的約束條件:
1 兩個變數間有線性關係
2 變數是連續變數
3 變數均符合正態分布,且二元分布也符合正態分布
4 兩變數獨立
在實踐統計中,一般只輸出兩個係數,一個是相關係數,也就是計算出來的相關係數大小,在-1到1之間;另一個是獨立樣本檢驗係數,用來檢驗樣本一致性.
先舉個手算的例子
使用維基中的例子:
例如,假設五個國家的國民生產總值分別是1、2、3、5、8(單位10億美元),又假設這五個國家的貧困比例分別是11%、12%、13%、15%、18%。
創建2個向量.(R語言)
x-c(1,2,3,5,8)
y-c(0.11,0.12,0.13,0.15,0.18)
按照維基的例子,應計算出相關係數為1出來.我們看看如何一步一步計算出來的.
x的平均數是:3.8
y的平均數是0.138
所以,
sum((x-mean(x))*(y-mean(y)))=0.308
用大白話來寫就是:
(1-3.8)*(0.11-0.138)=0.0784
(2-3.8)*(0.12-0.138)=0.0324
(3-3.8)*(0.13-0.138)=0.0064
(5-3.8)*(0.15-0.138)=0.0144
(8-3.8)*(0.18-0.138)=0.1764
0.0784+0.0324+0.0064+0.0144+0.1764=0.308
同理, 分號下面的,分別是:
sum((x-mean(x))^2)=30.8 sum((y-mean(y))^2)= 0.00308
用大白話來寫,分別是:
(1-3.8)^2=7.84 #平方
(2-3.8)^2=3.24 #平方
(3-3.8)^2=0.64 #平方
(5-3.8)^2=1.44 #平方
(8-3.8)^2=17.64 #平方
7.84+3.24+0.64+1.44+17.64=30.8
同理,求得:
sum((y-mean(y))^2)= 0.00308
然後再開平方根,分別是:
30.8^0.5=5.549775 0.00308^0.5=0.05549775
用分子除以分母,就計算出最終結果:
0.308/(5.549775*0.05549775)=1
再舉個簡單的R語言例子(R在這裡下載: )
假設有100人, 一組數據是年齡,平均年齡是35歲,標準差是5歲;另一組數據是發帖數量,平均帖子數量是45份post,標準差是8份帖子.
假設這兩組都是正態分布.我們來求這兩者的皮爾遜相關係數,R腳本如下:
x-rnorm(n=100,mean=35,sd=5) #創建一組平均數為35,標準差為5,樣本數為100的隨機數
y-rnorm(n=100,mean=45,sd=8) #創建一組平均數為45,標準差為8,樣本數為100的隨機數
cor.test(x,y,method=”pearson”) #計算這兩組數的相關,並進行T檢驗
然後R輸出結果為:
Pearson’s product-moment correlation
data: x and y
t = -0.0269, df = 98, p-value = 0.9786
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1990316 0.1938019
sample estimates:
cor
-0.002719791
當然,這裡是隨機數.也可以用非隨機的驗證一下計算.
皮爾遜相關係數用於網站開發
直接將R與Ruby關聯起來
調用很簡單,仿照上述例子:
cor(x,y)
就輸出係數結果了.
有這麼幾個庫可以參考:
…
…
說明, 以上為ruby調用庫. pythone程序員可以參考: Rpy ()
簡單的相關係數的分類
0.8-1.0 極強相關
0.6-0.8 強相關
0.4-0.6 中等程度相關
0.2-0.4 弱相關
0.0-0.2 極弱相關或無相關
ps : 這個網站開發者不要再次發明輪子,本來用markdown語法寫作很爽,結果又不得不花時間來改動.請考慮儘快支持Markdown語法.
皮爾森相關係數的就是
x和y的協方差/(x的標準差∗y的標準差)
判斷兩組數的線性關係程度。
Python氣象數據處理與繪圖(2):常用數據計算方法
對於氣象繪圖來講,第一步是對數據的處理,通過各類公式,或者統計方法將原始數據處理為目標數據。
按照氣象統計課程的內容,我給出了一些常用到的統計方法的對應函數:
在計算氣候態,區域平均時均要使用到求均值函數,對應NCL中的dim_average函數,在python中通常使用np.mean()函數
numpy.mean(a, axis, dtype)
假設a為[time,lat,lon]的數據,那麼
需要特別注意的是,氣象數據中常有缺測,在NCL中,使用求均值函數會自動略過,而在python中,當任意一數與缺測(np.nan)計算的結果均為np.nan,比如求[1,2,3,4,np.nan]的平均值,結果為np.nan
因此,當數據存在缺測數據時,通常使用np.nanmean()函數,用法同上,此時[1,2,3,4,np.nan]的平均值為(1+2+3+4)/4 = 2.5
同樣的,求某數組最大最小值時也有np.nanmax(), np.nanmin()函數來補充np.max(), np.min()的不足。
其他很多np的計算函數也可以通過在前邊加『nan』來使用。
另外,
也可以直接將a中缺失值全部填充為0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求數據標準化的函數dim_standardize()
其實也就是一行的事,根據需要指定維度即可。
皮爾遜相關係數:
相關可以說是氣象科研中最常用的方法之一了,numpy函數中的np.corrcoef(x, y)就可以實現相關計算。但是在這裡我推薦scipy.stats中的函數來計算相關係數:
這個函數缺點和有點都很明顯,優點是可以直接返回相關係數R及其P值,這避免了我們進一步計算置信度。而缺點則是該函數只支持兩個一維數組的計算,也就是說當我們需要計算一個場和一個序列的相關時,我們需要循環來實現。
其中a[time,lat,lon],b[time]
(NCL中為regcoef()函數)
同樣推薦Scipy庫中的stats.linregress(x,y)函數:
slop: 回歸斜率
intercept:回歸截距
r_value: 相關係數
p_value: P值
std_err: 估計標準誤差
直接可以輸出P值,同樣省去了做置信度檢驗的過程,遺憾的是仍需同相關係數一樣循環計算。
初學python,怎樣用python做pearson相關係數的檢驗呢,求指導啊
scipy.stats.pearsonr(x, y)
x和y為相同長度的兩組數據
返回值 r, p-value
r是相關係數,取值-1~1. 表示線性相關程度
p-value越小,表示相關程度越顯著。按照文檔的說法「The p-values are not entirely reliable but are probably reasonable for datasets larger than 500 or so.」,p-value在500個樣本值以上有較高的可靠性
相關性係數介紹+python代碼實現 correlation analysis
參考文獻:
1. python 皮爾森相關係數
2. 統計學之三大相關性係數(pearson、spearman、kendall)
皮爾森係數
重點關注第一個等號後面的公式,最後面的是推導計算,暫時不用管它們。看到沒有,兩個變數(X, Y)的皮爾森相關性係數(ρX,Y)等於它們之間的協方差cov(X,Y)除以它們各自標準差的乘積(σX, σY)。
公式的分母是變數的標準差,這就意味著計算皮爾森相關性係數時,變數的標準差不能為0(分母不能為0),也就是說你的兩個變數中任何一個的值不能都是相同的。如果沒有變化,用皮爾森相關係數是沒辦法算出這個變數與另一個變數之間是不是有相關性的。
皮爾森相關係數(Pearson correlation coefficient)也稱皮爾森積矩相關係數(Pearson product-moment correlation coefficient) ,是一種線性相關係數。皮爾森相關係數是用來反映兩個變數線性相關程度的統計量。相關係數用r表示,其中n為樣本量,分別為兩個變數的觀測值和均值。r描述的是兩個變數間線性相關強弱的程度。r的絕對值越大表明相關性越強。
簡單的相關係數的分類
0.8-1.0 極強相關
0.6-0.8 強相關
0.4-0.6 中等程度相關
0.2-0.4 弱相關
0.0-0.2 極弱相關或無相關
r描述的是兩個變數間線性相關強弱的程度。r的取值在-1與+1之間,若r0,表明兩個變數是正相關,即一個變數的值越大,另一個變數的值也會越大;若r0,表明兩個變數是負相關,即一個變數的值越大另一個變數的值反而會越小。r 的絕對值越大表明相關性越強,要注意的是這裡並不存在因果關係。
斯皮爾曼相關性係數,通常也叫斯皮爾曼秩相關係數。「秩」,可以理解成就是一種順序或者排序,那麼它就是根據原始數據的排序位置進行求解,這種表徵形式就沒有了求皮爾森相關性係數時那些限制。下面來看一下它的計算公式:
計算過程就是:首先對兩個變數(X, Y)的數據進行排序,然後記下排序以後的位置(X』, Y』),(X』, Y』)的值就稱為秩次,秩次的差值就是上面公式中的di,n就是變數中數據的個數,最後帶入公式就可求解結果
帶入公式,求得斯皮爾曼相關性係數:ρs= 1-6 (1+1+1+9)/6 35=0.657
而且,即便在變數值沒有變化的情況下,也不會出現像皮爾森係數那樣分母為0而無法計算的情況。另外,即使出現異常值,由於異常值的秩次通常不會有明顯的變化(比如過大或者過小,那要麼排第一,要麼排最後),所以對斯皮爾曼相關性係數的影響也非常小!
由於斯皮爾曼相關性係數沒有那些數據條件要求,適用的範圍就廣多了。
肯德爾相關性係數,又稱肯德爾秩相關係數,它也是一種秩相關係數,不過它所計算的對象是分類變數。
分類變數可以理解成有類別的變數,可以分為
無序的,比如性別(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等級(重度肥胖,中度肥胖、輕度肥胖、不肥胖)。
通常需要求相關性係數的都是有序分類變數。
舉個例子。比如評委對選手的評分(優、中、差等),我們想看兩個(或者多個)評委對幾位選手的評價標準是否一致;或者醫院的尿糖化驗報告,想檢驗各個醫院對尿糖的化驗結果是否一致,這時候就可以使用肯德爾相關性係數進行衡量。
pandas.DataFrame.corr()
DataFrame.corr(method=’pearson’, min_periods=1)[source]
Compute pairwise correlation of columns, excluding NA/null values
Parameters:
method : {『pearson』, 『kendall』, 『spearman』}
pearson : standard correlation coefficient
kendall : Kendall Tau correlation coefficient
spearman : Spearman rank correlation
min_periods : int, optional
Minimum number of observations required per pair of columns to have a valid result. Currently only available for pearson and spearman correlation
Returns:
y : DataFrame
numpy.corrcoef(x,y = None,rowvar = True,bias = class’numpy._globals._NoValue’,ddof = class’numpy._globals._NoValue’ )
返回Pearson乘積矩相關係數。
cov有關更多詳細信息,請參閱文檔。相關係數矩陣R和協方差矩陣C之間的關係為
R的值在-1和1之間(含)。
參數:
x:array_like
包含多個變數和觀察值的1維或2維數組。x的每一行代表一個變數,每一列都是對所有這些變數的單獨觀察。另請參閱下面的rowvar。
y:array_like,可選
一組額外的變數和觀察。y的形狀與x相同。
rowvar:布爾,可選
如果rowvar為True(默認),則每行表示一個變數,並在列中有觀察值。否則,該關係將被轉置:每列表示一個變數,而行包含觀察值。
bias : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
ddof : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
返回:
R:ndarray 變數的相關係數矩陣。
原創文章,作者:WLLVP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127710.html