皮爾遜相關係數python實現的簡單介紹

本文目錄一覽:

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-hant/n/127710.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WLLVP的頭像WLLVP
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論