2016年的奔波和小總結

感謝家人和朋友的支持,成功地度過了2016年,身體還算健康(小腹!),精神稍微飽滿,依舊對於未來有很多的想像,這一年做了很多的轉移,不論是能力上或是生活風格,想靜靜地做些總結。

一直以來,個性都是頗任性的,總是希望可以照者自己的想像來計畫,或是親自去看一看某些好奇的事物,衝動算是每個計畫的出發點,從大學開始這樣,常在自己的巨塔世界中前行(換句話說,常常對沒有興趣的東西沒有興趣),當然,實際體驗過後,總是會加深自己的體會和對現實的認識。另外,也總是努力要擺脫個性裡的弱點和缺陷,希望明年可以再稍稍進一步,稍稍一點都行。

今年大概達成了大部分2016年初的skill sets設定,少數做的不好:
1. 程式語言:摸索了R, Shell, Python, Netlogo,PHP, SQL, 其中R花了頗多時間。
2. 相關技術的熟悉:docker, raspberry pi(造了隻機器兔), vim
3. 數理基礎:機器學習、網絡分析,動態系統模擬、統計(基礎統計、高維統計、量表相關統計)、ODE
4. Coursera的系統生物學課程、基因體資料分析(RNAseq, microarray)
5. Reproducible的習慣(git使用,專案管理)
6. 把自由式游得換氣順暢

2017年的願景
希望2017年能把數理統計和程式語言加深,多做些專案!
1. 程式語言方面:想探索d3.js
2. 數理方面:線性代數、貝式統計、圖論、醫學統計複習
3. 系統生物學相關的網路課程上完,加上broad institute的影片
4. 自由式能練到划兩組換一口氣,設計一份馬拉松相關肌群的重訓菜單
5. 藥物基因體學相關的資料庫探索
6. 寫一本小書彙整這兩年學習到的東西

今年做的事有點雜,很多平衡可以再調整。出發點都是類似的,希望可以做些什麼事情,用科技的力量改變一些醫療的現狀,尤其是對於長者的生活,對於最新的醫療知識如基因體學相關的應用也充滿好奇,想在實務分析中精進,裡頭需要的編程、數學、統計都讓我著迷,而這領域有很多寶山,需要好好地挖掘,話說好奇這個性常常是一體的兩面,像是腦袋中的猴子(可以參考Tim Urban的文章,講得很傳神,雖然他說的是推延分心…但那隻猴子應該可以是很多個性的化身)

2016年給自己的命題是團隊合作,有四個大型的專案,其中三個結果頗不錯,團隊成果在中國和台灣獲獎、美國頂級電腦人機會議發表、在美國開源會議發表、入住台大車庫等等,但有一個團隊合作過程不是那麼順利,卻是自己很揪心的,投入很多,回報很少,那是一個出發點想要改善看護的照護品質,讓家人可以獲得好的照護品質的計畫,歷經一年多的討論籌備,招募了許多看護大姐,快一年的努力,最後退居幕後,夥伴自己來,依照夥伴的想法轉型。

這團隊我一開始就假設好自己的角色了,輔助的角色,因為我覺得夥伴們都是“將軍級的”,每個人都很有主見,但比較少實務做活動或是計畫的經驗,所以希望盡量讓他們能感覺是在領導整個專案前進,而我自己則在幾個點上設計了最後的意見錨點,畢竟缺少實際經驗最常見的事情就是“低估”事情的難度和需要的彈性,另一方面,很多事情在我看來是不需要太執著的(初始的頁面配色、服務費用),而很多事情我看來是重要的價值觀如操守、公司內是否正派地遵守法規、對內的流程是否有建立、財務是否公開、操作細節是否嚴謹,夥伴們剛好都持比較相反的觀點,也讓我比較難操作自己的立場,畢竟所謂海外公司逃稅、uber服務的金流簡單、airbnb可以持者不負租客體驗這些細節,都是“我們以為”可以學習的,但最後皆證明是行不通的,想要建立一個什麼服務品質價格都通包的平台如很多的網購平台,最後也證明不可行,反而是需要專注在高端市場,很可惜的是最後沒有成功說服夥伴,除此之外,我發現自己很重視“儀式”感,比如重要文件要大家親自签,總是不喜歡那種用fax輪者签的方式,但不知道這是否是好的,只是覺得該讓某些事情有其重量。

