2017年4月26日 星期三

R | Data manipulation: select, filter, mutate, summarise

這裡介紹幾個處理資料的功能:select, filter, mutate, summarise

詳細功能介紹請參考這兩頁:Working with Data - Part 1 & Intro to R - Part 3

練習的部分可以參考 slides: Working with Data - Part 1 (pdf)

這幾個功能在 dplyr 這個 package 裡面,所以要先跑。同時要用內建檔案 mtcars 來練習,所以也要叫出來。

library(dplyr)
mtcars

先介紹定義功能

a <- 6 # 指定 a = 6
a == 7 # a = 7?
[1] FALSE # a = 7 是錯的,因為 a = 6

a!= 7 # Is a not equal to 7?
[1] FALSE


1. Select function: view only some variables

select(mtcars, mpg, wt) # show only mpg and wt
select(mtcars, starts_with("d")) # show row names that start with "d"
select(mtcars, mpg, everything()) # show everything


2. Filter function: choose observations by their values

filter(mtcars, cyl == 8)

filter(mtcars, cyl < 8) # 找出 cyl 小於 8 的
filter(mtcars, cyl == 4 | cyl == 8) # 找出 cyl 是 4 或是 8 的
filter(mtcars, cyl == 8 & carb == 8) # 找出 cyl=8 同時也是 carb=8 的

filter(mtcars, cyl == 4 | carb == 8)
mtcars[mtcars$cyl == 4 | mtcars$carb == 8, ] # 跟上面一樣,但是會出現 row names

df <- filter(mtcars, cyl == 8) # 定義 df 為 cyl 為 8 的物件
select(df, qsec) # 列出 df 裡面的 qsec


3. Slice function

slice(mtcars,c(1,3,5)) # 列出第 1, 3, 5 列的資料

Note: slice and filter do not carry the row names with the subset of rows

filter(tibble::rownames_to_column(mtcars), cyl < 8) # 給 row names
filter(add_rownames(mtcars), cyl == 8, carb == 3)


Exercise 1

找出 mtcars 裡面 qsec 的資料,並把檔案裡第一個 column 的資料(i.e., mpg)指定為 am。

select(mtcars, qsec, am = 1)

找出檔案裡 am 是 1 的,和上面不同的地方是要用 ==。

filter(mtcars, am == 1)

Q1: Extract the 1/4 mile time for cars with manual transmissions (找出檔案裡面 am 是 1 的 qsec 值)

am: transmission (0 = automatic, 1 = manual)
qsec: 1/4 mile time

select(filter(mtcars, am == 1), qsec)

Q2: Extract the qsec for those cars with 5 gears or a manual transmission (找出檔案裡面 am 值是 1 或 gear 值是 5 的 qsec 值)

select(filter(mtcars, gear == 5 | am == 1), qsec)


4. Piping (%>%): used when combining several function call together the command can be very hard to read; 這個 function 需要先 load library(dplyr)

Note: f(x) %>% g(y) is the same as g(f(x),y)

Ex1: Use %>% for Exercise 1 Q1

select(filter(mtcars, am == 1), qsec)
把 mtcars 插入 filter function, 再把 filter 插入 select function

mtcars %>%
   filter(am == 1) %>%
   select(qsec)

Ex2:
as.data.frame(select(filter(add_rownames(mtcars), mpg >= 30), rowname, mpg, cyl, hp))

用 %>% 分句寫

add_rownames(mtcars) %>%
   filter(mpg >= 30) %>%
   select(rowname, mpg, cyl, hp) %>%
   as.data.frame()


5. Arrange function: order observations (rows)

沒特別指令的話會由小到大排列。

Order mpg values from small to large.

arrange(mtcars, mpg)

Use desc() to sort in descending order.
Order mpg from large to small.

arrange(mtcars, desc(mpg))

如果有兩個 variables 的話,會先排第一個,然後再在第一個裡面排第二個的大小順序。

mtcars %>%
   arrange(cyl, carb)

Arrange with cyl first; then within cyl, arrange carb.


Exercise 2

Q: Reorder the mtcars in descending order of mpg and displacement (disp)

mtcars %>%
  arrange(desc(mpg, disp))

或寫成這樣:

mtcars %>%
   arrange(desc(mpg), desc(disp))


6. glimpse function: columns run down the page, and data runs across, making it possible to see every column in a data frame

用資料檔案 nycflights13 練習

library(nycflights13)
dim(flights)

library: need to load library and data first to get functions work
dim: 顯示檔案資料的大小 dimension (row x column)

glimpse(flights)

橫向顯示 column 的數據值


Exercise 3

Q1: elect all flights on January 2, but leave out the date columns.

flights %>%
    filter(month == 1, day == 2) %>%
    select(-year, -month, -day) %>%
    glimpse

沒用 glimpse 的話會顯示成表格

select(filter(flights, month == 1, day == 2), -year, -month, -day)

Q2: Which flights are the most delayed?

flights %>%
  arrange(desc(dep_delay)) %>%
  glimpse

利用 arrange 功能依序排出 dep_delay,最上面那個就是延遲最久的。也可以不用 %>% 和 glimpse 顯示,如下。

arrange(flights, desc(dep_delay))

