1. person correlation coefficient(皮爾森相關(guān)性系數(shù))
我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、甘井子ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的甘井子網(wǎng)站制作公司
皮爾遜相關(guān)系數(shù)通常用r或ρ表示,度量兩變量X和Y之間相互關(guān)系(線性相關(guān))
(1)公式
皮爾森相關(guān)性系數(shù)的值等于它們之間的協(xié)方差cov(X,Y)除以它們各自標(biāo)準(zhǔn)差的乘積(σX, σY)。
(2)數(shù)據(jù)要求
a.正態(tài)分布
它是協(xié)方差與標(biāo)準(zhǔn)差的比值,并且在求皮爾森相關(guān)性系數(shù)以后,通常還會(huì)用t檢驗(yàn)之類的方法來進(jìn)行皮爾森相關(guān)性系數(shù)檢驗(yàn),而t檢驗(yàn)是基于數(shù)據(jù)呈正態(tài)分布的假設(shè)的。
b.實(shí)驗(yàn)數(shù)據(jù)之間的差距不能太大
比如:研究人跑步的速度與心臟跳動(dòng)的相關(guān)性,如果人突發(fā)心臟病,心跳為0(或者過快與過慢),那這時(shí)候我們會(huì)測(cè)到一個(gè)偏離正常值的心跳,如果我們把這個(gè)值也放進(jìn)去進(jìn)行相關(guān)性分析,它的存在會(huì)大大干擾計(jì)算的結(jié)果的。
(3)實(shí)例代碼
import pandas as pd
import numpy as np
#原始數(shù)據(jù)
X1=pd.Series([1, 2, 3, 4, 5, 6])
Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])
X1.mean() #平均值# 3.5
Y1.mean() #2.4
X1.var() #方差#3.5
Y1.var() #2.9760000000000004
X1.std() #標(biāo)準(zhǔn)差不能為0# 1.8708286933869707
Y1.std() #標(biāo)準(zhǔn)差不能為0#1.725108692227826
X1.cov(Y1) #協(xié)方差#3.0600000000000005
X1.corr(Y1,method="pearson") #皮爾森相關(guān)性系數(shù) #0.948136664010285
X1.cov(Y1)/(X1.std()*Y1.std()) #皮爾森相關(guān)性系數(shù) # 0.948136664010285
2. spearman correlation coefficient(斯皮爾曼相關(guān)性系數(shù))
斯皮爾曼相關(guān)性系數(shù),通常也叫斯皮爾曼秩相關(guān)系數(shù)?!爸取?,可以理解成就是一種順序或者排序,那么它就是根據(jù)原始數(shù)據(jù)的排序位置進(jìn)行求解
(1)公式
首先對(duì)兩個(gè)變量(X, Y)的數(shù)據(jù)進(jìn)行排序,然后記下排序以后的位置(X’, Y’),(X’, Y’)的值就稱為秩次,秩次的差值就是上面公式中的di,n就是變量中數(shù)據(jù)的個(gè)數(shù),最后帶入公式就可求解結(jié)果。
(2)數(shù)據(jù)要求
因?yàn)槭嵌ㄐ?,所以我們不用管X和Y這兩個(gè)變量具體的值到底差了多少,只需要算一下它們每個(gè)值所處的排列位置的差值,就可以求出相關(guān)性系數(shù)了
(3)實(shí)例代碼
import pandas as pd
import numpy as np
#原始數(shù)據(jù)
X1=pd.Series([1, 2, 3, 4, 5, 6])
Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])
#處理數(shù)據(jù)刪除Nan
x1=X1.dropna()
y1=Y1.dropna()
n=x1.count()
x1.index=np.arange(n)
y1.index=np.arange(n)
#分部計(jì)算
d=(x1.sort_values().index-y1.sort_values().index)**2
dd=d.to_series().sum()
p=1-n*dd/(n*(n**2-1))
#s.corr()函數(shù)計(jì)算
r=x1.corr(y1,method='spearman')
print(r,p) #0.942857142857143 0.9428571428571428
3. kendall correlation coefficient(肯德爾相關(guān)性系數(shù))
肯德爾相關(guān)性系數(shù),又稱肯德爾秩相關(guān)系數(shù),它也是一種秩相關(guān)系數(shù),不過它所計(jì)算的對(duì)象是分類變量。
分類變量可以理解成有類別的變量,可以分為:
(1) 無序的,比如性別(男、女)、血型(A、B、O、AB);
(2) 有序的,比如肥胖等級(jí)(重度肥胖,中度肥胖、輕度肥胖、不肥胖)。
通常需要求相關(guān)性系數(shù)的都是有序分類變量。
(1)公式
R=(P-(n*(n-1)/2-P))/(n*(n-1)/2)=(4P/(n*(n-1)))-1
注:設(shè)有n個(gè)統(tǒng)計(jì)對(duì)象,每個(gè)對(duì)象有兩個(gè)屬性。將所有統(tǒng)計(jì)對(duì)象按屬性1取值排列,不失一般性,設(shè)此時(shí)屬性2取值的排列是亂序的。設(shè)P為兩個(gè)屬性值排列大小關(guān)系一致的統(tǒng)計(jì)對(duì)象對(duì)數(shù)
(2)數(shù)據(jù)要求
類別數(shù)據(jù)或者可以分類的數(shù)據(jù)
(3)實(shí)例代碼
import pandas as pd
import numpy as np
#原始數(shù)據(jù)
x= pd.Series([3,1,2,2,1,3])
y= pd.Series([1,2,3,2,1,1])
r = x.corr(y,method="kendall") #-0.2611165
如何理解皮爾遜相關(guān)系數(shù)(Pearson Correlation Coefficient)?
皮爾遜相關(guān)系數(shù)理解有兩個(gè)角度
其一, 按照高中數(shù)學(xué)水平來理解, 它很簡單, 可以看做將兩組數(shù)據(jù)首先做Z分?jǐn)?shù)處理之后, 然后兩組數(shù)據(jù)的乘積和除以樣本數(shù)
Z分?jǐn)?shù)一般代表正態(tài)分布中, 數(shù)據(jù)偏離中心點(diǎn)的距離.等于變量減掉平均數(shù)再除以標(biāo)準(zhǔn)差.(就是高考的標(biāo)準(zhǔn)分類似的處理)
標(biāo)準(zhǔn)差則等于變量減掉平均數(shù)的平方和,再除以樣本數(shù),最后再開方.
所以, 根據(jù)這個(gè)最樸素的理解,我們可以將公式依次精簡為:
其二, 按照大學(xué)的線性數(shù)學(xué)水平來理解, 它比較復(fù)雜一點(diǎn),可以看做是兩組數(shù)據(jù)的向量夾角的余弦.
皮爾遜相關(guān)的約束條件
從以上解釋, 也可以理解皮爾遜相關(guān)的約束條件:
1 兩個(gè)變量間有線性關(guān)系
2 變量是連續(xù)變量
3 變量均符合正態(tài)分布,且二元分布也符合正態(tài)分布
4 兩變量獨(dú)立
在實(shí)踐統(tǒng)計(jì)中,一般只輸出兩個(gè)系數(shù),一個(gè)是相關(guān)系數(shù),也就是計(jì)算出來的相關(guān)系數(shù)大小,在-1到1之間;另一個(gè)是獨(dú)立樣本檢驗(yàn)系數(shù),用來檢驗(yàn)樣本一致性.
先舉個(gè)手算的例子
使用維基中的例子:
例如,假設(shè)五個(gè)國家的國民生產(chǎn)總值分別是1、2、3、5、8(單位10億美元),又假設(shè)這五個(gè)國家的貧困比例分別是11%、12%、13%、15%、18%。
創(chuàng)建2個(gè)向量.(R語言)
x-c(1,2,3,5,8)
y-c(0.11,0.12,0.13,0.15,0.18)
按照維基的例子,應(yīng)計(jì)算出相關(guān)系數(shù)為1出來.我們看看如何一步一步計(jì)算出來的.
x的平均數(shù)是:3.8
y的平均數(shù)是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
同理, 分號(hào)下面的,分別是:
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
用分子除以分母,就計(jì)算出最終結(jié)果:
0.308/(5.549775*0.05549775)=1
再舉個(gè)簡單的R語言例子(R在這里下載:?)
假設(shè)有100人, 一組數(shù)據(jù)是年齡,平均年齡是35歲,標(biāo)準(zhǔn)差是5歲;另一組數(shù)據(jù)是發(fā)帖數(shù)量,平均帖子數(shù)量是45份post,標(biāo)準(zhǔn)差是8份帖子.
假設(shè)這兩組都是正態(tài)分布.我們來求這兩者的皮爾遜相關(guān)系數(shù),R腳本如下:
x-rnorm(n=100,mean=35,sd=5) ?#創(chuàng)建一組平均數(shù)為35,標(biāo)準(zhǔn)差為5,樣本數(shù)為100的隨機(jī)數(shù)
y-rnorm(n=100,mean=45,sd=8) #創(chuàng)建一組平均數(shù)為45,標(biāo)準(zhǔn)差為8,樣本數(shù)為100的隨機(jī)數(shù)
cor.test(x,y,method="pearson") #計(jì)算這兩組數(shù)的相關(guān),并進(jìn)行T檢驗(yàn)
然后R輸出結(jié)果為:
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
當(dāng)然,這里是隨機(jī)數(shù).也可以用非隨機(jī)的驗(yàn)證一下計(jì)算.
皮爾遜相關(guān)系數(shù)用于網(wǎng)站開發(fā)
直接將R與Ruby關(guān)聯(lián)起來
調(diào)用很簡單,仿照上述例子:
cor(x,y)
就輸出系數(shù)結(jié)果了.
有這么幾個(gè)庫可以參考:
...
...
說明, 以上為ruby調(diào)用庫. pythone程序員可以參考: Rpy ()
簡單的相關(guān)系數(shù)的分類
0.8-1.0 極強(qiáng)相關(guān)
0.6-0.8 強(qiáng)相關(guān)
0.4-0.6 中等程度相關(guān)
0.2-0.4 弱相關(guān)
0.0-0.2 極弱相關(guān)或無相關(guān)
ps : 這個(gè)網(wǎng)站開發(fā)者不要再次發(fā)明輪子,本來用markdown語法寫作很爽,結(jié)果又不得不花時(shí)間來改動(dòng).請(qǐng)考慮盡快支持Markdown語法.
皮爾森相關(guān)系數(shù)的就是
x和y的協(xié)方差/(x的標(biāo)準(zhǔn)差?y的標(biāo)準(zhǔn)差)
判斷兩組數(shù)的線性關(guān)系程度。
有error用python求皮爾遜相關(guān)系數(shù)的具體方法。
1、第一種方法:importnumpyasnp。desc1=[0,1,0,3]。desc2=[0,1,1,1]。x_=desc1-np.mean(desc1)。y_=desc2-np.mean(desc2)。r=np.dot(x_,y_)/(np.linalg.norm(x_)np.linalg.norm(y_))。
2、第二種方法:importnumpyasnp。desc1=[0,1,0,3]。desc2=[0,1,1,1]。d1=(desc1-np.mean(desc1))/np.std(desc1)。d2=(desc2-np.mean(desc2))/np.std(desc2)。r=np.sum(d1d2)/(len(desc1))。
3、第三種方法:desc1=[0,1,0,3]。desc2=[0,1,1,1]。X=np.vstack([desc1,desc2])。d2=np.corrcoef(X)[0][1]。
對(duì)于氣象繪圖來講,第一步是對(duì)數(shù)據(jù)的處理,通過各類公式,或者統(tǒng)計(jì)方法將原始數(shù)據(jù)處理為目標(biāo)數(shù)據(jù)。
按照氣象統(tǒng)計(jì)課程的內(nèi)容,我給出了一些常用到的統(tǒng)計(jì)方法的對(duì)應(yīng)函數(shù):
在計(jì)算氣候態(tài),區(qū)域平均時(shí)均要使用到求均值函數(shù),對(duì)應(yīng)NCL中的dim_average函數(shù),在python中通常使用np.mean()函數(shù)
numpy.mean(a, axis, dtype)
假設(shè)a為[time,lat,lon]的數(shù)據(jù),那么
需要特別注意的是,氣象數(shù)據(jù)中常有缺測(cè),在NCL中,使用求均值函數(shù)會(huì)自動(dòng)略過,而在python中,當(dāng)任意一數(shù)與缺測(cè)(np.nan)計(jì)算的結(jié)果均為np.nan,比如求[1,2,3,4,np.nan]的平均值,結(jié)果為np.nan
因此,當(dāng)數(shù)據(jù)存在缺測(cè)數(shù)據(jù)時(shí),通常使用np.nanmean()函數(shù),用法同上,此時(shí)[1,2,3,4,np.nan]的平均值為(1+2+3+4)/4 = 2.5
同樣的,求某數(shù)組最大最小值時(shí)也有np.nanmax(), np.nanmin()函數(shù)來補(bǔ)充np.max(), np.min()的不足。
其他很多np的計(jì)算函數(shù)也可以通過在前邊加‘nan’來使用。
另外,
也可以直接將a中缺失值全部填充為0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求數(shù)據(jù)標(biāo)準(zhǔn)化的函數(shù)dim_standardize()
其實(shí)也就是一行的事,根據(jù)需要指定維度即可。
皮爾遜相關(guān)系數(shù):
相關(guān)可以說是氣象科研中最常用的方法之一了,numpy函數(shù)中的np.corrcoef(x, y)就可以實(shí)現(xiàn)相關(guān)計(jì)算。但是在這里我推薦scipy.stats中的函數(shù)來計(jì)算相關(guān)系數(shù):
這個(gè)函數(shù)缺點(diǎn)和有點(diǎn)都很明顯,優(yōu)點(diǎn)是可以直接返回相關(guān)系數(shù)R及其P值,這避免了我們進(jìn)一步計(jì)算置信度。而缺點(diǎn)則是該函數(shù)只支持兩個(gè)一維數(shù)組的計(jì)算,也就是說當(dāng)我們需要計(jì)算一個(gè)場(chǎng)和一個(gè)序列的相關(guān)時(shí),我們需要循環(huán)來實(shí)現(xiàn)。
其中a[time,lat,lon],b[time]
(NCL中為regcoef()函數(shù))
同樣推薦Scipy庫中的stats.linregress(x,y)函數(shù):
slop: 回歸斜率
intercept:回歸截距
r_value: 相關(guān)系數(shù)
p_value: P值
std_err: 估計(jì)標(biāo)準(zhǔn)誤差
直接可以輸出P值,同樣省去了做置信度檢驗(yàn)的過程,遺憾的是仍需同相關(guān)系數(shù)一樣循環(huán)計(jì)算。
當(dāng)前名稱:皮爾遜函數(shù)python 皮爾遜相關(guān)matlab
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article8/doggdop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、做網(wǎng)站、電子商務(wù)、微信小程序、域名注冊(cè)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)