> library(dplyr)
> bike.cat <- bike %>%
+ select(season:weatherisit) %>%
+ mutate_each(funs(factor))
mutate_each()函数是dplyr程序包提供的对所有列使用同一函数的操作了。由于bike数据中包含的分类变量实际上是数值型,因此这里使用了factor()函数将其转换成因子型。然后把这些变量变成哑变量,哑变量就是将分类变量的各个谁陪你描述成取值为0或1的新变量。实际上,caret程序包的dummyVars()函数可以方便地转换成哑变量。dummyVars()函数会返回含有构成哑变量所需信息的列表,在此基础上,通过predict()函数就可以实际转换成哑变量。
> install.packages("caret")
> library(caret)
> tmp <- dummyVars(~.,data=bike.cat)
> bike.dum <- predict(tmp,bike.cat)
将转换成哑变量的因子型变量,和用于多元回归分析的数值变量通过cbind()函数结合,就可以执行多元回归分析。
> bike <- cbind(select(bike,temp:winspeed,cnt),bike.dum)
> bike.lm.0 <- lm(cnt~.,data=bike01)
> summary(bike.lm.0)
lm()函数的第1个参数cnt~.形式其中点号表示将cnt以外的全部变量用作解释变量。通过summary()函数可以观察分析结果。其中的一些变量实际上可能对预测没有任何作用。为了解决这个问题,需要通过变量选择来指定最合适的解释变量群。可以通过MASS程序包中的stepAIC()函数执行变量选择。
> library(MASS)
> bike.lm.1 <- stepAIC(bike.lm.0)
> bike.lm.1
> summary(bike.lm.1)
绘制残差的直方图以及观测值和预测值的散点图。
>qplot(residuals(bike.lm.1),binwidth=500,
+ color=I("black"),fill=I("grey"))
> qplot(predict(bike.lm.1),bike$cnt)+geom_smooth(method="lm")
下面我们不转换成哑变量,而是用转换成因子型的分类变量作为解释变量来生成数据框。
> bike02 <- cbind(dplyr::select(bike,temp:windspeed,cnt),
+ bike.cat)
> bike02.lm <- lm(cnt~.,data=bike02)
> summary(bike02.lm)
> bike02.lmstep <- stepAIC(bike02.lm)
> summary(bike02.lmstep)