用直线回归法进行相关性分析是最常用的方法之一,以下例子是R进行简单的二元直线回归法分析两个变量之间的相关性。
#二元直线回归分析
#http://shujuren.org/article/138.html
#http://datascienceplus.com/bivariate-linear-regression/
data(swiss) #将数据引入工作区域
View(swiss)
summary(swiss) #观察汇总值
plot(swiss) #观察总的相总性
plot(swiss$Fertility~swiss$Education) #散点图
#其~符号可以理解成“在这里进行回归分析
#lm(formula,data)标准线性模型
reg<-lm(Fertility~Education,swiss) #线性回归
reg #返回两个结果
#call-->用回归分析估计模型
#Coefficients-->Intercept:截距,斜率(相关系数)
summary(reg) #用summary显示细节
#$latex R^2$就是自变量与因变量之间的皮尔森相关系数的平方的多重相关平方
#检验
summary(reg)$r.squared #显示相关系数
cor(swiss$Fertility,swiss$Education)^2
summary(reg)$r.squared==cor(swiss$Fertility,swiss$Education)^2 #是否相等
#将回归直线加入散点图
plot(swiss$Fertility~swiss$Education) #散点图
abline(reg) #直线
#write.csv(swiss,"swiss.csv") #数据输出
#皮尔森相关系数
#https://zh.wikipedia.org/wiki/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%A7%AF%E7%9F%A9%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0
#r=sum[(Xi-X)*(Yi-Y)]/sqr(sum((Xi-X)^2))*sqr(sum((Yi-Y)^2))
PPMCC<-swiss #数据导入
med_X<-mean(PPMCC$Fertility) #X平均值
med_Y<-mean(PPMCC$Education) #Y平均值
PPMCC$Xi_X<-PPMCC$Fertility-med_X #Xi-X
PPMCC$Yi_Y<-PPMCC$Education-med_Y #Yi-Y
PPMCC$XY<-PPMCC$Xi_X*PPMCC$Yi_Y #(Xi-X)*(Yi-Y)
PPMCC$X2<-PPMCC$Xi_X^2 #(Xi-X)^2
PPMCC$Y2<-PPMCC$Yi_Y^2 #(Yi-Y)^2
sum_X2<-sum(PPMCC$X2) #sum((Xi-X)^2)
sum_Y2<-sum(PPMCC$Y2) #sum((Yi-Y)^2)
r<-sum(PPMCC$XY)/(sqrt(sum_X2)*sqrt(sum_Y2)) #相关系数
r
cor(swiss$Fertility,swiss$Education) #R函数cor计算的相关系数