Q3: Which flights caught up the most time during the flight?

flights %>%
  arrange(desc(dep_delay - arr_delay)) %>%
  glimpse

不用 glimpse 顯示:

arrange(flights, desc(dep_delay - arr_delay))

可以指定 df 為 flights,再帶入 arrange,或是用 head 只顯示前一百個。

df <- flights %>%
  arrange(desc(dep_delay - arr_delay))
head(df$carrier, 100)

也可以這樣:

head(flights$carrier, 100)


7. Mutate: 設定新的 variable

Make new variables: disp_l and wt_kg

新訂的 disp_l 和 wt_kg 會顯示在最後兩的 column。

mtcars %>%
 mutate(disp_l = disp/61.0237,
    wt_kg = wt/2.2)

Include a variable for weight in tonnes (1t = 2,204.6 lbs)

mtcars %>%
  mutate(wt_tones = wt / 2.2046)

transmute: leave only the new variable

只會顯示新訂的 disp_1 和 wt_kg

mtcars %>%
  transmute(disp_l = disp/61.0237, wt_kg = wt/2.2)


8. Summarize

算出 mpg 的平均值

mean(mtcars$mpg)

顯示三個指定的概要

mtcars %>%
  summarise(mean_mpg = mean(mpg),
            med_wt = median(wt),
            ratio = mean_mpg/med_wt)

也可以全部寫在一行

summarise(mtcars, mpg = mean(mpg), wt = median(wt), rat = mpg/wt)


mtcars %>%
  group_by(cyl) %>% # 用 cyl 分組後算各組的 mean_mpg 和 med_wt
  summarise(mean_mpg = mean(mpg), med_wt = median(wt))

mtcars %>%
  group_by(am, cyl) %>% # 先用 am 分組,在再各 am 組別裡用 cyl 分組計算
  summarise(mean_mpg = mean(mpg), med_wt = median(wt))

也可以這樣寫

cars_am_cyl <- mtcars %>%
  group_by(am, cyl) %>%
  summarise(mean_mpg = mean(mpg), med_wt = median(wt))
cars_am_cyl


Exercise 4

Q1: Compute the minimum and maximum displacement for each engine type (vs) by transmission type (am)

mtcars %>%
  group_by(vs, am) %>%
  summarise(min = min(disp), max = max(disp))

Q2: Compute speed in mph from time (in minutes) and distance (in miles). Which flight flew the fastest?

flights %>%
  mutate(mph = distance / (air_time/60)) %>%
  arrange(desc(mph)) %>%
  glimpse


9. Boxplot

x-axis: cyl < 8
y-axis: mpg, response to cyl

boxplot(mpg~cyl, data = mtcars, subset= cyl < 8)

或是用 %>% 分開寫。

You can use . as a placeholder when the “data” argument is in the second position.

mtcars %>%
  filter(cyl < 8) %>%
  boxplot(mpg~cyl, data = .)


Excise 5

Q: Which destinations have the highest average delays?

flights %>%
  group_by(dest) %>%
  summarise(avg_delay = mean(arr_delay, na.rm = TRUE)) %>%
  arrange(desc(avg_delay)) %>%
  glimpse










2017年4月22日 星期六

年輕的血可以抗老(二): TIMP2

還記得前幾年的這個實驗嗎?把老年的老鼠和年輕老鼠縫在一起(parabiosis)後,年輕老鼠的血讓老年老鼠變年輕了。

2013 年的時候,哈佛大學的 Dr. Amy Wagers 團隊把年輕(兩個月大)的和老年(23 個月大)的老鼠縫在一起,發現老年老鼠的心室肥大症狀(cardiac hypertrophy)改善了[1, 6]。為了找出是什麼蛋白質造成這個現象,他們分析比較了年輕老鼠和老年老鼠的血,發現兩者間有十三個蛋白質的表現量差很多,其中一個是 GDF11 (BMP-11),老鼠血中的 GDF11 隨著年紀增加而減少 [6]。GDF11 是生長激素 TGF-β 家族裡的其中一個,他們把 GDF11 打進老老鼠腹腔後(i.p. injection),同樣可以改善因老化而造成的心室肥大症。隔年,他們又發表了兩篇研究在 Science 說 GDF11 可以增進肌肉功能 [2, 7] 和腦細胞生長 [8]。

不過這兩篇研究在 2015 年的時候引起爭議,因為 Novartis Institutes 的執行長(executive director) David Glass 說他們重複實驗後得到的是相反的結果 [3, 4],研究結果發表在 Cell Metabolism [9]。他們發現老鼠和人類血液中的 GDF11 是隨著年齡增長而增多的,而且不但不會改善肌肉傷害,還會使它更嚴重,因為 GDF11 會抑制肌肉重新生長 [4, 9]。對此 Dr. Wagers 表示結果不同可能是因為 GDF11 有不只一種 isoforms,而其中一種確實是減少的 [3, 4],並且 Novartis 用的 GDF11 量是她用的三倍之多,過多的 GDF11 可能造成反效果。另外要提的是 myostatin (GDF8) 和 GDF11 很像,根據 Novartis 的研究,GDF11 和 myostatin 有相同的功能,都會抑制肌肉生長 [9],Novartis 有一個研發藥物即是 myostatin blocker,是想用來治療肌肉萎縮(muscular atrophy)的。這兩個研究之間的爭議和不同之處在 Dr. Wagers 關於 GDF11 可以改善肌肉傷害那篇 [6] 的 PubPeer 有諸多討論。

