多元相关分析与回归分析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

理解汇总

猜你喜欢

转载自blog.csdn.net/rojyang/article/details/84617863