search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

獨家 | 哈佛教授公開R語言源碼,教你用R製作gif動圖

本文長度為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 makerhttps://ezgif.com/maker

以下就是這些gif動圖的源代碼,我大致按流行程度排序。因為代碼是很著急寫出來的,請不要過於苛責我。事實上,你可以隨意批判,這就是我們學習的方式。

辛普森悖論

這張gif闡述的是辛普森悖論:我們看到X變數和Y變數有很強的負相關關係。不過,一旦我們用一個混雜因素Z變數進行分層,用不同顏色來表示Z,每一層中的相關性就會轉化為正相關。這裡的數據是虛構的,不過假設說X代表學生參加輔導的次數,Y代表九年級的測驗分數,然後再用八年級的測驗分數Z來對學生進行分層,我們也會發現這樣的現象。

這張動圖僅用三張圖片組成。我用RStudio的Export功能將它們把存下來,然後用Animated GIF makerhttps://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 makerhttps://ezgif.com/maker來製作gif。

第一張圖是地區平均值;撒哈拉以南非洲國家的數值,你可以看到一個平均值被分成數個不同的數值;第三張是所有國家的情況。我標出了一些(與本地區相比)變化較大的國家,並且用了色盲也能識別的顏色。這裡的代碼有些複雜,原因是我不得不對Gapminder數據進行預處理。

貝葉斯定律

這個簡單的動圖展示的是將一種非常準確的診斷方法應用於一個發病率很低的群體的診斷結果。它展示出來的是,在已知診斷結果是陽性的情況下發病的先驗概率,比該診斷方法的初試準確率要低。你可以用貝葉斯定律來確定真實的條件概率。更多細節請參考這裡https://simplystatistics.org/2014/10/17/bayes-rule-in-a-gif/)

因為我們要做動態圖,代碼有一些複雜難懂。

吃豆子

最後,我做了這個動畫,向你們展示餅圖唯一的用處。

賈琳,清華大學2012級大學部畢業生,現就讀於美國達特茅斯學院工程管理碩士專業。愛好數據分析、數據科學,期待在數據派THU這個平台上向更多 志同道合的朋友學習和交流。

翻譯組招募信息

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是數據科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於數據科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯繫,THU數據派產學研的背景為志願者帶來好的發展機遇。

其他福利:來自於名企的數據科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。

為保證發文質量、樹立口碑,數據派現設立「錯別字基金」,鼓勵讀者積極糾錯

若您在閱讀文章過程中發現任何錯誤,請在文末留言,或到後台反饋,經小編確認后,數據派將向檢舉讀者發8.8元紅包

同一位讀者指出同一篇文章多處錯誤,獎金不變。不同讀者指出同一處錯誤,獎勵第一位讀者。

感謝一直以來您的關注和支持,希望您能夠監督數據派產出更加高質的內容。

轉載須知

如需轉載文章,請做到 1、正文前標示:轉自數據派THU(ID:DatapiTHU);2、文章結尾處附上數據派二維碼。

申請轉載,請發送郵件至[email protected]

點擊「閱讀原文」報名



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