简单线性回归
library(ISLR) library(class) library(MASS) fix(Boston) #弹出数据编辑器 names(Boston)
#基本句法是 lm (y ~ x , data) ,其中y是响应变量,x是预测变量,data是这两个变量所属的数据集。
lm.fit<-lm(medv~lstat,data=Boston) attach (Boston) lm.fit<-lm(medv~lstat) lm.fit
summary(lm.fit)
names(lm.fit) ##用names ()函数找出 lm. fit 中存储的其他信息
confint(lm.fit) #为了得到系数估计值的置信区间,可以使用 cofint ()命令。
#predict ()函数可以计算置信区间和预测区间。 predict(lm.fit,data.frame(lstat=(c(5,10,15))), ineterval="confidence")
predict(lm.fit,data.frame(lstat=(c(5,10,15))), ineterval="prediction")
plot(lstat,medv)
abline(lm.fit) abline(lm.fit,lwd=3) abline(lm.fit,lwd=3,col="red")
plot(lstat,medv,col="red") plot(lstat,medv,pch=20) plot(lstat,medv,pch="+") plot(1:20,1:20,pch=1:20)
#par(mfrow=c(2,2)) plot(lm.fit) #此时会画出四张图 plot(predict(lm.fit), residuals(lm.fit)) #residua1s ()函数计算线性回归拟合的残差
plot(predict(lm.fit), rstudent(lm.fit)) ##函数 rstudent ()可计算学生化残差,我们也可以用这个函数绘制残差对拟合值的散点图。
plot(hatvalues(lm.fit))
which.max(hatvalues(lm.fit)) #which. max ()函数可识别出向量中最大元素的索引,它告诉我们哪个观测具有最大的杠杆统计量。
多元线性回归
lm.fit=lm(medv~lstat+age,data=Boston) summary(lm.fit)
lm.fit=lm(medv~.,data=Boston) summary(lm.fit)
library(car) vif(lm.fit) #vif ()函数是car 包的一部分,可用于计算方差膨胀因子
lm.fit1=lm(medv~.-age,data=Boston) #用除age变量之外的所有其他变量进行回归,age 变量有很高的p 值,所以我们进行不包括年龄变量的回归 summary(lm.fit1)
lm.fit1=update(lm.fit, ~.-age) #或者使用 update ()函数进行除age变量之外的所有其他变量进行回归
交互项
summary(lm(medv~lstat*age,data=Boston)) 解释:#语句 lstat* age lstat age 和交互项 lstat x age 同时作为预测变量,它是 lstat + age + lstat: age 的简写形式。
预测变量的非线性变换
lm.fit2=lm(medv~lstat+I(lstat^2)) #函数 I() 是把x转换成其二次方的标准方法。 summary(lm.fit2)
结果分析:二次项的P值接近零表明它使模型得到了改进。
lm.fit=lm(medv~lstat) anova(lm.fit,lm.fit2) #用 anova ()函数进一步量化二次拟合在何种程度上优于线性拟合
par(mfrow=c(2,2)) plot(lm.fit2)
#要创建一个三次拟合我们可以向模型中加入一个形如I (X^3) 的预测变量,更好的方法是用 po1y ()和 1m ( )函数创建多项式。
lm.fit5=lm(medv~poly(lstat,5)) #创建5阶多项式 summary(lm.fit5)
summary(lm(medv~log(rm),data=Boston)) #使用对数变换
定性预测变量
fix(Carseats) #调出数据编辑器 names(Carseats) #查看数据框的列名
lm.fit=lm(Sales~.+Income:Advertising+Price:Age,data=Carseats) summary(lm.fit) attach(Carseats) contrasts(ShelveLoc) #contrasts ()函数返回R虚拟变量的编码。
解释:#R创建了一个虚拟变量 ShelveLocGood ,如果货架位置好,它的值为1,否则为0, R 还创造了一个虚拟变量 ShelveLocMedium ,如果货架位置属于中等水平,它的值为1 ,否则为0。坏的搁置位置则对应两个虚拟变量均为0。