好了,為什麼要提起上面這些研究呢?因為今天有一篇發表在 Nature 的研究說除了 GDF11 外,還有另一個蛋白質可以讓年老的老鼠變年輕變聰明 [5]。這個研究是史丹佛大學的 Dr. Tony Wyss-Cory 團隊做的,他們之前有和 Dr. Wagers 合作過連體老鼠的研究。在這篇 Nature 的研究裡,他們比較了老年人(61-82 yrs)、年輕人(19-24 yrs)和新生兒臍帶血(umbilical cord plasma)的血漿蛋白,發現臍帶血漿可以增進老鼠的腦神經功能。之後他們比較了年輕老鼠和年輕人的血漿,找尋在老鼠和在人類血液內都會隨著年紀增加而降低的蛋白質,其中一個是 TIMP2 [10] [註]。TIMP2 在人類臍帶血和年輕老鼠的血漿及海馬旋裡的表現量都很高,當他們把 TIMP2 打進老鼠體內後,老年老鼠的認知功能改善了。同時,他們也發現 TIMP2 對年輕老鼠的空間記憶(spatial memory)是必須的,如果 knock down TIMP2,LTP (long-term potentiation)就無法表現 [10]。不過,他們目前還不知道 TIMP2 作用在記憶力的機制是什麼,需要更進一步的研究。

註:在 Wagers 2013 [6] 的那個研究裡,發現隨著年紀減少的蛋白有一個是 TIMP3,不過雖然 TIMP2 和 TIMP3 都在同一個家族裡,但他們的功能似乎差很多。



Articles:

1. Science / Nineteenth Century Technique Turns Old Mouse Hearts Young (2013)

2. Science / Young Blood Renews Old Mice (2014)

3. Science / Doubts cast on 'rejuvenating' protein (2015)

4. Nature / 'Young blood' anti-ageing mechanism called into question (2015)

5. Nature / Young human blood makes old mice smarter (2017)


Papers:

6. FS Loffredo et al, Growth Differentiation Factor 11 Is a Circulating Factor that Reverses Age-Related Cardiac Hypertrophy. Cell (2013)

7. M Sinha et al, Restoring Systemic GDF11 Levels Reverses Age-Related Dysfunction in Mouse Skeletal Muscle. Science (2014)

8. L Katsimpardi et al, Vascular and Neurogenic Rejuvenation of the Aging Mouse Brain by Young Systemic Factors. Science (2014)

9. MA Egerman et al, GDF11 Increases with Age and Inhibits Skeletal Muscle Regeneration. Cell Metabolism (2015)

10. JM Castellano et al, Human umbilical cord plasma proteins revitalize hippocampal function in aged mice. Nature (2017)









2017年4月20日 星期四

除了人類基因體計畫,還有另一種:Human Knockout Project

做研究常常需要用到 KO (knock-out) mice 來確認目標蛋白質的重要性,或是主要功能是什麼。不過呢,人和老鼠還是有差別,我們可以把老鼠的某個基因 KO,但無法把人類的基因 KO。如果我們無法 KO 人類的基因,那總可以找本來就沒有某些基因的人來研究吧?

雖說近親繁殖會使隱性的突變和疾病顯現出來,例如某 A 帶的一對基因一個是正常的(X),一個是突變沒功能的(x),那他帶的這個基因就是 Xx。因為突變而喪失功能叫 loss-of-function (LoF),假設某 B 是近親因此也有同樣的情形 (Xx),兩個人通婚後生的小孩就會有 25% 的機會是 xx,也就是身體裡沒有正常功能的蛋白質 X,等於是人類的 X 基因 KO。這種近親通婚的情況目前在帕基斯坦還存在,他們常常會和自己的表親通婚,於是會出現讓隱性突變顯性表現出來的情形。然而,很多人即使因為這個情形而喪失了某些基因,但還是活得很健康,這表示這個基因不重要嗎?這些看似不重要的基因也許可以為藥物研發帶來什麼意義。

2000 年的時候,Daniel MacArthur 開始找人類沒有也不會有事的基因。那年他還是 Dr. Kathryn North 實驗室的大學生。Dr. North 是澳洲雪梨大學的教授,之前發現一對兄弟的 muscular dystrophy (MD) 早發症狀(early-onset)可能是因為 ACTN3 出問題,不過當他們確認了父母肌肉裡的蛋白表現時,發現並沒有正常的 ACTN3 蛋白,但是父母本身是健康的,表示兄弟倆的 MD 症狀並非是缺少 ACTN3 蛋白的緣故(他們後來也發現是另一個基因突變造成的)[1]。於是呢,Dr. North 便開始想找出有什麼基因是看似重要,但沒有也可以存活的,也許我們缺少了那個基因非但無害,反而還有好處,他把這個計畫叫做 Human Knockout Project。為 1000 Genomes Project [註] 的一部份,分析了 185 位的基因體,MacArthur 和同事發現健康的人平均有一百種 LoF variants 和二十個完全喪失功能的基因突變 [1, 8]。

