本章将利用真实的数据集介绍如何循序渐进地介绍模型bin并理解数据。
我们先利用数据可视化找出模型,然后通过模型更加具体而精确地提取出模式。之后再对残差进行分析。
我们将利用ggplot2::diamonds和nycflights13::flights数据集,需要的包如下:
library(tidyverse)
library(modelr)
library(ggplot2)
options(na.action=na.warn)
library(nycflights13)
library(lubridate)
一、为什么质量差的钻石更贵
将数据可视化我们观察到:质量差的钻石(切工差、颜色差、纯度低)具有更高的价格:
> ggplot(diamonds,aes(cut,price))+geom_boxplot()
> ggplot(diamonds,aes(color,price))+geom_boxplot()
D到J颜色等级降低。
> ggplot(diamonds,aes(clarity,price))+geom_boxplot()
I1纯度最差。
造成这个反常现象的原因是由于一个混淆变量的存在:重量。
重量是决定钻石价格最重要的因素,而质量差的钻石往往更重些。
> ggplot(diamonds,aes(carat,price))+geom_point()
通过拟合一个模型来分离出carat变量的作用,才可以更容易看出其他变量的影响。
第一步:数据预处理
1.重点关注carat<2.5的数据,因为那占了绝大部分数据。
2.将carat和price数据进行对数转换,以便更容易看出二者之间的关系。
> diamonds2<-diamonds%>%filter(carat<=2.5)%>%mutate(lprice=log2(price),lcarat=log2(carat))
> ggplot(diamonds2,aes(lcarat,lprice))+geom_point()
第二步:构建模型去除二者之间这种强烈的线性模式
1.拟合一个模型让这种模式变为显式的
#首先按照原始carat的最大最小值构建一个等距的有20个数据的carat向量,之后加入lcarat=log2(carat)这一列&