Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TokyoR#99_Divergence

 TokyoR#99_Divergence

第99回 Tokyo.Rの発表スライドです。

8284465a94bbdf1ea82cf1a67d55f447?s=128

kilometer

June 04, 2022
Tweet

More Decks by kilometer

Other Decks in Technology

Transcript

  1. 2022.06.04 99th #TokyoR @kilometer00 情報量 Divergence

  2. Who!? 誰だ?

  3. Who!? 名前: 三村 @kilometer 職業: ポスドク (こうがくはくし) 専⾨: ⾏動神経科学(霊⻑類) 脳イメージング

    医療システム⼯学 R歴: ~ 10年ぐらい 流⾏: 五味太郎トランプ
  4. None
  5. 宣伝!! (書籍の翻訳に参加しました。)

  6. 2022.06.04 99th #TokyoR @kilometer00 情報量 Divergence

  7. ࣸ૾ (mapping) 𝑓: 𝑋 → 𝑌 𝑋 𝑌 ͋Δ৘ใͷू߹ͷཁૉΛɺผͷ৘ใͷू߹ͷ ͨͩͭͷཁૉʹରԠ͚ͮΔϓϩηε

  8. 地図空間 ⽣物種名空間 名空間 ⾦銭価値空間 (円) ⾦銭価値空間 (ドル) コーヒー ¥290 $2.53

    [緯度, 経度] Homo sapiens 実存 写像 写像 写像 写像 写像 写像 情報 【写像】 ある集合の要素を他の集合のただ1つの要素に対応づける規則
  9. ࣸ૾ Ϧϯΰ ʢ࣮ଘʣ Ϧϯΰ ʢ৘ใʣ mapping

  10. ৘ใྔ ࣮ଘ ৘ใ σʔλ Ϧϯΰ  ූ߸Խ

  11. ৘ใྔ ࣮ଘ ৘ใ σʔλ Ϧϯΰ  ූ߸Խ ৘ใྔͷଛࣦ

  12. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち

  13. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc.
  14. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. post ⾃分 pre ⾃分 変化
  15. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. post ⾃分 pre ⾃分 変化量 情報量 事象
  16. ⾯ 1 : へ ⾯ 2 : の ⾯ 3

    : へ ⾯ 4 : の ⾯ 5 : も ⾯ 6 : へ 全事象 Ω へ の も 事象族 ℱ 事象 ω 集合[1,0] 確率 𝑝 1 2 1 3 1 6 写 像 𝑃 も へ の へのへのもへサイコロ
  17. 事象ω! 「へ」が出る 確率𝑝! = " # 事象ω$ 「も」が出る 確率𝑝$ =

    " %
  18. 事象𝑎" 「中国在住」 確率𝑝&! ≈ " % 事象𝑎# 「バチカン在住」 確率𝑝&" ≈

    " "'#
  19. 事象𝑎" 「中国在住」 確率𝑝&! ≈ " % 事象𝑎# 「バチカン在住」 確率𝑝&" ≈

    " "'# 情報量 <
  20. 事象ωに対して情報量を定義する。 ⾃⼰情報量 𝐼(ω) Self information

  21. 事象ωに対して情報量を定義する。 ⾃⼰情報量 𝐼(ω) Self information 1. 確率𝑝(ω)に対して単調減少 2. 確率𝑝(ω)に対して連続 3.

    加法性を持つ ⾃⼰情報量𝐼(ω)が満たすべき譲れない性質
  22. 1. 確率𝑝(ω)に対して単調減少 珍しい事象 → 情報量「⼤」 珍しくない事象 → 情報量「⼩」 2. 確率𝑝(ω)に対して連続

    3. 加法性を持つ ⾃⼰情報量𝐼(ω)が満たすべき譲れない性質
  23. 1. 確率𝑝(ω)に対して単調減少 珍しい事象 → 情報量「⼤」 珍しくない事象 → 情報量「⼩」 2. 確率𝑝(ω)に対して連続

    ちょっとだけ確率が変わったら ⾃⼰情報量もちょっとだけ変わりたい 3. 加法性を持つ ⾃⼰情報量𝐼(ω)が満たすべき譲れない性質
  24. 1. 確率𝑝(ω)に対して単調減少 珍しい事象 → 情報量「⼤」 珍しくない事象 → 情報量「⼩」 2. 確率𝑝(ω)に対して連続

    ちょっとだけ確率が変わったら ⾃⼰情報量もちょっとだけ変わりたい 3. 加法性を持つ 「ジェダイマスター」+「⾝⻑66cm」 = 「ヨーダ!?」 ⾃⼰情報量𝐼(ω)が満たすべき譲れない性質
  25. 1. 確率𝑝(ω)に対して単調減少 𝑝 ω! > 𝑝 ω" → 𝐼 ω!

    < 𝐼(ω" ) 2. 確率𝑝(ω)に対して連続 𝑝 ω" = 𝑝 ω! + Δ𝑝 → 𝐼 ω" = 𝐼 ω! + Δ𝐼 3. 加法性を持つ 𝑝 ω! ∩ ω" = 0 → 𝐼 ω! ∪ ω" = 𝐼 ω! + 𝐼(ω" ) ⾃⼰情報量𝐼(ω)が満たすべき譲れない性質
  26. 1. 確率𝑝(ω)に対して単調減少 2.確率𝑝(ω)に対して連続 3.加法性を持つ ⾃⼰情報量𝐼(ω)が満たすべき譲れない性質 𝐼 ω = log 1

    𝑝(ω) = − log 𝑝(ω)
  27. ⾃⼰情報量𝐼(ω) 𝐼 ω = − log 𝑝(ω) seq(0.01, 1, by

    = 0.01) %>% tibble(p = .) %>% mutate(i = -log(p)) %>% ggplot() + aes(p, i) + geom_path(color = "Blue") 珍しい ⾃⼰情報量が ⼤きい
  28. 1. 確率𝑝(ω)に対して単調減少 2.確率𝑝(ω)に対して連続 ⾃⼰情報量𝐼(ω) 𝐼 ω = − log 𝑝(ω)

  29. ⾃⼰情報量𝐼(𝐴) 𝐼 𝐴 = − log 𝑝(𝐴) 3. 加法性を持つ 𝐼

    𝑎 + 𝐼 𝑏 = − log 𝑝 𝑎 − log 𝑝 𝑏 = − log 𝑝 𝑎 𝑝 𝑏 = − log 𝑝 𝑎 ∪ 𝑏 = 𝐼(𝑎 ∪ 𝑏) 𝑝 𝑎 ∩ 𝑏 = 0
  30. 1. 確率𝑝(ω)に対して単調減少 𝑝 ω! > 𝑝 ω" → 𝐼 ω!

    < 𝐼(ω" ) 2. 確率𝑝(ω)に対して連続 𝑝 ω" = 𝑝 ω! + Δ𝑝 → 𝐼 ω" = 𝐼 ω! + Δ𝐼 3. 加法性を持つ 𝑝 ω! ∩ ω" = 0 → 𝐼 ω! ∪ ω" = 𝐼 ω! + 𝐼(ω" ) ⾃⼰情報量𝐼(ω) 𝐼 ω = − log 𝑝(ω)
  31. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃]
  32. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃] ⾃⼰情報量𝑖 𝐼 ω = − log 𝑝(ω) ⾃⼰情報量 − log 𝑝 𝐼 ω
  33. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃] ⾃⼰情報量𝑖 𝐼 ω = − log 𝑝(ω) 𝐻 𝑃 = 𝐸[𝐼 ω ] ⾃⼰情報量 エントロピー − log 𝑝 𝐼 ω
  34. エントロピー Entropy エントロピー := ⾃⼰情報量の期待値 𝐻 𝑃 = 𝐸 𝐼

    ω = ∑<∈> 𝑝 ω 𝐼(ω) = − ∑<∈> 𝑝 ω log 𝑝(ω) 実現値とその⽣起確率の積和 𝐼 ω = − log 𝑝(ω)
  35. ところで、

  36. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃] ⾃⼰情報量𝑖 𝐼: − log 𝑝 𝐼 ω ⾃⼰情報量
  37. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃] 実数空間 𝑅 確率変数𝑋 確率分布 𝑓: ℬ → [0,1] 実現値𝑥 ⾃⼰情報量𝑖 𝐼: − log 𝑝 𝐼 ω ⾃⼰情報量
  38. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃] 実数空間 𝑅 確率変数𝑋 確率分布 𝑓: ℬ → [0,1] 実現値𝑥 ⾃⼰情報量𝑖 𝐼: − log 𝑝 𝐼 ω ⾃⼰情報量 確率空間 𝒳[𝑅, ℬ, 𝑃]
  39. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ

    → [0,1] 確率空間 𝒫[Ω, ℱ, 𝑃] 実数空間 𝑅 確率変数𝑋 確率分布 𝑓: ℬ → [0,1] 実現値𝑥 ⾃⼰情報量𝑖 𝐼: − log 𝑝 𝐼 𝑥 ⾃⼰情報量 確率空間 𝒳[𝑅, ℬ, 𝑃] 𝐼 ω ⾃⼰情報量
  40. エントロピー Entropy ⾃⼰情報量 Self information 𝐻 𝑃 = 𝐸 𝐼

    ω = − : #∈% 𝑝 ω log 𝑝(ω) 𝐻 𝑋 = 𝐸 𝐼 𝑥 = − : &∈' 𝑝 𝑥 log 𝑝(𝑥) 𝐼 ω = − log 𝑝(ω) 𝐼 𝑥 = − log 𝑝(𝑥) 連続系では積分になり 𝑝 𝑥 は確率密度関数
  41. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. エントロピー の変化量 情報量 事象 𝐻[post] 𝐻[pre]
  42. 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃: ℱ → [0,1]

    ⾃⼰情報量𝑖 𝐼: − log 𝑝 𝐼 ω ⾃⼰情報量 全事象 Ω
  43. 全事象 Ω 集合 [0,1] 事象 ω 確率𝑝 確率測度 𝑃 ⾃⼰情報量𝑖

    𝐼: − log 𝑝 𝐼 ω 確率𝑝(ω) 確率測度 𝑄 𝐼′ ω 観測 𝑎
  44. エントロピー 𝐻 𝑃 ⾃⼰情報量 𝐼 ω 期待値 𝐸 エントロピー 𝐻

    𝑄 ⾃⼰情報量 𝐼′ ω 期待値 𝐸 個⼈の感想 エントロピーの 変化量 期待値 𝐸
  45. エントロピー 𝐻 𝑃 ⾃⼰情報量 − log 𝑃(ω) 期待値 𝐸 エントロピー

    𝐻 𝑄 ⾃⼰情報量 − log 𝑄(ω) 期待値 𝐸 個⼈の感想 エントロピーの 変化量 期待値 𝐸
  46. ⾃⼰情報量の変化量 𝐼G ω − 𝐼 ω = − log 𝑄

    𝜔 − − log 𝑃 𝜔 = − log 𝑄 𝜔 + log 𝑃 𝜔 = log H(<) I(<) 事後 事前
  47. ⾃⼰情報量の変化量 𝐼G ω − 𝐼 ω = log 𝑃(ω) 𝑄(ω)

    事後 事前 エントロピーの変化量 𝐸[𝐼G ω − 𝐼 ω ] 事後 事前
  48. エントロピーの変化量 事後 事前 𝐸 𝐼G ω − 𝐼 ω =

    7 <∈> 𝑃(ω) log 𝑃(ω) 𝑄(ω) ≔ 𝐷JK (𝑃||𝑄) KLダイバージェンス Kullback-Leibler divergence
  49. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. 𝐻[post] KLダイバージェンス 事象 𝐷#$ (pre||post) 𝐻[pre]
  50. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. 𝐻[post] 事象 𝐷!" (pre||post) 𝐻[pre] 𝐷!" (post||pre) ≠
  51. 𝐷JK (𝑃||𝑄) = 7 <∈> 𝑃(ω) log 𝑃(ω) 𝑄(ω) KLダイバージェンス

    Kullback-Leibler divergence 𝐷JK (𝑄||𝑃) = 7 <∈> 𝑄(ω) log 𝑄(ω) 𝑃(ω) preから⾒たpostまでの変化量 postから⾒たpreまでの変化量 ≠ 距離の公理を満たさない
  52. 𝐷() (𝑃| 𝑄 ≔ λ𝐷*+ (𝑃| λ𝑄 + 1 −

    λ 𝑄 + (1 − λ)λ𝐷*+ (𝑄| λ𝑃 + 1 − λ 𝑃 λ = ! " の時、 𝐷() (𝑃| 𝑄 = ! " {𝐷*+ (𝑃|| ,-. " ) + 𝐷*+ (𝑄|| ,-. " )} ⇔ 𝐷() (𝑃| 𝑄 = 𝐷() (𝑄| 𝑃 JSダイバージェンス Jensen-Shannon divergence
  53. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. 𝐻[post] JSダイバージェンス 事象 𝐷%& (pre||post) 𝐻[pre]
  54. JSダイバージェンス Jensen-Shannon divergence philentropy::JSD(x, unit = "log2") data.frame(P = 1:10

    / sum(1:10), Q = 20:29 / sum(20:29)) %>% t() %>% philentropy::JSD() jensen-shannon 0.03792749
  55. JSダイバージェンス Jensen-Shannon divergence set.seed(71) .group <- 2 .N <- 7

    dat <- data.frame(tag = rep(letters[1:.N], times = .group), key = rep(LETTERS[1:.group], each = .N)) %>% mutate(value = sample(1:10, .N * .group, replace = T)) dat_scaled <- dat %>% group_by(key) %>% mutate(value = value / sum(value)) %>% ungroup()
  56. JSダイバージェンス Jensen-Shannon divergence dat_wide <- dat_scaled %>% tidyr::pivot_wider(values_from = value,

    names_from = tag) # A tibble: 2 x 8 key a b c d e f g <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 A 0.025 0.175 0.05 0.2 0.25 0.125 0.175 2 B 0.286 0.0857 0.0571 0.114 0.257 0.0286 0.171
  57. JSダイバージェンス Jensen-Shannon divergence dat_for_JSD <- dat_wide %>% tibble::column_to_rownames("key") %>% as.matrix()

    a b c d e A 0.0250000 0.17500000 0.05000000 0.2000000 0.2500000 B 0.2857143 0.08571429 0.05714286 0.1142857 0.2571429 f g A 0.12500000 0.1750000 B 0.02857143 0.1714286
  58. JSダイバージェンス Jensen-Shannon divergence dat_for_JSD %>% philentropy::JSD() Metric: 'jensen-shannon' using unit:

    'log2’... jensen-shannon 0.1362031
  59. JSダイバージェンス make_sampledata <- function(.group = 2, .N = 7){ dat

    <- data.frame(tag = rep(letters[1:.N], times = .group), key = rep(LETTERS[1:.group], each = .N)) %>% mutate(value = sample(1:10, .N * .group, replace = T)) dat_scaled <- dat %>% group_by(key) %>% mutate(value = value / sum(value)) %>% ungroup() } arrange_forJSD <- function(dat, .key = "key"){ dat %>% tidyr::pivot_wider(values_from = value, names_from = tag) }
  60. JSダイバージェンス Jensen-Shannon divergence dat_forJSD <- make_sampledata(.group = 5, .N =

    7) %>% arrange_forJSD() # A tibble: 5 x 8 key a b c d e f g <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 A 0.167 0.167 0.238 0.0714 0.167 0.143 0.0476 2 B 0.0769 0.0769 0.231 0.154 0.0385 0.231 0.192 3 C 0.0385 0.192 0.269 0.231 0.0385 0.154 0.0769 4 D 0.152 0.0303 0.182 0.212 0.0606 0.0909 0.273 5 E 0.0227 0.0227 0.205 0.136 0.182 0.227 0.205
  61. JSダイバージェンス Jensen-Shannon divergence # A tibble: 5 x 8 key

    a b c d e f g <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 A 0.167 0.167 0.238 0.0714 0.167 0.143 0.0476 2 B 0.0769 0.0769 0.231 0.154 0.0385 0.231 0.192 3 C 0.0385 0.192 0.269 0.231 0.0385 0.154 0.0769 4 D 0.152 0.0303 0.182 0.212 0.0606 0.0909 0.273 5 E 0.0227 0.0227 0.205 0.136 0.182 0.227 0.205
  62. JSダイバージェンス Jensen-Shannon divergence dat_nest <- dat_forJSD %>% dplyr::group_nest(key) # A

    tibble: 5 x 2 key data <chr> <list<tbl_df[,7]>> 1 A [1 × 7] 2 B [1 × 7] 3 C [1 × 7] 4 D [1 × 7] 5 E [1 × 7]
  63. JSダイバージェンス Jensen-Shannon divergence dat_grid <- dat_nest$key %>% expand.grid(., .) %>%

    as_tibble() %>% left_join(dat_nest %>% rename(Var1 = key), by = "Var1") %>% left_join(dat_nest %>% rename(Var2 = key), by = "Var2")
  64. > dat_grid # A tibble: 25 x 4 Var1 Var2

    data.x data.y <chr> <chr> <list<tbl_df[> <list<tbl_df[> 1 A A [1 × 7] [1 × 7] 2 B A [1 × 7] [1 × 7] 3 C A [1 × 7] [1 × 7] 4 D A [1 × 7] [1 × 7] 5 E A [1 × 7] [1 × 7] 6 A B [1 × 7] [1 × 7] 7 B B [1 × 7] [1 × 7] 8 C B [1 × 7] [1 × 7] 9 D B [1 × 7] [1 × 7] 10 E B [1 × 7] [1 × 7] # … with 15 more rows JSダイバージェンス Jensen-Shannon divergence
  65. JSダイバージェンス Jensen-Shannon divergence dat_JSD <- dat_grid %>% mutate(JSD = purrr::map2_dbl(

    data.x, data.y, ~ bind_rows(.x, .y) %>% as.matrix() %>% philentropy::JSD()))
  66. > dat_JSD # A tibble: 25 x 5 Var1 Var2

    data.x data.y JSD <chr> <chr> <list<tbl_> <list<tbl> <dbl> 1 A A [1 × 7] [1 × 7] 0 2 B A [1 × 7] [1 × 7] 0.0419 3 C A [1 × 7] [1 × 7] 0.0313 4 D A [1 × 7] [1 × 7] 0.138 5 E A [1 × 7] [1 × 7] 0.0694 6 A B [1 × 7] [1 × 7] 0.0419 7 B B [1 × 7] [1 × 7] 0 8 C B [1 × 7] [1 × 7] 0.0464 9 D B [1 × 7] [1 × 7] 0.153 10 E B [1 × 7] [1 × 7] 0.0305 # … with 15 more rows JSダイバージェンス Jensen-Shannon divergence
  67. JSダイバージェンス Jensen-Shannon divergence matrix_JSD <- dat_JSD %>% select(Var1, Var2, JSD)

    %>% pivot_wider(values_from = JSD, names_from = Var2) %>% column_to_rownames("Var1") %>% as.matrix() A B C D E A 0.00000000 0.04194956 0.03128371 0.13755837 0.06938549 B 0.04194956 0.00000000 0.04635445 0.15325862 0.03049512 C 0.03128371 0.04635445 0.00000000 0.05335197 0.07958686 D 0.13755837 0.15325862 0.05335197 0.00000000 0.21799323 E 0.06938549 0.03049512 0.07958686 0.21799323 0.00000000
  68. JSダイバージェンス Jensen-Shannon divergence matrix_JSD %>% as.dist() %>% hclust() %>% ggdendro::ggdendrogram()

  69. まとめ

  70. ৘ใྔ ࣮ଘ ৘ใ σʔλ Ϧϯΰ  ූ߸Խ ৘ใྔͷଛࣦ

  71. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. post ⾃分 pre ⾃分 変化量 情報量 事象
  72. エントロピー Entropy ⾃⼰情報量 Self information 𝐻 𝑃 = 𝐸 𝐼

    ω = − : #∈% 𝑝 ω log 𝑝(ω) 𝐻 𝑋 = 𝐸 𝐼 𝑥 = − : &∈' 𝑝 𝑥 log 𝑝(𝑥) 𝐼 ω = − log 𝑝(ω) 𝐼 𝑥 = − log 𝑝(𝑥) 連続系では積分になり 𝑝 𝑥 は確率密度関数
  73. エントロピーの変化量 事後 事前 𝐸 𝐼G ω − 𝐼 ω =

    7 <∈> 𝑃(ω) log 𝑃(ω) 𝑄(ω) ≔ 𝐷JK (𝑃||𝑄) KLダイバージェンス Kullback-Leibler divergence
  74. 𝐷() (𝑃| 𝑄 ≔ λ𝐷*+ (𝑃| λ𝑄 + 1 −

    λ 𝑄 + (1 − λ)λ𝐷*+ (𝑄| λ𝑃 + 1 − λ 𝑃 λ = ! " の時、 𝐷() (𝑃| 𝑄 = ! " {𝐷*+ (𝑃|| ,-. " ) + 𝐷*+ (𝑄|| ,-. " )} ⇔ 𝐷() (𝑃| 𝑄 = 𝐷() (𝑄| 𝑃 JSダイバージェンス Jensen-Shannon divergence
  75. プロローグ エピローグ 起 承 転 結 旅⽴ち 新たな旅⽴ち 【物語】 殺⼈事件,社会変⾰,

    地球滅亡,宇宙崩壊, etc. 𝐻[post] JSダイバージェンス 事象 𝐷%& (pre||post) 𝐻[pre]
  76. JSダイバージェンス Jensen-Shannon divergence # A tibble: 5 x 8 key

    a b c d e f g <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 A 0.167 0.167 0.238 0.0714 0.167 0.143 0.0476 2 B 0.0769 0.0769 0.231 0.154 0.0385 0.231 0.192 3 C 0.0385 0.192 0.269 0.231 0.0385 0.154 0.0769 4 D 0.152 0.0303 0.182 0.212 0.0606 0.0909 0.273 5 E 0.0227 0.0227 0.205 0.136 0.182 0.227 0.205
  77. Enjoy!