健康人的 LoF variants 通常是這幾種情形 [8]:
- 兩個 alleles 只有一個有問題(heterogenous),而有問題的那個雖然造成嚴重疾病,但因為是 recessive 所以(病徵)不會表現出來。
- 有問題的 alleles 雖然不那麼嚴重,但也不至於造成疾病。
- 那個基因是多餘的(redundant),也就是說有其他的基因可以取代它的功能。
- 不會影響基因的功能

2014 年的時候,MacArthur 和耶魯大學的 van Heel,還有英國倫敦大學(University of London)的 Richard Trembath 計畫花四年定序住在英國的倫敦東區的 25,000 位巴基斯坦裔英國人的基因,這些人的父母很多都是一等親(表親)通婚。2015 年的時候,他們開始這項計畫,Sanger Institute 也答應幫他們定序,預計 2017 年年底可以完成 [2]。2016 年的時候,他們把已經定序和分析了的 3222 位巴裔英國人的結果發表在 Science,發現他們真的缺少不少基因,在 821 人裡有 781 個基因共出現 847 種 variants,其中有 575 個 variants 是 LoF。有 38 個人缺少了之前以為很重要的基因,但只有 9 人因為缺少這些基因而生病 [3, 9]。

之後,MIT Broad Institute 的 Dr. Sekar Kathiresan 也做了類似的研究,他們分析了 10,503 位有參與長期心血管疾病和糖尿病研究的巴基斯坦人的基因,結果發表在這個月的 Nature。他們發現這些人的基因中有 1317 個是即便完全喪失功能(fully knock-out)也不會造成需要就醫的情形,有 1843 人至少有一個完全喪失功能的基因(就是兩個 alleles 都 KO),有兩個人以上是同時有七個喪失功能的基因:PLA2G7 (Lp-PLA2), CYP2F1 (Cytochrome P450 2F1), TREH (Trehalase), A3GALT2 (α1,3-galactosyltransferase 2), NRG4 (neureglin 4), SLC9A3R1, APOC3 [5, 11]。

七個基因中有一個是 PLA2G7,其蛋白是 Lp-PLA2 (lipoprotein associated phospholipase A2),這是和血塞有關的酵素,之前研究顯示如果血中的 Lp-PLA2 越高的話,心臟病發(heart attack)的機率就越高。GSK 在 2012 年花了三億美金(USD$3B)買下 Human Genome Sciences 研發抑制 Lp-PLA2 的藥物 Darapladib,不過它的兩個大型 phase III 臨床試驗都失敗 [7]。這個研究發現少了一個或一對 Lp-PLA2 基因的巴基斯坦人得到心血管疾病的機率並沒有比較低,也許可以解釋為什麼 Lp-PLA2 inhibitor 會失敗 [5, 11]。

七個基因中還有一個是 APOC3,其蛋白是 ApoC3 (apolipoprotein C3),是 chylomicrons, VLDL (very low density lipoprotein) 和 HDL (high-density lipoprotein)裡的其中一個蛋白,它會讓肝臟無法吸收富含甘油三酯(triglycerides, TGs)的脂肪粒(TG-rich lipoproteins, TRLs),使食物中的脂肪無法從體內循環中被清除,使得高血液中的 TRLs 升高。之前研究顯示當血中的 ApoC3 和 TRLs 過高的話,會造成高三酸甘油酯症(hypertriglyceridemia);而如果抑制 ApoC3 的話,則應該可以促進脂肪代謝。而在這個研究裡,有一整個家庭,包括雙親和九個孩子,全部都缺少 APOC3 基因,即便他們喝了一杯充滿脂肪的奶昔,但血液中的脂肪量卻很少會上升。這個家庭雖然缺少 ApoC3,但身體健康,表示如果用藥物抑制 ApoC-III 來治療應該是安全的 [5, 6, 11]。

另一個跟 ApoC-III 類似情況的是 PCSK9。德州大學 Southwestern Medical Center 的心血管疾病專家 Helen Hobbs 說他和同事之前懷疑過,有些人的壞膽固醇(LDL, low-density lipoprotein)異常的低是因為 PCSK9 喪失功能。他們找到一位個案是 34 歲的女士,她的一對 PCSK9 都因為突變而喪失功能,造成她的 LDL 極低但身體卻是健康的。因為這個研究,藥廠發現可以用藥物抑制 PCSK9 來降低膽固醇 [1]。事實上,PCSK9 inhibtor 已經進入臨床試驗階段,今年三月的時候,結果發表在 NEJM 中 [10]。這個藥物是 Amgen 的 evolocumab (Repatha),顯示不但可以降低血液中的膽固醇(up to 59%),也可以在已經服用降膽固醇藥物 statins 的病患身上再降低 20% 因心血管疾病致死的風險 [4]。

