getwd()
#回归分析
#回归分析是统计学的核心 y~x,用x预测y,用解释变量来预测响应变量
#有效的回归分析本就是一个交互的,整体的,多步骤的过程,而不仅仅是一点技巧
#x:一个或多个预测变量(自变量或解释变量)
#y:响应变量,因变量,校标变量或者结果变量
#简单线性回归
#当回归模型中包含一个因变量和一个自变量时,我们称为简单线性回归
#myfit <- lm(formula,data)
#formula : Y ~x1+x2+x3+.....,左边为响应变量,右边为解释变量,多个解释变量之间以+连接
#data : 用于拟合模型的数据
#y~x+z+x:z :要通过x,z,以及x与z的交互项来预测y
#y~x*z*w :所有可能交互项的简洁方式,可展开为y~x+z+w+x:z+x:w+z:w+x:z:w,一阶+二阶+三阶
#y~(x+z+w)^2 :表示交互项达到某个次数,可展开为y~x+z+w+x:z+x:w+z:w,仅包含一阶+二阶
#y~.:表示除因变量外的所有变量,假如数据框中包含y,x,z,w,则y~.等价于y~x+z+w,仅包含一阶
#y~(x+z+w)^2-x:w :表示从等式中移除某个变量,可展开为y~x+z+w+x:z+z:w+x:z:w
#y~x-1 :删除截距项,拟合y在x上的回归,并强制直线通过远点
#I():用算术的角度来解释括号中的元素
# I((z+w)^2) 等价于 z+w+z:w
# y~x+I((z+w)^2) 等价于 y~x+z+w+z:w
#funciton
#log(y)~x+z+w:通过x,z,w来预测log(y)
fit <- lm(weight~height,data=women)
summary(fit) #展示拟合模型的详细结果
#Pr(>|t|) height对应1.09e-14 ***,回归系数t检验不显著为0,有效变量前系数
#Multiple R-squared: 0.991,表明模型可以解释体重99.1%的方差
#y实际值与y预测值之间相关系数的平方
#1.53 lbs则可认为是模型用height来预测weight的平均误差
#Residual standard error: 1.525 on 13 degrees of freedom
#F统计量检验所有的预测变量是否都在某个几率水平之上,由于简单回归
#只有一个预测变量,此处F检验等同于height回归系数的t检验
fitted(fit) #基于模型,返回预测值
coefficients(fit) #列出拟合模型参数
#(Intercept) 对应截距项
#height 自变量height前的系数,斜率
confint(fit) #提供模型参数的置信区间,默认为95%
#截距:(-100.342655 -74.690679)
#斜率: (3.253112 3.646888)
women$weight #查看实际y值
residuals(fit) #列出拟合模型的残差值(实际值-预测值)
#115-112.5833=2.41666667
plot(women$height,women$weight,
xlab="Height (in inches)",
ylab="Weight (in inches)"
) #画散点图
abline(fit) #追加回归线,height值,模型返回的y预测值
#图形表明,可以用含一个弯曲的曲线来提高预测的精度;
#多项式回归
#当只有一个预测变量,一个响应变量,并且为n阶多项式
fit2 <- lm(weight~height+I(height^2),data=women)
summary(fit2)
plot(women$height,women$weight,
xlab="Height (in inches)",
ylab="Weight (in inches)"
) #画散点图
# abline(fit2) 报错只用两个3回归系数中的第一个,画回归线失败
lines(women$height,fitted(fit2)) #根据height,以及多项式模型返回的预测值
#结论:t检验反馈回归系数都显著不为零,Multiple R-squared: 0.9995>Multiple R-squared: 0.991
#从图形看,曲线拟合的更好
#尝试三次多项式
fit3 <- lm(weight~height+I(height^2)+I(height^3),data=women)
library(carData)
library(car)
#散点图
#直线为线性拟合
#虚线为曲线平滑拟合
#边界为箱线图
scatterplot(weight~height,data=women,
spread=FALSE,smoother.args=list(lty=2),pch=19,
main="Women Age 30-39",
xlab="Height (inches)",
ylab="Weight (lbs.)"
)#曲线经过的实心点比直线经过的实心点更多,拟合的更好
#多元线性回归
#用两个或多个量化的解释变量预测一个量化的响应变量
#检测二变量关系
states <- as.data.frame(state.x77[,c("Murder","Population",
"Illiteracy","Income","Frost")]) #选取指定列
cor(states) #计算相关系数矩阵
library(carData)
library(car)
#非对角线的区域绘制变量间的的散点图,并添加平滑和线性拟合曲线
#对角线区域绘制每一个变量的密度图和轴须图
#纵坐标参考行变量名,横坐标参考列变量名
#对应第一行图,纵轴全为Murder
#Murder与Population正相关(0.3436428),Murder与Illiteracy正相关(0.7029752)
#Murder与Income负相关(-0.2300776),Murder与Frost负相关(-0.5388834)
scatterplotMatrix(states,spread=FALSE,smoother.args=list(lty=2),
main="Scatter Plot Matrix")
#多元线性回归
class(state.x77) #返回"matrix"类型
states <- as.data.frame(state.x77[,c("Murder","Population",
"Illiteracy","Income","Frost")])#选取指定列,强制转换成dataframe
fit4 <- lm(Murder ~ Population + Illiteracy + Income + Frost,data=states)
#当预测变量不止一个时,回归系数的含义为:一个预测变量增加一个单位,其他预测变量保持不变时
#因变量将要增加的数量;
#Illiteracy的回归系数4.143e+00=4.143*e^0=4.143
#表示控制人口,收入和温度不变时,文盲率上升1%,谋杀率将会上升4.14%
#Pr(>|t|)
#Frost 的系数p=0.9541,p>,无法拒绝原假设,此相关系数显著等于=0
#表明Forst与Murder不呈现线性相关
#Multiple R-squared: 0.567,所有预测变量解释了各州谋杀率的57%的方差
summary(fit4)
#Illiteracy改变1%,Murder的95%的置信区间为[2.38,5.90]中变化
#Frost改变1%,Murder的95%的置信区间为[-1.966781e-02,0.0208304170]中变化
#其置信区间包含0,表示当其他变量不变时,温度的改变与谋杀率无关
#你对这些结果的信念,都只建立在你的数据满足统计假设的前提之上
confint(fit4)
#有显著交互项的多元线性回归
fit <- lm(mpg~hp+wt+hp:wt,data=mtcars) #
#hp:wt交互项的系数对应p=0.000811,p<显著性,拒绝原假设,接受备泽假设,显著不为零
#如两个预测变量的交互项显著,说明响应变量与其中一个预测变量的关系依赖于另外一个预测变量的
#水平,因此此例说明,每加仑汽油行驶英里数与汽车马力的关系依车重不同而不同
summary(fit)
#plot(effect(term,mod,,xlevels),multiline=TRUE)
#term 即模型要画的项
#mod 为通过lm()拟合的模型
#xlevels 是一个列表,指定变量要设定的常量值
#multiline=TRUE,选项表示添加相应直线
library(effects)
#hp*wt的交互项图形。图形展示了wt三种值时mpg和hp的关系
plot(effect("hp:wt",fit,,list(wt=c(2.2,3.2,4.2))),multiline=TRUE)
#执行过程直接报错
#Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) :
#invalid graphics state
#解决方法,运行dev.off(),然后重新画图
#回归诊断
#标准的方