這合作的過程學到了很多,其中是看到自己的缺點,尤其是溝通上的,因為自己同時有幾個平行計劃在做,所以讓自己分塊分配時間,且盡量在專注時關閉通訊軟體(在不影響重要事情下),這習慣讓夥伴們蠻不高興的,他們習慣隨時保持訊息聯繫,後來仔細思考這件溝通習慣的事情,可能要在團隊組建時就講好。不過關於這事情我還是沒有定論,我還是喜歡專注時不受社交軟件干擾,可能又是那種任性的個性。

在六月初時候,因為開放文化基金會的補助,所以有辦法前往2016UserR會議,去發表自己的poster,這過程認識了開放文化基金會,和他們許多的專案,深深被這種開放精神吸引,也希望有機會可以開發幾個crowdsourcing與醫療健康相關的計劃。

在七月到十月的時候在北京聚道科技實習,也是一個很值得紀錄的美好經驗,身為一個醫療生物資訊科技宅,在那邊遇到很多可以聊這方面的朋友,公司環境很棒,同事都很積極正向和照顧人,這邊有心得,很值得書寫,在北京住的這幾個月也深刻體會北京生活的不易,不論是空氣或是交通等,但卻是一個看得出生命力的地方。

這一年除了專案上的奔波,剩餘的時間幾乎都鑽入喜歡的領域,閱讀和學習,真的頗有趣的,尤其是真的把雙手弄髒之後,另一方面,也發現這領域的經歷需要時間來積累,不簡單,需要一點grit。加油!雖然大腦快轉化成純理工腦,但還是提醒自己要保持一絲感性。

在dplyr的pipe中,在mutate裡使用cut來將連續變數依據區間分塊,形成新的變數

     本來在dplyr的函數中是不支持cut函數的(cut為R base函數),但將連續變數依照特定區間分塊貼標籤這使用場景太常見了,要把班上成績,依據80,85,90分別給予C,B,A等操作,且在stackover可以看到非常多類似的問題如下:
Create column with grouped values based on another colum

R dplyr – categorize numeric variable with mutate

Is cut() style binning available in dplyr?

cut function not working in dplyr, but works outside

applying cut within dplyr

screenshot.png

cars %>% mutate(type = cut(speed,c(0,15,30),c("slow","fast")))

screenshot.png

Claritas Mind Science 新型態的戒斷服務:Craving to Quit

最近Health Innovation Media剛好在關注Exponential Med 2016 會議,幾乎每天都會推出訪問參與會議裡的參與者,分享他們在醫療行業裡的經驗、看法,或是介紹自己的創業項目,非常有趣,Exponential Med會議算是由Peter Diamandis所發起的,從他那本BOLD書籍,便開始鼓吹追求所謂的指數型創新,而XMed 2016便是其中一個專注在談所謂醫療領域指數型創新的會議。

screenshot.png

聽到一個蠻有趣且貼近身活的創新服務,叫Craving to Quit,幫助人們在手機軟體的輔助下搭配認知科學,來幫忙改正一些習慣,並且讓人意識到自己在做什麼,這是由Claritas Mind Science公司所推出的產品,為精神科醫師Judson Brewer所創辦的,Judson Brewer本身是University of Massachusetts School of Medicine裡正念中心的負責人和教授,這套方法算是裡用他的研究成果所發展出來的,所以具有一定的科學嚴謹性,他在TED有介紹過它整個概念:
https://embed.ted.com/talks/judson_brewer_a_simple_way_to_break_a_bad_habit

其強調在於利用認知和習慣養成的循環,來重新塑造一個人的某種特定習慣,戒菸就是一個困擾很多人的目標,所以初期他便藉由這套方法來幫助想戒菸的人。

 

Jules Berman新書:Data Simplification,直指“大數據”時代的關鍵,簡化複雜才能讓科學再次進步

screenshot.png
screenshot.png

