R for data science chap18——模型构建.

2020-06-20  本文已影响0人  陆慕熙

18.2.1 价格与重量

发现质量差的钻石价格更高可能是受混淆变量——carat(钻石重量)的影响

ggplot(diamonds,aes(carat,price))+
  geom_hex(bins=50)

geom_hex()运行必须要有hexbin包。并不报错,只是出不来图,需要自行安装。


image.png

调整数据集再分析

调整数据集:
1、筛选数据集,选取多而集中的部分,这里选取carat <2.5 的97%数据
2、 对连续性变量对数转化——可以使模型变为线性

diamonds2 <- diamonds %>%
  filter(carat<= 2.5) %>%
  mutate(lprice=log2(price),lcarat= log2(carat))

ggplot(diamonds2,aes(lcarat,lprice))+
  geom_hex(bins=50)
image.png

。。。为啥我有个虚线????

拟合模型

mod_diamond <- lm(lprice~lcarat,data = diamonds2)

可视化检查模型:将预测值覆盖在原始数据上

  • 常规的操作是将预测值添加到网格中可视化,这里模型中所用的是对数转换的变量。因此代入预测值时需要反向变换还原对数转换
grid <-  diamonds2 %>%
  data_grid(carat=seq_range(carat,20)) %>%
  mutate(lcarat = log2(carat)) %>%
  add_predictions(mod_diamond,"lprice") %>%
  mutate(price = 2 ^ lprice)

> ggplot(diamonds2,aes(carat,price))+
+   geom_hex(bins=50)+
+   geom_line(data = grid,color="red",size=1)
image.png

检验残差

> diamonds2 <- diamonds2 %>%
+   add_residuals(mod_diamond,"lresid")
  
> ggplot(diamonds2,aes(lcarat,lresid))+
+   geom_hex(bins=50)

> ggplot(diamonds2,aes(cut,lresid)) + geom_boxplot()
> ggplot(diamonds2,aes(color,lresid)) + geom_boxplot()
> ggplot(diamonds2,aes(clarity,lresid)) + geom_boxplot()
image.png image.png image.png image.png

18.2.2 一个更复杂的模型

mod_diamond2 <-  lm(lprice ~ lcarat + color + cut + clarity, data = diamonds2)
> ggplot(grid,aes(cut,pred))+
+   geom_point()
> grid <-  diamonds2 %>%
+   data_grid(cut, .model = mod_diamond2) %>%
+   add_predictions(mod_diamond2)
> grid
> ggplot(grid,aes(cut,pred))+
+   geom_point()
image.png
> diamonds2 <- diamonds2 %>%
+   add_residuals(mod_diamond2,"lresid2")
> 
> ggplot(diamonds2,aes(lcarat,lresid2))+
+   geom_hex(bins=50)
image.png

下面可以检验正常值(resid>2 意味着钻石的加个是预计价格的四倍以上)

(这里typical()得到的结果似乎有问题,导致color计算出的diamonds2与r4ds不一致,解决后再来更新)

上一篇下一篇

猜你喜欢

热点阅读