Texas房屋数据

接下来使用txhousing数据集来继续探索建模和可视化之间地联系

txhouisng

这个数据由德州农工大学地房地产研究中心所收集。这个数据集包含了Texas城市的数据,记录了房屋销售量(sales)、总销量(volume)、售价平均值(average)、售价中位数(median)、待售房屋数量(listings)、库存月份长短(inventory)。数据实践跨度是2000年1月到2015年4月,每个月记录一次,每个城市有187条记录
准备探究每一个城市随着时间变化销售数量的变化,因为这个分析展示出一些有趣的趋势,提出了一些有趣的挑战。从概况开始,由每个城市的销售数量组成的时间序列如下:

ggplot(txhousing, aes(date, sales)) +geom_line(aes(group = city), alpha = 1/2)

观察图像的长期趋势有两个难点

  1. 销售数量的范围覆盖了多个量纲。最大的城市Houston平均每个月售出约4000间房屋;而最小的城市San Marcos平均每个月只售出约20间
  2. 有强大的季节趋势:夏季的销售量比冬季的要高得多

可以画出对数变换后的数据来解决第一个问题

ggplot(txhousing, aes(date, log(sales))) +geom_line(aes(group = city), alpha = 1/2)

可以使用移除钻石数据趋势的相同技术来解决这里的第二个问题:拟合线性模型然后观察残差值。这次使用分类自变量来移除月份的影响。首先,对单个城市采用此技术,从而验证其有效性。从简单情形出发总是一个好注意,这样的话发生某些错误的时候可以更加容易地查明问题所在

abilene <- txhousing %>% filter(city == "Abilene")
ggplot(abilene, aes(date, log(sales))) + geom_line()
mod <- lm(log(sales) ~ factor(month), data = abilene)
abilene$rel_sales <- resid(mod)
ggplot(abilene, aes(date, rel_sales)) + geom_line()

可用group_by()和mutate()对每个城市都作出这些变换。注意,lm()使用了na.action = na.exclude 参数。尽管有些违反直觉,但是这些参数确保了缺失的输入值能够和缺失的输出预测值和输出残差对应起来。没有这个参数的话,缺失值会被舍弃掉,残差和输入对应不上

deseas <- function(x, month){resid(lm(x ~ factor(month), na.action = na.exclude))
}
txhousing <- txhousing %>% group_by(city) %>%mutate(rel_sales = deseas(log(sales), month))

利用这组数据,可以重复对此绘图。现在有了对数变换后的数据,移除了强季节趋势,能看到一个明显的模式:2000年到2007年之间稳定地上升,然后下降到2010年(有一些噪声数据),接下来逐步反弹。为了突出这个模式,加了一条汇总曲线,它展示了所有城市的平均相对销量

ggplot(txhousing, aes(date, rel_sales)) +geom_line(aes(group = city), alpha = 1/5) +geom_line(stat = "summary", fun.y = "mean", color = "red")

(注意,移除季节效应的同时也移除了截距——图中每个城市的趋势是相对于它的平均销售数量所说的)

对模型可视化

前一个例子只是把线性模型当作移除趋势的工具:拟合出模型,接着立刻丢掉它。并不关心模型本身,只关心它能干什么。但是模型本身其实涵盖了有用的数据,如果保留着它们的话,可以解决很多新的问题

  • 对模型拟合效果不好的城市感兴趣:一个拟合效果差的模型意味着没有很明显的季节模式。这违背了隐含的设定:每个城市有着类似的模式
  • 系数也可能是有趣的。这个案例里,系数揭示了城市之间季节模式的差异
  • 也许想深入研究模型本身的细节,然后关注它对每个观测值所揭示的信息。对于这个数据集,它也许能帮助找到某些反映了数据录入错误的可疑数据点

为了有效利用这个数据,要保存拟合出来的模型。新的dplyr动词do()可用于这一任务。它帮助把任意的计算结果存储在一列里面。这里使用它来存储线性模型结果

models <- txhousing %>% group_by(city) %>% do(mod = lm(log2(scales) ~ factor(month), data = ., na.action = na.exclude))
models

这段代码有两个重点

  • do()创建了一列数据,列名mod。这一列有着特殊的类型:它并不是像平常一样的存储着基本类型(逻辑值、整数值、数值或字符值)的向量,而是一个列表。列表是R里面最灵活的数据结构,可存储任意东西,包括线性模型
  • .是do()使用到的特殊标记。它用于指代“当前的”数据框。这个例子中,do()拟合了46次模型,每次运算把.换成当前城市的数据

如果对建模比较有经验,也许会好奇为什么没有同时对所有城市拟合单个模型。这是接下来的一大步骤,但简单的起步总是有用的。一旦有了对每个城市都效果良好的模型,就可以搞清楚如何同时扩展到所有的城市上面了
为了可视化这些模型,会把它们转化成整齐的数据框。这里用到David Robinson的broom软件包

library(broom)