Jules Berman師的新書Data Simplification今年三月出版,是一本我覺得觀點和格局很大的書,幾個月前已把它放入閱讀清單,但最近才好好從第一張開始閱讀,在經歷“台灣醫學論文退稿事件”和多幾個月的閱歷,才慢慢懂作者抱持的論點和書名是如此的“出淤泥而不染”,看者這一兩年的商業書都在強調大數據、智能時代,搬出越複雜的數據和模型越讓人覺得書中談的東西很重要,反之,這本書開頭談的是數據的“簡化(simplification)”,要是沒有實際主持或是處理這些醫療大數據的人,可能無法懂這其中的高度,作者本身在醫療數據領域已經打滾很久,從MIT 主修數學和地球科學到後來成為病理科醫師,並且主持多項NIH關於醫療資訊的項目,不論是出版perl、python、ruby編程書到許多關於醫療數據的“大書”,想必這個主題是他三四十年來在美國醫療資訊歷練想提出來的觀點。

Make everything as simple as possible, but not simpler.     _ Albert Einstein

本書開頭談為何simple這件事很重要,其中點出幾個觀察:

  1. 科學的本質是追求簡潔
  2. 生命系統某種層面也是在追求簡化,為達到穩定,演化是其中很明顯生命體間簡化的例子
  3. 如此研究論文的產量雖然不斷增加,但這幾年發現有很大部分都是無法被重複的
  4. 醫學研究所產生的數據量開始進入到另一個層次,讓研究變得異常複雜
  5. 臨床診斷的複雜度同時在升高,各式各樣新的診斷資訊不斷加入,發展複雜醫療資訊輔助系統的方向近幾年都以失敗告終,是否暗示重點在於簡化系統,而非逐漸繁繁複醫療資訊系統

這本書撰寫的風格非常嚴謹,寫作風格也是很簡潔,不會追求堆砌高深的字句,反而選字都很精準,閱讀起來很享受。其中的觀察,可以讓年輕的科學家比較能知道所謂的“知識爆炸”這件事情其實意味者我們遇到了所謂的complexity barrier,代表者我們需要改變原本在收集產生資料以及做研究的一些mind set。書中提到一個NIH失敗的案子,歷時十年,但最後案子效果不好(應該是內部人的觀點,從網路上查詢,都是比較“好”的一面,比較難看到真實的結果),叫做CaBIG,當初便是為了能讓癌症研究的所有成果資料可以共享,另一個失敗的案則是發生在英國NHS,同樣政府投資了大量的金錢,想要發展出一套複雜嚴謹的架構來處理醫療研究資料的共享問題。

這是一個很好的謹惕,追求簡潔是一個很重要的態度,雖然人們往往希望把東西搞得越複雜越好,因為看起來比較厲害,不過….這樣只是增加失敗機率。

書中提到另一個很棒的觀念是,處理資料的重點有兩個:

1. 在分析前簡化資料
2. 假設一開始的分析總是錯的,所以當下的分析處理目的是為了再次分析這筆資料前所奠定的基礎

Jules Berman的部落格

關於巨量資料處理的原則

Berman J.J. Principles of big data: preparing, sharing, and analyzing complex information. Burlington, MA: Morgan Kaufmann; 2013.

美國NIH caBIG 項目

 Kappelman L.A., McKeeman R., Lixuan Zhang L. Early warning signs of IT project failure: the dominant dozen. Inf Syst Manag. 2006;23:31–36.

Arquilla J. The Pentagon’s biggest boondoggles. The New York Times (Opinion Pages), March 12, 2011.

 Van Pelt M. IT governance in federal project management. George Mason University, Fairfax, Virginia, December 8, 2009.

Brooks F.P. No silver bullet: essence and accidents of software engineering. Computer. 1987;20:10–19.

Basili V.R., Perricone B.T. Software errors and complexity: an empirical investigation. Commun ACM. 1984;27:556–563.

 The ComputerWorld honors program case study. Available from: http://www.cwhonors.org/case_studies/NationalCancerInstitute.pdf [accessed 31.08.12].

 An assessment of the impact of the NCI cancer Biomedical Informatics Grid (caBIG). Report of the Board of Scientific Advisors Ad Hoc Working Group, National Cancer Institute, March, 2011.

Komatsoulis GA. Program announcement to the CaBIG community. National Cancer Institute. https://cabig.nci.nih.gov/program_announcement [accessed 31.08.12].

Smith B. caBIG has another fundamental problem: it relies on “incoherent" messaging standard. Cancer Lett. 2011;37(16).

英國NHS health information system

Lohr S. Lessons from Britain’s health information technology fiasco. The New York Times, September 27, 2011.

