R计算两列数据的相关系数_数据特征分析·相关性分析
相關(guān)性分析
相關(guān)分析是指對兩個(gè)或多個(gè)具備相關(guān)性的變量元素進(jìn)行分析,從而衡量兩個(gè)因素的的相關(guān)密切程度,相關(guān)性的元素之間需要存在一定的聯(lián)系或者概率才可以進(jìn)行相關(guān)性分析。
1、 如何利用相關(guān)系數(shù)判斷數(shù)據(jù)之間的關(guān)系
(1) 繪制散點(diǎn)圖
判斷數(shù)據(jù)是否具有相關(guān)關(guān)系,最直觀的方法就是繪制散點(diǎn)圖
如何要判斷多個(gè)數(shù)據(jù)的之間的關(guān)系,散點(diǎn)圖的繪制就會顯得比較繁瑣,這時(shí)候要選擇繪制散點(diǎn)矩陣
(2) 相關(guān)系數(shù)
相關(guān)系數(shù)衡量了兩個(gè)變量的統(tǒng)一程度,范圍是-1~1,‘1’代表完全正相關(guān),‘-1’代表完全負(fù)相關(guān)。
比較常用的是Pearson‘皮爾遜’相關(guān)系數(shù)、Spearman‘斯皮爾曼’相關(guān)系數(shù)。
a) Pearson相關(guān)系數(shù)
也稱皮爾森積矩相關(guān)系數(shù),一般用于分析,兩個(gè)連續(xù)變量之間的關(guān)系,是一種線性相關(guān)系數(shù),公式為:
補(bǔ)充:
|r|<= 0.3 不存在線性相關(guān)
0.3<=|r|<= 0.5 低度線性關(guān)系
0.5<=|r|<= 0.8 顯著線性關(guān)系
|r| > 0.8 高度線性關(guān)系
b) Spearman相關(guān)系數(shù)
Pearson相關(guān)系數(shù)要求連續(xù)變量的取值服從正態(tài)分布,不服從正態(tài)分布的變量、分類或等級變量之間的關(guān)聯(lián)性可采用Spearman秩相關(guān)系數(shù),也稱等級相關(guān)系數(shù)來描述。公式:
對兩個(gè)變量成對的取值分別按照從小到大(或者從大到小)順序編秩,Ri代表xi的秩次,Qi代表yi的秩次,Ri-Qi為xi、yi的秩次之差。
在實(shí)際應(yīng)用計(jì)算中,上述兩種相關(guān)系數(shù)都要對其進(jìn)行假設(shè)檢驗(yàn),使用t檢驗(yàn)方法檢驗(yàn)其顯著性水平以確定其相關(guān)程度。研究表明,在正態(tài)分布假定下,Spearman秩相關(guān)系數(shù)與Pearson相關(guān)系數(shù)在效率上是等價(jià)的,而對于連續(xù)測量數(shù)據(jù),更適合用Pearson相關(guān)系數(shù)來進(jìn)行分析。
3)判定系數(shù)。
判定系數(shù)是相關(guān)系數(shù)的平方,用r2表示;用來衡量回歸方程對y的解釋程度。判定系數(shù)取值范圍:0≤r2≤1。r2越接近于1,表明x與y之間的相關(guān)性越強(qiáng);r2越接近于0,表明兩個(gè)變量之間幾乎沒有直線相關(guān)關(guān)系。
2、 應(yīng)用場景
(1) 利用相關(guān)系數(shù)來發(fā)覺數(shù)據(jù)間隱藏的聯(lián)系。
經(jīng)典相關(guān)分析案例是‘啤酒與尿不濕的故事’,這是大家耳熟能詳?shù)姆治霭咐恕R驗(yàn)槠【婆c尿不濕呈現(xiàn)了明顯了正相關(guān)性,改變了超市的擺貨策略。
但是,這個(gè)只是用來說明的案例,在實(shí)際中并不存在,尿不濕屬于嬰兒產(chǎn)品,啤酒屬于酒類,沒有超市會擺放在一起。在理解相關(guān)性分析同時(shí),也要注意現(xiàn)實(shí)中的實(shí)際情況。現(xiàn)在還有很多書中在引用這個(gè)案例,希望大家警惕這樣的案例。
(2) 利用相關(guān)系數(shù)來減少統(tǒng)計(jì)指標(biāo)。
當(dāng)業(yè)務(wù)指標(biāo)繁雜,敘述籠統(tǒng),給報(bào)告制作,分析解讀帶來巨大的成本的時(shí)候。根據(jù)相關(guān)系數(shù)刪減指標(biāo)是方法之一,一般來說相關(guān)性大于0.8的時(shí)候可以選擇其一。
也請大家注意‘相關(guān)性’與‘因果性’之間的區(qū)別,這兩者很容易混淆。在報(bào)告中一定要說明情況,避免帶來錯(cuò)誤的決策。
(3) 利用相關(guān)系數(shù)來挑選回歸建模的變量。
在建立多元回歸模型前,需要解決把那些數(shù)據(jù)放入模型作為自變量。最常規(guī)的方式就是先計(jì)算所有字段與因變量的相關(guān)系數(shù),把相關(guān)系數(shù)較高的放入模型。然后計(jì)算自變量間的相關(guān)系數(shù)。若自變量間的相關(guān)系數(shù)高,說明存在多重共線性,需要進(jìn)行刪減。
(4) 利用相關(guān)系數(shù)來驗(yàn)證主觀判斷,這或許是現(xiàn)實(shí)業(yè)務(wù)中最有使用必要的。
決策層或者管理層經(jīng)常會根據(jù)自己的經(jīng)驗(yàn),主觀地形成一些邏輯關(guān)系。最典型的表述方式就是“我認(rèn)為這個(gè)數(shù)據(jù)會影響到那個(gè)數(shù)據(jù)”。到底有沒有影響?可以通過計(jì)算相關(guān)系數(shù)來判斷。相關(guān)系數(shù)的應(yīng)用能夠讓決策者更冷靜,更少地盲目拍腦袋。雖然相關(guān)系數(shù)不能表達(dá)因果關(guān)系,但有聯(lián)系的兩件事情,一定會在相關(guān)系數(shù)上有所反映。
3、代碼詳解
''' # 圖示初判 散點(diǎn)圖 # (1)變量之間的線性相關(guān)性 # 創(chuàng)建三個(gè)數(shù)據(jù):data1為0-100的隨機(jī)數(shù)并從小到大排列,data2為0-50的隨機(jī)數(shù)并從小到大排列,data3為0-500的隨機(jī)數(shù)并從大到小排列 data1 = pd.Series(np.random.rand(50)*100).sort_values() data2 = pd.Series(np.random.rand(50)*50).sort_values() data3 = pd.Series(np.random.rand(50)*500).sort_values(ascending=False) #可知data1與data2呈正線性相關(guān),data1與data3呈正線性相關(guān)fig = plt.figure(figsize=(10,5))ax1 = fig.add_subplot(1,2,1) ax1.scatter(data1,data2) plt.grid(linestyle='--')ax2 = fig.add_subplot(1,2,2) ax2.scatter(data1,data3) plt.grid(linestyle='--')#散點(diǎn)矩陣 data = pd.DataFrame(np.random.randn(200,4)*100,columns=['A','B','C','D'])pd.plotting.scatter_matrix(data,figsize=(10,6),c = 'b',marker = '+',diagonal='hist',hist_kwds={'bins':50,'edgecolor':'k'},alpha = 0.5,range_padding=0.1) data.head()# Pearson相關(guān)系數(shù)data1 = pd.Series(np.random.rand(100)*100).sort_values() data2 = pd.Series(np.random.rand(100)*50).sort_values() data = pd.DataFrame({'value1':data1.values,'value2':data2.values}) print(data.head()) print('------') # 創(chuàng)建樣本數(shù)據(jù)u1,u2 = data['value1'].mean(),data['value2'].mean() # 計(jì)算均值 std1,std2 = data['value1'].std(),data['value2'].std() # 計(jì)算標(biāo)準(zhǔn)差 print('value1正態(tài)性檢驗(yàn):n',stats.kstest(data['value1'], 'norm', (u1, std1))) print('value2正態(tài)性檢驗(yàn):n',stats.kstest(data['value2'], 'norm', (u2, std2))) print('------') # 正態(tài)性檢驗(yàn) → pvalue >0.05data['(x-u1)*(y-u2)'] = (data['value1'] - u1) * (data['value2'] - u2) data['(x-u1)**2'] = (data['value1'] - u1)**2 data['(y-u2)**2'] = (data['value2'] - u2)**2 print(data.head()) print('------') # 制作Pearson相關(guān)系數(shù)求值表r = data['(x-u1)*(y-u2)'].sum() / (np.sqrt(data['(x-u1)**2'].sum() * data['(y-u2)**2'].sum())) print('Pearson相關(guān)系數(shù)為:%.4f' % r) # 求出r # |r| > 0.8 → 高度線性相關(guān) value1 value2
0 0.678218 0.264657
1 0.683882 0.322216
2 1.050526 1.070748
3 1.647541 1.266555
4 4.637911 1.311668
------
value1正態(tài)性檢驗(yàn):
KstestResult(statistic=0.06715860692623049, pvalue=0.776789229095759)
value2正態(tài)性檢驗(yàn):
KstestResult(statistic=0.09553536914391403, pvalue=0.3024936582605874)
------
value1 value2 (x-u1)*(y-u2) (x-u1)**2 (y-u2)**2
0 0.678218 0.264657 1203.715631 2501.023716 579.335298
1 0.683882 0.322216 1200.701088 2500.457191 576.567800
2 1.050526 1.070748 1154.741738 2463.923902 541.180870
3 1.647541 1.266555 1131.250617 2405.011158 532.108949
4 4.637911 1.311668 1060.192849 2120.652561 530.029717
------
Pearson相關(guān)系數(shù)為:0.9949
總結(jié)
以上是生活随笔為你收集整理的R计算两列数据的相关系数_数据特征分析·相关性分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言实战笔记 基本统计分析-相关
- 下一篇: 精通Flink项目优化(一.资源配置调优