註:為 The 1000 Genomes Project Consortium 的計畫,目的是深入了解 genotype (基因)和 phenotype (表現出來的徵狀)的關係, genotype 如何影響 phenotype [12]。其中合作者眾多,有 Baylor College of Medicine, Broad Institute (MIT, Harvard), Illumina, Life Technologies, Roche, Wellcome Trust Sanger Institute, Cold Spring Harbor Laboratory, EBI, Yale, Stanford 等等。

這個計畫下面有三個主要計畫:
1. 從四個族群裡選出 179 人做全基因底定序(low-coverage WGS)
2.兩代基因定序(high-coverage WGS),基本為父母和孩子三人的(mother-father-child trios)。
3. 從幾個族群裡選出 679 人做目標性定序(targeted sequencing)



Articles:

1. J Kaiser, The Hunt for Missing Genes. Science (2014)

2. J Kaiser, East London study to explore high disease rates in south Asians (2015)

3. J Kaiser, Human ‘knockouts’ reveal genes we don’t need. Science (2016)

4. H Ledford, Genome-based cholesterol drug boosts heart health. Nature (2017)

5. J Kaiser, Human ‘knockouts’ may reveal why some drugs fail. Science (2017)

6. Science News / Gene knockouts in people provide drug safety, effectiveness clues (2017)

7. Science Daily / New genetic research can significantly improve drug development (2016)


Papers:

8. DG MacArthur et al, A Systematic Survey of Loss-of-Function Variants in Human Protein-Coding Genes. Science (2012)

9. VM Narasimhan et al, Health and population effects of rare gene knockouts in adult humans with related parents. Science (2016)

10. MS Sabatine et al, Evolocumab and Clinical Outcomes in Patients with Cardiovascular Disease. NEJM (2017)

11. D Saleheen et al, Human knockouts and phenotypic analysis in a cohort with a high rate of consanguinity. Nature (2017)

12. The 1000 Genomes Project Consortium, A map of human genome variation from population-scale sequencing. Nature (2010)









那件洋裝到底是什麼顏色?!

還記得前年很紅的那件洋裝嗎?你看到的是什麼顏色?白色和金色,還是黑色和藍色呢?



記得在那之後有好幾篇 papers 討論為什麼會出現這個情形,那時候有看了一下,但現在記不太得了(記憶力老化很嚴重 😭),沒想到事隔兩年多了(?)還有人繼續研究這個。這篇研究滿有趣的,他們在網上做了兩次問卷調查,第一次有 8048 人,第二次有 5333 人,問卷問題除了問他們第一次看到洋裝時是什麼顏色外,還有問是否認為洋裝在影子下,是否在看到洋裝之前就已經知道是什麼顏色,認為照片裡的光是自然光(natural light)還是人造光(artificial light),第一次看到洋裝的照片時是在什麼時間、室內還是外、用什麼看的(手機還是電腦等等),另外還有問一些個人資訊,例如住哪、生活作息,還有活動範圍(在室外的時間多,還是在室內的時間多)。


Figure: P Wallisch, Slate 2017

分析結果發現,大多數人看到的都是白色和金色,是看到黑色和藍色的快一倍多。有趣的是看到白色和金色的大多是早睡早起的(正常作息, morning larks),看到黑色和藍色的則大多是夜貓子(night owls)。他們認為會有這種現象是因為常看到短光的(short-wavelength),當看到不確定的光時會自然地認為那是短光或偏藍光(bluish)。反之,如果常看到長光就會先假設那是長光或偏黃光(yellowish)。

那這和作息時間還有看到洋裝是什麼顏色有何關係呢?如果你活動的時間大多是白天的話,那你接觸到的大部分光都是自然光;如果你活動時間都是晚上,那你大多數時間接收到的光都是人造光(也就是電燈)。而自然光和人造光是有不同光譜的,自然光是屬於短光,人造光屬於長光,也就是說如果你是 morning lark 的話,那你平常接受到的偏藍光比較多。如果這個理論是對的,那早睡早起的人看到的洋裝會是白色和金色的,因為會先排除掉那是偏藍光的假設。另外,看到白色和金色的人也大多認為照片裡的光是自然光,而夜貓子大多認為那是人造光,只有少數早睡早起的人覺得那是人造光。

雖說我的確如研究所說,是屬於白色和金色,同時是 morning lark 的那群,不過這個研究感覺只是分析樣本和推導結果,似乎並沒有真的證明看到的顏色和生活作息有關。是說還記得本實驗室大多數人都是看到白色和金色,只有一個看到黑色和藍色,他發現沒人跟他一樣的時候整個嚇到,以為我們在整他,明明是黑色和藍色,但是大家聯合起來騙他是白色和金色這樣。我們很認真的跟他說並沒有騙他,我們看到的真的是白色和金色之後,他開始陷入恐慌,以為他的眼睛出問題,超好笑的。XD



Article:

Science / Science says yes to the dress (2017)

Slate / Two Years Later, We Finally Know Why People Saw “The Dress” Differently (2017)


原論文:

P Wallisch, Illumination assumptions account for individual differences in the perceptual interpretation of a profoundly ambiguous stimulus in the color domain: “The dress.” JOV (2017)









2017年4月18日 星期二

Laura Dekker: 最年輕就繞地球一周的帆船手