Broom提供三个主要动词,每一个对应着上文所述的挑战之一

  • glance()提取模型层次的汇总信息,每行数据对应着每个模型。它包含了R2和自由度之类的汇总统计量
  • tidy()提取系数层次的汇总信息,每行数据对应着每个模型的每个参数。它包含了拟合值和标准误之类的每个系数的信息
  • augment()提取观测层次的汇总信息,每行数据对应着每个模型的每个观测信息。它包含了残差和有助于评估离群值的影响指标之类的变量

ggplot2-为可视化建模2相关推荐

  1. vs2017数据可视化建模_介绍数据可视化社区调查2017

    vs2017数据可视化建模 by lars verspohl 由拉斯·韦斯波尔 介绍数据可视化社区调查2017 (Introducing the Data Visualization Communit ...

  2. 六个最佳的软件工程实践(基于构件的体系结构、可视化建模)

    昨天图文介绍了迭代化开发和需求管理,今天我们介绍基于构件的体系结构和可视化建模.基于构件的体系结构是软件开发中最体现创造力的地方,可以通过"修建桥梁"来理解为什么要贯彻基于构件的体 ...

  3. R语言ggplot2地理信息可视化(下)

    很荣幸,能来北京参加2018年第十一届中国R会议,并在中国人民大学-R语言数据可视化会场作报告. 本次演讲题目:<R语言ggplot2之地理信息可视化>,本次演讲重点讲解R语言基于ggpl ...

  4. R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)

    R语言ggplot2在可视化图像中添加横线并在横线中添加文本.为横线中添加的文本添加文本框.自定义文本框的填充色(background color for a text annotation) 目录

  5. R语言使用hexSticker包将ggplot2包可视化的结果转换为六角图(六角贴、六角形贴纸、ggplot2 plot to hex sticker)、并自定义设置文本的内容、文本对应的字体

    R语言使用hexSticker包将ggplot2包可视化的结果转换为六角图(六角贴.六角形贴纸.ggplot2 plot to hex sticker).并自定义设置文本的内容.文本对应的字体 目录

  6. R语言ggplot2可视化:拟合二次曲线(quadratic curve)并使用ggplot2进行可视化、可视化两个响应变量和一个预测变量的二次曲线

    R语言ggplot2可视化:拟合二次曲线(quadratic curve)并使用ggplot2进行可视化.可视化两个响应变量和一个预测变量的二次曲线 目录

  7. R语言plotly可视化:plotly可视化基本散点图(指定图像类型、模式)、plotly可视化散点图(为不同分组数据配置不同的色彩)、ggplotly使用plotly包呈现ggplot2的可视化结果

    R语言plotly可视化:plotly可视化基本散点图(指定图像类型.模式).plotly可视化散点图(为不同分组数据配置不同的色彩).ggplotly使用plotly包呈现ggplot2的可视化结果 ...

  8. R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战

    R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战 目录

  9. R语言可视化R原生plot函数与ggplot可视化结果组合、整合输出实战:原生R绘图plot函数可视化、ggplot2包可视化、R原生plot函数与ggplot可视化结果组合

    R语言可视化R原生plot函数与ggplot可视化结果组合.整合输出实战:原生R绘图plot函数可视化.ggplot2包可视化.R原生plot函数与ggplot可视化结果组合 目录

  10. R语言ggplot2时间序列可视化并在特定日期处添加竖线实战

    R语言ggplot2时间序列可视化并在特定日期处添加竖线实战 目录 R语言ggplot2时间序列可视化并在特定日期处添加竖线实战 #仿真数据</

最新文章

  1. 从大门看守到贴身保镖服务的安全纵深防御
  2. C#调用浏览器的原理及实现浅析
  3. 渗透测试工作流程渗透测试类型法律边界
  4. python怎么导入txt文件夹-python读取一个目录下所有txt里面的内容方法
  5. 如何在Ubuntu 14.04中使用Samba共享文件
  6. rhel 6下配置网络yum源(虚拟机环境下)
  7. stl中各种容器的自定义比较函数
  8. boost::container模块实现比较的程序
  9. mysql 核心目录
  10. 大型开发项目中 git 工作流的最佳实践
  11. 2018高职计算机474分排名,2018年高职分类考试招生录取分数线出炉
  12. TensorFlow精进之路(十一):反向传播BP
  13. 简单解决网课或教育平台在线学习视频鼠标检测问题
  14. PLC单按钮启停电路与特殊辅助继电器
  15. 使用Ps为图像批量制作水印
  16. Datawhale组队学习周报(第031周)
  17. smith 图中Q值和阻抗匹配
  18. C语言求1到100的和
  19. iPhone软件开发完美起步
  20. 今天介绍一款事半功倍的Maya插件包

热门文章

  1. PSIM仿真+C语言(c block)实现PID控制和最小拍控制
  2. 前端Vue.js框架是什么?有哪些特点?
  3. 空气源热泵如何实现远程集中管理的
  4. jieba库的安装与使用
  5. RSA公钥加密与私钥解密算法
  6. Linux下Oracle 11g安装(2)—— 系统准备篇
  7. Resistors in Parallel(找规律+大数)
  8. svn提交代码到远程服务器
  9. 微信公众号获取微信用户共享收货地址
  10. Arnold材质节点篇- 动态模糊Motion blur