Dismantling the NHS national programme for IT. Department of Health Media Centre Press Release, September 22, 2011. Available from: http://mediacentre.dh.gov.uk/2011/09/22/dismantling-the-nhs-national-programme-for-it/ [accessed 12.06.12].

 Whittaker Z. UK’s delayed national health IT programme officially scrapped. ZDNet, September 22, 2011.

Robinson D, Paul Frosdick P, Briscoe E. HL7 Version 3: an impact assessment. NHS Information Authority, March 23, 2001.

關於如何發展好的系統來處理複雜問題

Leveson N.G. A new approach to system safety engineering. Self-published ebook; 2002.

Leveson N. Medical devices: the Therac-25. In: Leveson N., ed. Appendix A in ‘Safeware: system safety and computers’. Reading: Addison-Wesley; 1995.

Leveson NG. Engineering a safer world. System safety for the 21st century. Self-published book, 2009. Available from: http://sunnyday.mit.edu/book2.pdf [accessed 12.10.09].

Asimov I. Isaac Asimov Mulls “How do people get new ideas?" MIT Technology Review, October 20, 2014.

探索資料庫應用(一):美國NIH LINCS(Library of Integrated Network-based Cellular Signature)計劃

要建立一個生物調控網絡,需要許多資料,來確認每個網絡中節點間的關係,好在近五年來開始有許多計劃在收集相關的資料,NIH LINCS(Library of Integraded Network-based Cellular Signature)便是美國NIH旨在建立各種細胞株在不同擾動情況下(藥物、小分子、基因剔除、cas9 system),細胞內在分子層面的整體變化,雖然我們總是把生物體內各種重要代謝或是功能,使用某個pathway來代表這整個過程的keyholder,但實際上每個pathway上的分子很多都有重複或是交集,這種交集的網絡關係,便必須有更好的方式來探索。

於是圍繞者NIH LINCS計畫產生很多的研究成果和數據,可以由以下的地圖來一窺這計畫相關的機構和佈局。screenshot.png

目前這計畫已經到phase II,也就是已經有很多可以使用的資料可以獲取:

screenshot.png

這計畫另外一個重點是開發好用的分析工具來取用這些資料,下面是目前衍生出來的分析工具:
由上而下的排序是工具的熱門使用程度

L1000CDS2
全名是L1000 Characteristic Direction Signature Search ,為Icah School of Medicine at Mount Sinai的Ma’ayan 實驗室所開發,其使用他們新的一套取表現差異的算法Characteristic Direction Approach,依照論文裡跟其他傳統取表現差異方式如t-test, GLM,都有大幅的提升,其方法的特點在於會考慮單一個基因的表現量和其他基因的關係,而非平行的比較後,在使用multiple correction method 來correct p value。

screenshot.png

Drug/Cell-line Browser
這方法其實有點像是使用SOM,也就是除了色塊把表現類似的分類起來,色塊間的距離則表達色塊間的相似度,目前似乎有點問題,無法正常使用,這也是基於Ma’ayan lab開發出的canvas視覺化clustering的方法

screenshot.png

Drug-Pathway Browser

screenshot.png

這主要是把所有跟 kinase pathway相關的藥物或小分子註解在pathway的圖形上,可以直接點選有興趣的candidate,看起可以用什麼藥物來做抑制。

裡面太多小工具了,但有至少1/2都還在搭建或是微調中,但很多有趣的資料呈現方式可以學習

screenshot.png

 

 

 

深入R語言(二):如何選擇編寫程序的策略來符合不同的計算需求(small, medium, large)

R本身的設計就是為了能讓人可以快速的分析出結果,提供人能快速利用計算機的能力來處理資料,所以R使用起來交互性很好(interactive),讓寫程式(programming)達到計算(computing)目的的隔閡變小,但隨者處理的專案和資料複雜性提高,其中撰寫代碼的策略一定要能有所區別,才能更“有條理”和“恰當時間付出”的達到目標。

在John M. Chambers這本Extending R有談論到這件事情,他提供出以下的建議來區分:

Small

目的在快速測試某個想法可不可行,這時候傾向於發會functional approach的方式來進行

“Perhaps the most important contribution of functional computing in small-scale programming, howere, is our thinking”

這部分的需求恰好是R高交互性最大的優點,但在這個階段還是需要培養好寫Function的習慣,目的是讓探索分析的過程更reproducible和系統性,且讓我們用較小的成本來驗證想法。

Medium