昨天早上和我爸媽聊天時,我爸提起他最近看的這部紀錄片 Maiden Trip,是講一個十四歲小女孩自己駕帆船環繞地球一周的事情,好奇就孤狗了一下,以下簡述。



National Geographic / A 16-Year-Old Girl’s Solo Sail Around the World | Short Film Showcase


這個女孩叫 Laura Dekker,父親是荷蘭人,是為造船家(boat builder),母親是德國人,是街頭藝人。父母兩人有七年的時間在海上環遊世界,一樣是駕帆船。他們途經紐西蘭的時候是 1995 年,Laura 誕生了,所以她有三個國籍:德國、荷蘭和紐西蘭。Laura 出生之後的五年,都是在海上生活,直到五歲時他父母終於返航回到荷蘭。

她從小就跟父親 Nick Dekker 學駕帆船,六歲時得到第一艘船 Optimist,之後就跟著父親學如何駕馭帆船。

2006 年暑假,也就是她十一歲的時候,和父親參加一場 24 小時的帆船競賽,船是跟父親朋友借的一艘 Hurley 700,比賽完之後 Laura 問船主人可不可以借她,船主人說可以借她一年,返還的時候清潔乾淨和保養好即可。借到船之後,她每天晚上跟著父親學各種航海知識。

2007 年暑假,駕帆船的技術和航海的知識都準備好後,她便駕船在 Friesland (荷蘭最大省)的 Wadden Sea (Waddenzee) 遊玩了六個禮拜,期間只有她的狗 Spot 陪她。在這之後,Laura 決定她要一艘自己的 Hurley 700,於是她和爸爸開始看船。為了買到她想要的船,她打工存錢,終於在十二歲時可以駕著她自己的船 Guppy 出海。

2008 年的整個暑假,她駕著她的 Guppy 在荷蘭的海上到處遊玩,然後她告訴父親,她想要自己駕船繞地球一周,成為環繞地球一周最年輕的帆船手。父親跟她說,先穿越英吉利海峽來證明她有能力獨自環繞地球一周。

2009 年,她十三歲的時候,她準備了八個禮拜,終於趕在五月春假開始前一天把出航到英國所需的一切準備好。她禮拜五中午放學後就出發了,沒有告知家人,禮拜天早上抵達英國,上岸了之後被英國警察扣住,打電話要她父親來陪她駕船回去,他父親回說 Laura 自己會回去不需要他去帶,於是英國警察就把 Laura 送到小孩之家,不得已他父親才到英國去接女兒。雖說是接,其實只是把她領出來,讓她能上自己的帆船而已,之後 Laura 一樣是自己駕船回荷蘭,父親則是坐飛機回去。XD

雖然 Laura 跟父親證明了她可以自己出航,但荷蘭政府不同意。同年八月,在 Laura 宣布她要花兩年時間獨自繞地球一周後,引起社會上很多爭論,很多人認為讓小孩自己駕船趴趴走很危險,父母不該這樣放任小孩。同時荷蘭政府和社會局也介入了,因為荷蘭法律規定十六歲以前駕船要有監護人陪同,不能獨自出海。Laura 當然不服氣,她覺得自己有能力可以獨自出海,她有這個自信是因為她從小在海上生活,了解海的美麗和危險,她認為大家覺得危險和恐懼是因為不夠了解。

"They thought it was dangerous. Well, everywhere is dangerous. They don't sail and they don't know what boats are, and they are scared of them."

Laura 的父親也對她充滿信心,覺得她比很多帆船手都厲害了,Laura 知道自己在幹麻,對自己想做的事也有計劃。

Nick Dekker: "It caused a lot of opposition from complete strangers and from parents of her girlfriends as well. However, I know about her abilities and I know how she has learnt them. I have absolute confidence to my daughter; I know that she won't undertake crazy actions and that she is well prepared for all eventualities. She is a better sailor and she has more experience than many seasoned sailors."

2009 年十月,法院雖然判定 Laura 不能自己出航,因為認為她經驗不夠,但也留了個後門,只要她能通過某些條件就可以出航。

2010 年七月,法院讓父母決定 Laura 是否能夠獨自航行,於是她在那年八月就出發了。

她從荷蘭到葡萄牙這段有父親陪同,一起測試船是否沒問題,之後便獨行。航行路線是由葡萄牙向西,經過 St. Maarten,穿過巴拿馬運河,經過珍珠島、大溪地、斐濟,然後 2011 年的八月到達澳洲的達爾文。原本計畫停 26 個點,每個點之間花的航行時間不超過兩週,不過在澳洲之後,她略過好幾個點,所以有時在海上航行了六、七個禮拜才到下個點。離開澳洲後,一路直航到南非,中間在海上的時間有 48 天,2011 年十一月到南非的 Cape Town。離開南非後同樣沒停任何點,直接航行至這趟旅程的終點站 St. Maarten,那天是 2012 年的七月 21 日。總共航行時間是一年五個月,519 天。不過結束之後她仍繼續航行,最後停留在紐西蘭,她的出生地。

TED Talk x Youth / Laura Dekker


Idea City / Laura Dekker - Youngest Circumnavigator to Sail Alone Around the World


她在航行時有自己攝影紀錄,面對鏡頭講述自己的當時的心情,一路航行的感想,之後剪輯成紀錄片 Maiden Trip。

