1. 程式人生 > >多元相關分析與迴歸分析R 實踐

多元相關分析與迴歸分析R 實踐

相關變數間的關係有兩種:一種是平行關係,即兩個或兩個以上變數相互影響。另一種是依存關係,即是一個變數的變化受到另一個或多個變數的影響。相關分析是研究呈平行關係的相關變數之間的關係。而回歸分析是研究呈依存關係的相關變數間的關係。 

步驟: 建立模型、求解引數、對模型進行檢驗

相關分析:通過計算變數間的相關係數來判斷兩個變數的相關程度及正負相關。

相關係數:兩組不同資料的相關程度,取值範圍在(-1,1),== 0不相關,>0時則兩個變數為正相關,<0時則兩個變數為負相關。


## 協方差相關係數
?cor()

## 相關係數假設檢驗
?cor.test()

## 
library(Hmisc)
library(corrplot)#先載入包
data(mtcars)
mydata <- mtcars[, c(1,3,4,5,6,7)]
head(mydata, 6)

## 一元相關性分析
res <- cor(mydata$mpg, mydata$disp)

##一元相關係數假設檢驗
cor.p = cor.test(mydata$mpg, mydata$disp)$p.value



##  多元相關性分析
ress <- cor(mydata)

##一元相關係數假設檢驗
ress.p <- rcorr(as.matrix(mydata))
## 檢視顯著性p-value
ress.p$P


### 視覺化
corrplot(ress, type = "upper", order = "hclust", tl.col = "black", tl.srt = 45)
corrplot(ress.p$r, type="upper", order="hclust", p.mat = ress.p$P, sig.level = 0.01, insig = "blank")

 

迴歸分析通過研究變數的依存關係,將變數分為因變數和自變數,並確定自變數和因變數的具體關係方程式

建模

直線模型為:

y=a+bx

一個因變數與多個自變數間的線性數量關係可以用多元線性迴歸方程來表示:

y=b0+b1x+b2x ... +bnxn

曲線迴歸模型為:

二次函式

y=a+bx+cx^2

對數函式

y=a+blogx

指數函式

y = ae^bx或y = ae^(b/x)

冪函式

y=ax^b (a>0)

雙曲線函式

y = a+b/x

求解迴歸係數

對迴歸係數方差分析檢驗、t檢驗

最終確定建立的資料模型: Y = a +bX ...

library(ggplot2)
library(Hmisc)
library(corrplot)
library(lmtest)
library(psych)

##1、 讀取資料
data = read.table("ad_result.txt", header = T, sep = "\t", row.names = 1)
head(data,4)

##2、探索資料,首先確認相關性:
##  計算其相關性係數並可視化
ress = cor(data)   ## 範圍【-1, 1】 =0 不相關, > 0 正相關, < 0 負相關
ress.p <- rcorr(as.matrix(data))$P ## 相關性係數的檢驗 < 0.05 閾值 
corrplot(ress, type = "upper", order = "hclust", tl.col = "black", tl.srt = 45)  ## 相關係數矩陣視覺化
pairs.panels(data)    ## 散點圖矩陣 視覺化



### 3、基於資料訓練模型, 選擇迴歸模型 (這裡用lm() lm(formula = y ~ x1 + x2 + ...))

fm.model = lm(install ~ tvcm + magazine, data)
as.data.frame(fm.model$coefficients)




## 4 、評估模型,對迴歸係數方差分析檢驗、t檢驗
anova(fm.model)

summary(fm.model)

#Residuals殘差也就是預測值和實際值之差,我們將殘差的分佈用四分位數的方式表示出來,就可以據此來判斷是否存在較大的偏差。

#Coefficients 這裡是與預估的常數項和斜率相關的內容。每行內容都按照預估值、標準誤差、t 值、p 值的順序給出。我們可以由此得知各個屬性的斜率是多少,以及是否具有統計學意義。

#Multiple R-squared、Adjusted R-squared 判定係數越接近於1,表示模型擬合得越好。


## 5、優化模型,用殘差分析剔除異常點 檢驗異方差
plot(fm.model,which=1:4)
data.re = data[-c(1,2,10),]
fm.model1 =  lm(install ~ tvcm + magazine, data.re)
summary(fm.model1)
gq.p = gqtest(fm.model1)
bp.p = bptest(fm.model1)


## 如果gq.p || bp.p 小於0.05,需要進行修正異方差
lm.test2 = lm(log(resid(fm.model1)^2)~ tvcm + magazine,data.re)
lm.test3<-lm(install ~ tvcm + magazine,weights=1/exp(fitted(lm.test2)),data.re)
summary(lm.test3)



## 最後建立模型:
新使用者數= 1.361× 電視廣告費+ 7.250× 雜誌廣告費+ 188.174

 

 

 

 

PS: 參考線上資料

https://blog.csdn.net/Cocaine_bai/article/details/80534313

https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/79544739

理解彙總