需要撰寫可以重複性使用的代碼,換句話說,這時候完成的程式有其重複性的價值,這時候可以藉由把程式轉換成package來提高整個效益,不可否認的,一個package本身對於架構和細節需要更多的設計心思,但這剛好是medium size的任務最合適的用心架構程度。如Rcpp package或是RStudio的開發環境都有針對如何創建package有很好的支持,相對於在small scale 的程序,在medium階段,需要有以下額外的細節和思考,或是說在搭建package時要思考的項目:

  • 可分享性(Sharing):
    可讓別人下載使用,不論是內網或是整個完全開源使用
  • 良好註解或文檔說明(Documenting):
    針對所寫的程序要有使用者說明
  • 測試(Testing):
    注重代碼的品質,而良好的品質就代表需要有測試代碼來實驗軟件品質(如在R CMD check utility有提供相關的特性,檢查整個package是否能上傳到repository),另外,RUnit package也有提供相關單元特性
  • 依賴性(Importing):
    針對自己所依賴的外部package要非常清楚,最好能清晰他們的源代碼,且定期追蹤,不過目前有些不錯的工具可以提供解決這個問題
    函數編成特性(Functionality):
    這邊指得是是否可以把package裡面所撰寫的函數很好的利用R所能提供的函數編成(functional programming)的特性
  • 物件導向設計(Object-oriented programming):
    在演進到medium的層級,要處理的資料特性通常複雜化,利用OOP的架構創建相關的class和處理方式,可以相對有效的降低使用上的複雜性。想起到C++大師Bjarne Stroustrup說的:

Complexity will go somewhere: if not the language then the application code.

Large

整個程式為了要完成一個專案而存在,且裡頭可能要處理多樣性的計算,通常是為了滿足整個機構或是特定族群的計算需求,到了這個層級其實通常很少有專案可以使用單一種語言來解決複雜多樣的需求,所以感覺John M. Chambers強調的是程式語言和語言之間的interface,如何讓其他語種跟R有很好的串接,或是利用interface就是在large層級的任務需求要思考的,不過這邊似乎正是目前R核心開發者如John M. Chambers在思考的事情。

整體上,這樣的條理區分要花多少精力在思考如何轉寫代碼,在如今越來越多事物都可以藉由寫程式完成更顯得重要,畢竟要懂得如何“精準地”完成要做的事情,而非殺雞用牛刀。

族群基因組學領域的大咖:Jonathan Pritchard

研究厲害的科學家和其發表是成長必要的功夫,在population genomic相關領域中,不得不提到在史丹佛大學的Jonathan Pritchard教授,他們的研究室產出這領域非常重要的研究,他們實驗室同時開發出很多實用的軟體,如StructureSDS(Singleton Density Score), WASP, TreeMIX, CENTIPEDE, Transcriptom Assembler。

在他們實驗室的網站有很詳細的介紹,觀察Jonathan Pritchard的經歷,是在2013年從芝加哥大學被挖角到史丹佛大學,本身求學經驗在大學時候在Pennsylvania State University就讀生物數學,接者在史丹佛大學跟Marcus Feldman讀博士班,博士後則是在牛津大學的統計部門,所以其本身數理背景非常不錯,在如今處理幾百上千簡體的GWAS實驗設計下,後續分析和處置的卻是要很好的相關基礎。

2016年他們實驗室的產出如下:

Genetic variation in MHC protein is associated with T cell receptor expression biases
Eilon Sharon, Leah V Sibener, Alexis Battle, Hunter B Fraser, K Christopher Garcia & Jonathan K Pritchard., Nature Genetics

RNA splicing is a primary link between genetic variation and disease
Detection of human adaptation during the past 2,000 years
Yair Field, Evan A Boyle, Natalie Telis, Ziyue Gao, Kyle J Gaulton, David Golan, Loic Yengo, Ghislain Rocheleau, Philippe Froguel, Mark I McCarthy, Jonathan K Pritchard

深入R語言Object-Oriented Programming(一):S3, S4, R6, Reference Class

對於想要擁有自己開發R package能力或是參與熱門套件的開發,深入了解R語言Object-Oriented Programming(OOP)的機制非常重要,另外,對於別人寫的package在使用邏輯上會理解更快,也能逆向去看別人如何開發的,尤其是Bioconductor裡面針對生物資訊處理,常常會要有特殊的資料結構,因此會有自己定義的class和object,以及相關的methods,會讓人一開始使用上“搞不清楚作者在想什麼”,但知道這些都是依循R內OOP規則的,就能拆開來去看其怎麼定義的,更深入理解一個別人的package。所以懂R中OOP規則,有兩大幫助:


1. 提升自己開發package的能力。
2. 提升理解別人package的能力。

R語言本身就是“實用性導向”,且快速在演進中,不斷加入更多“電腦科學”的觀念,為了滿足更複雜的計算需求,但相對於資料分析時,我們會比較偏向使用functional programming的方式來思考,在進一步當我們想要打造一些工具幫助別人分析時,使用Object-Oriented Programming就是一個不錯的方式。

在R發展的歷程中,其能使用的範圍越來越廣,工具越來越多,代碼維護上很難以functional programming的方式來做,而面向對象編程則可以解決這類問題,因此衍生出許多OOP系統,像是OOP, R.oo, mutatr, R5, proto等等都是被提出來的面向對象編程系統(值得注意的是目前ggplot2在底層上使用了由proto為基底的ggproto,所以想要自己設計geom/stat的話就必須理解一下他的結構)

目前R中最熱門的OOP系統主要有四種:S3,S4,R6,Reference Class

大致來說S3,S4都是基於的泛型函數(generic function),而R6, Reference Class則是完全面向對象,R6則在建立物件時稍微寬鬆

S3:最基本的系統,幾乎是base R操作中都會用到的概念

使用generic-function Object Oriented風格,並沒有很正式的方式來定義class,也就是說必須從新定義其對於不同class的反應

#S3系統中定義class的方式非常的隨意(arbitrarily),可以直接指定某個物件的class或是用structure()來定義
DNA_sequence <-- structure("ATCG", class = "DNA")
class(DNA_sequence) <-  "DNA"
#當然也可以使用稍微嚴謹的方式,用constructur function
DNA_sequence_constructor <- function(sequence){
 structure(list(sequence = sequence), class = "DNA")
}
#在來於S3中generic methods系統如下操作
count_basepair <- function(x) UseMethod("count_basepair")
count_basepair.dna <- function(x){
   return(nchar(x$sequence))
}
count_basepair(DNA_sequence)
[1] 4

S4:對於理解bioconductor中的很多資料形式會很重要,因為他們主要使用S4來搭建

跟S3風格相似,其有對於class的正式定義,且帶入inheritance和method、generic的概念,另外其具有multiple dispatch,代表generic function可以使用各種class的參數。

#使用S4系統時,用setClass來定義一個class
setClass("DNA",
    slots = list(sequence="character",
                 species="character")
)
#創建屬於某個class的object時,使用new
sample_dna <- new("DNA",
                   sequence="AATCCCGCG",
                   species="homo sapiens")

#S4使用@來subset一個object中的slots
sample_dna@sequence

#使用setGeneric來創建generic function
setGeneric("count_sequence_basepair", function(x){standardGeneric("count_sequence_basepair")})