紀錄片中有幾個令人印象深刻的點:

- 出航後的前幾天,她沒有真實感,直到要進入巴拿馬運河,她才有種正式啟航的感覺,因為過了運河,她就只能向前行,無法往回走了。
- 很多人問她獨航不會無聊嗎?她說剛開始沒網路很不習慣,後來也就習慣了。她喜歡航海,想要到世界各地,接觸其他文化,所以不會無聊。
- 從 Galápagos Islands 到法屬玻里尼西亞(French Polynesia)這一段,是她父母 1992 年時航行過的一段,她拿了父母那時的航海日記,每天看當時的航速,和當年父母比賽。那時她父母這段花了十九天,而她花了十八天。"Pretty Awesome!" She said.
- 航程的前半段,她很喜歡著陸活動和跟人群接觸,偶爾會覺得孤單,但後半她開始喜歡獨處的時間,她享受在海上的日子,因為獨處的時間可以讓她更了解自己。
- 她小時候時對她爸爸的感覺很複雜,既愛又怕,自從父母離婚後她跟著父親,幾乎每天都是她自己過活,因為父親很忙,從早上六點工作到晚上九點。有一陣子父親因為過勞崩潰,整天待在家、情緒不穩,讓她很害怕。父親了解自己的情況,跟她講之後再發生的時候要怎麼處理,她後來也習慣了,還是很愛她父親。
- 她到了法屬玻里尼西亞後愛上了那裡,一度不想離開,但是如果待太久,她就無法達成成為繞地球一周最年輕的帆船手的夢想,掙扎了一陣子後還是決定離開 Bora Bora 繼續往前,因為她還是想達成夢想。
- 從 Bora Bora 出發到南非的時候已是十一月,那個時節的海非常危險,風大浪高,她很緊張但還是成功到達南非。中間風浪很大的時候,她提高警覺,專注於往前航行,感覺不到恐懼、疲憊和餓。
- 在海上航行有很多不可掌控的因素,有時是好幾天沒風,有時是大風大浪。剛開始遇到好幾天沒風的時候,她會很焦慮,到後來已能處之泰然。
- 她在出發之前很多人唱衰她,但當她順利到達南非後又說「我們相信你能做到」,她後來對別人的批評都是一笑置之。
- "Freedom is when you're not attached to anything." 在船上獨處的日子讓她了解,真正的自由就是不依附於任何事。


看完這個覺得十四歲小孩的能力其實超乎大人的想像,而她父母對他的信任和信心也令人佩服啊。當小孩有夢想時,父母應該去幫助他完成,而不是跟他講很危險不要做,換別的。最重要的是 -- 小孩敢冒大人不敢冒的險。

台灣父母把小孩照(ㄍㄨㄢˇ)顧(ㄓˋ)的那麼周到,什麼都幫小孩做好,對小孩沒信心,覺得他們無法自己處理事情,一定要父母幫忙,害怕小孩去冒險,擔心小孩受傷或遇到危險。這種對小孩的控制欲和擔心是不是同時反應了父母本身就對自己極度沒信心?父母不相信自己的小孩有能力處理事情,到底是對自己(的教育)沒信心,還是對小孩沒信心?也許很多時候,並不是小孩做不到,而是父母自己做不到,所以覺得小孩也做不到。

有一種做不到,叫做父母覺得你做不到。
有一種危險,叫做父母覺得很危險。

也許父母在因為自己的擔心而想要限制小孩發展的同時,應該要先誠實的面對自己的弱點。




References

Wikipedia: Laura Dekker

BBC / Dreams scuppered for Dutch sailor girl

CNN / Dutch teen completes historic, controversial solo sail around the globe

Zeilmeisje Laura Dekker: 2009 ZEILEN 雜誌專訪

Laura Dekker personal blog









2017年4月10日 星期一

免疫缺乏症:一個花了 35 年才找到病因的病

在 CBC 看到這個案例的新聞,但是新聞寫得不清不楚,連是哪個基因突變都沒講,於是就找到 McGill 自己發的新聞稿。這個案例是三十年前時,有一位男孩 Steven Francis 不停的出現感染症狀,例如細菌感染、病毒感染、黴菌感染和上呼吸道感染之類的,要一直不停的治療,看了很多醫生(甚至還跑去美國看)卻都找不出原因。這個情況困擾的他三十年,中間還曾經因為嚴重感染差點死掉,直到 2012 年當年的男孩已經變成三十歲的成人時,家庭醫生轉介他到 McGill University (Research Institute of the McGill University Health Centre, RI-MUHC) 的 Dr. Donald Vinh。

Dr. Vinh 喜歡研究一些疑難雜症,當他接手 Francis 這個案例後,除了看他三十年來堆積成箱的病例,也開始查他祖宗十八代的病史。因為自 1980s 年代後許多免疫缺乏症(immunodeficiency)開始被發現,Dr. Vinh 便想會不會 Francis 的病跟免疫有關,然後他發現 Francis 的一個跟免疫有關的基因有突變。

