原文标题:Code for my educational gifs

作者:Rafael Irizarry

翻译:贾琳

php写动图独家|哈释教授公开R说话源码教你用R制造gif动图 Vue.js

本文长度为1800字,建议阅读4分钟

Rafael Irizarry是哈佛大学以及the Dana-Farber Cancer Institute的运用统计教授,他专注于研究基因组学,并且教授数门数据科学课程。
在本文中他公开了自己授课时所利用的gif动图的R措辞源码,同时也对涉及的几个话题进行了大略的论述,对付希望理解数据科学事理、如何利用R措辞来进行可视化的读者都有所助益。

在日常传授教化的过程中,我有时会用动画来形象地阐明观点,并且通过 @rafalab账号(https://twitter.com/rafalab)在社交媒体上分享。

John Storey最近问我是否可以公开这些源代码
由于我不甚有条理,而且这些动画都是灵机一动想出来的,以是之前这些代码分散在几个不干系联的文件中。
John的要求匆匆使我把这些代码整理在一起发布在这里。

所有的gif动图都是用R措辞绘制的数张图片的叠加。
在代码中你可以创造,我用几种不同的方法将单独的图片转化成动态gif图。
第一种方法(不推举)是将图片文件存储下来,然后调用ImageMagick转化工具(https://www.imagemagick.org/script/index.php)。
在R环境下,我现在利用的方法是animation包的saveGIF函数,这是通过读者Yihui Xie在我simplystats博客下面的评论学习到的。
当用ggplot画图时,我会利用David Robinson的gganimate包(https://github.com/dgrtwo/gganimate)。
末了一种方法是我在加殊效(例如调相)时会用到的:在线Animated GIF maker(https://ezgif.com/maker)。

以下便是这些gif动图的源代码,我大致按盛行程度排序。
由于代码是很焦急写出来的,请不要过于苛责我。
事实上,你可以随意批驳,这便是我们学习的办法。

辛普森悖论

这张gif阐述的是辛普森悖论:我们看到X变量和Y变量有很强的负干系关系。
不过,一旦我们用一个殽杂成分Z变量进行分层,用不同颜色来表示Z,每一层中的干系性就会转化为正干系。
这里的数据是虚构的,不过假设说X代表学生参加辅导的次数,Y代表九年级的测验分数,然后再用八年级的测验分数Z来对学生进行分层,我们也会创造这样的征象。

这张动图仅用三张图片组成。
我用RStudio的Export功能将它们把存下来,然后用Animated GIF maker(https://ezgif.com/maker)来制作gif。
以下是这三张图片的代码:

局部加权回归散点平滑法(Loess)

我分享的第一个传授教化动图是为理解释局部加权回归散点平滑法(Loess)的事理。
详细来说,我们对付每一个自变量,比如x0,都让其对任何一个附近点有正的加权值,用加权回归拟合一条线,保留经由拟合所得的结果,然后移动向下一个点。

这里的数据来源是某个基因芯片实验。
图中所示的是MA图,即比例对数与对数均匀值之间的关系。
我用animation包来保存gif动图。

预期寿命 vs 生养率

这个gif动图是复制Hans Rosling (https://en.wikipedia.org/wiki/ Hans_Rosling)在他的演讲“关于贫穷的新创造”(New Insights on Poverty,(https://www.ted.com/talks/ hans_rosling_reveals_new_insights_on_poverty?language=en))中展示的动画。
该图很好地展现出数据可视化在肃清误解方面的浸染,Hans Rosling通过这张动图展示了如今并不如40年前一样能够大略将天下划分成两半。
之前,人们一样平常把天下分为拥有更龟龄命、较少家庭人口的西方富有国家和较短寿命、较多家庭人口的发展中国家,而这个图向我们展示了这种划分的不合理性。

感谢gganimate包,画这个图利用的代码非常大略。

联合国选举模式

这里,我们利用Erik Voeten和Anton Strezhnev供应的联合国选举数据来阐释间隔的观点。

以下是代码。
整理数据的代码是由David Robinson(https://twitter.com/drob)供应的。
你会看到我们将随韶光变革的间隔进行了平滑处理,从而避免一些点跳动范围过大。

随机森林

在过去的很长一段韶光里,我都以为很难明得为何随机森林作为一种基于树的算法,却能够产生平滑的预测。
这里的gif图帮助我理解了缘故原由。
我用的是2008年总统选举的数据库,由于我认为该数据的趋势总体是平滑的,但是有几个尖锐的边,就连局部加权回归散点平滑法都很难预测。
须要把稳的是,我们只有一个影响成分,这个gif并不能展示出随机森林的另一个主要特点:随机的特色选取可以减少树与树之间的干系程度。

你可以看到我在代码中利用的办法是传统的、我并不推举的办法:保存所有的图片文件然后调用系统指令转化。

生态谬误

在分享辛普森悖论的动图往后,有些人问我生态谬误是不是相同的情形。
实在这二者是不同的。
生态谬误是我们试图通过均匀值的强干系性来推断个体之间的干系性。
为了更好的阐明,我用dslabs包中自带的gapminder的数据(http://gapminder.org/)画出了一个动图,展示新生儿存活率的对数与日均收入的对数之间的关系。
可以看到在地区层面上二者干系度很高,但在各个国家层面上干系度很低。
这是由于同一地区国家与国家之间的差异导致的。

动图

这张gif只由三张图构成。
我用RStudio的Export功能保存图片,然后用Animated GIF maker(https://ezgif.com/maker)来制作gif。

第一张图是地区均匀值;撒哈拉以南非洲国家的数值,你可以看到一个均匀值被分成数个不同的数值;第三张是所有国家的情形。
我标出了一些(与本地区比较)变革较大的国家,并且用了色盲也能识别的颜色。
这里的代码有些繁芜,缘故原由是我不得不对Gapminder数据进行预处理。

贝叶斯定律

这个大略的动图展示的是将一种非常准确的诊断方法运用于一个发病率很低的群体的诊断结果。
它展示出来的是,在已知诊断结果是阳性的情形下发病的先验概率,比该诊断方法的初试准确率要低。
你可以用贝叶斯定律来确定真实的条件概率。
更多细节请参考这里(https://simplystatistics.org/2014/10/17/bayes-rule-in-a-gif/)。

动图

由于我们要做动态图,代码有一些繁芜难懂。

吃豆子

末了,我做了这个动画,向你们展示饼图唯一的用途。

动图

原文链接:

https://simplystatistics.org/2017/08/08/code-for-my-educational-gifs/

编辑:黄继彦

更多精彩请关注清华-青岛数据科学研究院微信官方公众年夜众平台\公众THU数据派“