#創建後,用setMethod來define這function實際的功能
setMethod("count_sequence_basepair",
c(x = "dna"),
function(x){return(nchar(x@sequence)
})

Reference Class:比較新的語法,借鑑了如java,c#等程式的特性

採用message-passing Object-oriented,在區別class、method、function間的關係更嚴謹,而RC object本身是mutable的,且是modified in place。

#Reference Class在定義class時後使用setRefClass(),此時也會定義了這個class所具有的method
DNA <- setRefClass("dna",
                   fields = list(sequence="character",
                                 species="character")
                    methods=list(
                     count_sequence_basepair = function(){
                        return(nchar(sequence))
                     )
)
#創建object的方式
my_sample <- DNA$new(sequence="ATATACGCG", species="homo sapiens")

#使用method的方式
my_sample$count_sequence_basepair()
[1] 9
&lt;span style="color: #000000;"&gt;

觀察不同R裡面OOP系統蠻有趣的,也會發現整個語言的變化,在Reference Class中,可以看到很嚴謹的定義,其實Reference Class蠻強大的,且帶入很多新的觀念,值得再深入研究。

這部分更深入的理解可以看John M. Chambers在2016年新書:Extending R,裡面談了很多這位R core team對於整個R架構的看法,書中的內容可以分成三部分,第一部份講述R的變化,第二部分談R的programming、package、function觀念,第三部分則談論R的Object-Oriented Programming,他把S3,S4歸類為Functional Object-Oriented Programming,而Reference Class這比較新的系統叫做Encapsulated Object-Oriented Programming。最後書裡面提到關於Interface的觀念,主要便是奠基在Reference Class的架構上,能跟其他語言的對接,尤其是Python和Julia。

screenshot.png

除了這本Extending R外, Advance R, Hadley Wickham 中很詳細地談論了OOP system

這邊則有比較零星的討論或是簡報可以看

g:profiler 清爽好用的functional analysis"小"工具

g:profiler 是用來處理gene list後續功能分析的網頁工具,由愛沙尼亞的University of Tartu裡Institute of Computer Science, Bioinformatics, Algorithmics and Data Mining Group BIIT所維護的。在最新的更新中,其加入了轉錄因子結合位點的預測、Mendelian disease注釋、蛋白質表現等新的功能。

他最棒的地方是有很好的API支援,且2016改版過一次,這款軟件從2007年開發出來,所以維持的團隊有一定的經驗,此款軟件也有不錯的引用率,本身也有可搭配Cystoscape的操作方式,可以用R、python來調用他們的服務,另外,不想用他們開發的Python和R工具包來調用服務,他們有服務API,所以操作上可以非常個性化。

screenshot.png

其網頁版本有六大功能(R package:gProfiler只含三個 ):
1. g:GOSt
提供基本的GO enrichment analysis,可以分析自己上傳的gene list,且可同時做Gene Ontology term, reacton, KEGG等資料庫的檢索,輸出資料格式也支援Cytoscape,分析速度快速。喜歡他輸出的GO term有label上depth,這樣可方便後續一些比較仔細的分析。

2. g:Cocoa
提供同時多組gene list的enrichment analysis,並且輸出成方便比較的圖,非常好用。輸出如下圖:
其右邊把所有相比較的組別當作是column,而把每組中有顯著enrichment的term join在一起。

screenshot.png
3. g:Convert
可以用來轉換Gene Id,如microarray 的 probeset也可,且比使用bioconductor中affymetrix出的注釋版本還仔細
4. g:Sorter
可以用來查找在ArrayExpress資料庫中跟特定基因表現相似的其他基因
5. g:Orth
用來查找orthologous gene
6. g:SNPense
從序列ontology來mapping 人類SNP

即使不用網頁介面,在R package下操作幾乎沒有什麼學習成本!

screenshot.png

screenshot.png
參考閱讀:

J. Reimand, T. Arak, P. Adler, L. Kolberg, S. Reisberg, H. Peterson, J. Vilo: g:Profiler — a web server for functional interpretation of gene lists (2016 update) Nucleic Acids Research 2016; doi: 10.1093/nar/gkw199 (PDF, more)

OpenNotes Project:當病患擁有病歷時

在未來醫療The Patient Will See You Now的第七章談到關於推廣病例可及性這件事,讓醫護人員幫病人所做的紀錄能更好更全面的與病患共享是一個醫療趨勢的方向,其提到美國在2010年做的OpenNotes project,這計畫由美國三間醫院(Beth Israel Deaconess Medical Center (BIDMC) in Massachusetts, Geisinger Health System (GHS) in Pennsylvania, Harborview Medical Center (HMC) in Washington.)試行,為期一年的計畫,13564名患者參與,105名第一線醫師參與,在計畫結束時,有99%的患者希望能繼續者種共享病例的方式,直到目前OpenNotes在Robert Wood Johnson Foundation的資助下持續進行者,這邊有他們的網站

screenshot.png

當初大部分的醫師被詢問要不要參加計畫,都抱持者負面的態度,認為這樣會增加臨床負擔,讓病患不必要的焦慮,但後來結果卻讓參與的醫師扭轉看法,不僅醫師在撰寫病歷時更注意用字遣詞,患者變得更加主動配合。

這邊節錄論文的結論,蠻有趣的。最後的統計顯示77-87%(因為是三家醫院)的病患覺得增加對自己醫療的掌控度,60-78%的病患提高服藥的順從度,另外有趣的一點是有59-62%的病患覺得他們應該可以對病歷內容添加評語,在醫師方面,有0-5%的醫師覺得會造成看診時間延長,且醫師也願意在一年結束後繼續這個計畫。