ZAP70 是一個 cytoplasmic tyrosine kinase,負責啟動(activate) T cells,如果 ZAP70 喪失功能,那身體的免疫系統便無法作用,也無法啟動防禦系統對抗細菌或病毒入侵,造成 combined immunodeficiency (CID)。ZAP70 突變的話通常是致命的,如果兩個 ZAP70 的基因都突變的話,小孩會不停地反覆嚴重感染,需要在五歲以前接受骨髓移植才能存活。

Francis 的突變比較特別,並不是一個眾所皆知會造成免疫缺乏的突變,在 ZAP70 DNA 的序列上是 homozygous 1272C>T,氨基酸序列則是 G355G (DNA 上為 GGC > GGT),也就是這個 DNA 上的突變並不會造成氨基酸序列的改變,但為什麼會致病呢?因為這個突變產生的 mRNA 會導致不正常 mRNA slicing,結果會造成 19-bp deletion,這個 deletion 產生的 frame-shift 會使得氨基酸序列變短(premature stop codon)。突變的 ZAP70 (DSS mut) 表現量比正常的 ZAP70 (DSS wt) 要低,也無法啟動 TcR (T-cell receptor) signalling。

Dr. Vinh 發現如果只帶有一個突變的話(heterogenous),DSS wt 的功能會蓋過 DSS mut 的 ZAP70,所以對生理上不會造成太大影響,如果是 homogenous 的話,DSS mut 就會蓋過 MSS wt,造成 T cell 的功能失衡,於是他想了一個方法,就是用 oligonucleotide 來抑制不正常的 mRNA splicing,降低 DSS mut,讓 DSS wt 的表現和功能上升。他用的是一個目標序列為 1272C>T 突變的 antisense morpholino oligonucleotide (AMO),結果試驗在體外培養的細胞(病人的 PBMC)上的效果不錯。

三十年說短不短,但還是算在有生之年找到治療方法,雖然離用在人體身上可能還需要一段時間。是說這麼細微的突變(畢竟氨基酸序列並沒有改變),要怎麼發現是因為 ZAP70 mRNA splicing 不正常造成的呢?是把所有跟免疫相關的基因序列和它們的 mRNA 都定序比對,看哪個基因有突變或表現不正常嗎?覺得能找到病因真是很厲害啊。



CBC 的新聞:McGill researcher solves case of 'mystery boy' whose illness eluded doctors for decades

McGill 的新聞稿:Solving medical “cold cases” through genetics

論文:C Gavino et al, Morpholino-based correction of hypomorphic ZAP70 mutation in an adult with combined. Journal of Allergy and Clinical Immunology (2017)










2017年4月9日 星期日

史前人類為什麼要吃人?

之前的考古發現,舊石器時代的人類會吃同類(human cannibalism),但是原因眾說紛紜,有的認為是某種儀式(ritual),有人認為是因為人體有營養價值(nutritional),不過最近的研究認為營養價值這個原因不成立,因為人體能供給的熱量跟動物相比並沒有比較高,跟人類(體積)同樣大小的動物能提供的熱量跟人類一樣。

顯示為吃人的特徵(signatures of cannibalism)有幾項,包括有:

- 除了沒有頭骨(cranial base)外,其他部位皆完整。
- 沒有脊椎,因為要吃脊髓。
- 有刀切的痕跡
- 長骨被切成段
- 切人類和動物的的技法一樣
- 處理剩下的人體和動物屍體的方法是一樣的
- 有煮過的痕跡(例如骨頭被燒焦了)
- 有人類的齒痕

如果是某種儀式的話,會在頭蓋骨留下治療的痕跡之類的。

經過研究計算人體的成分,顯示一位成人男性體中的總脂肪和蛋白質量能提供的熱量只有 125,822 卡路里,只能提供六十個人一天所需的能量。之前有研究說,一位五十公斤的男性身體可以提供 30 公斤的可食用的肌肉,包含有 4.5 kg 的蛋白質,約 18,000 卡路里。人體中能提供最多能量的想當然爾是脂肪,一個人體的脂肪就能提供 49,399 卡路里,最少的則是牙齒,只有 36 卡路里。而且跟現代人相比,尼安德塔人的肌肉比現代人多,所能提供的能量也比較少。(人體中能提供最多卡路里的是脂肪,再來是 skeleton,第三才是肌肉。)

相較之下,古代動物如長毛象一隻就能提供 3,600,000 卡的熱量,犀牛有 1,260,000 卡路里,平常野牛也有 979,200 卡路里,隨便都是人類的好幾倍,當然打獵打他們比較划算啊,打一隻就可以吃好幾天,打自己的同類來吃太沒效益了。XD

最新的研究認為,發現的九個在舊石器時代 (936,000 - 14,700 年前)時吃人的地點中,人類會吃同類的原因可能是不想浪費食物,都已經死在那了,不吃埋起來好像有點可惜。或者是因為太餓了,所以就吃了。但最有可能的原因是慶祝打仗勝利的儀式,把殺死的敵人吃掉。



Article:

M Price, Why don’t we eat each other for dinner? Too few calories, says new cannibalism study. Science Magazine (2017)


原論文:

J Cole, Assessing the calorific significance of episodes of human cannibalism in the Palaeolithic. Scientific Reports (2017)