名前はまだない

データ分析とかの備忘録か, 趣味の話か, はたまた

TokyoR#85のLTで発表しました。

はじめに

今日、オンラインで開催されたTokyoR#85のLTの枠で少しお話をしました。

お話しした内容は、階層クラスタリングにおける仮説検定の方法を紹介しました。

スライドはこちらです。

speakerdeck.com

(いつも通り詰め込みすぎて5分じゃ収まらんだろって思ったら、本番が5分ジャストで完璧でした✌️)

内容について

コロナウィルスとSARS系ウィルスの遺伝子情報の近さを分析した研究にも用いられている、ブートストラップ法を用いた階層クラスタリングにおける統計的仮説検定について、簡単にまとめました。

樹形樹におけるブートストラップ法は、斬新だなと思いましたが、20年ぐらい前に提案されている手法です。

遺伝子系の研究では、引用なしに利用されている手法だそうです。

詳しくは、こちらを見てみてください。

saltcooky.hatenablog.com

使用したコード

Rで階層クラスタリングにおける統計的仮説検定を行うにはpvclustパッケージを用います。

京大の下平先生(はかせ)の研修室が開発しているパッケージです。

github.com

今回のスライドの結果を出したコードです。

MNISTのCSVはKaggleから持ってきたやつです。

library(tidyverse)
library(pvclust)
library(parallel)

mnist_df_org <- read_csv("data/mnist_train.csv")

mnist_df <- 
  mnist_df_org %>% 
  filter(label %in% c(6,4,7,9)) %>% 
  mutate(label = as.character(label)) %>% 
  group_by(label) %>% 
  sample_n(4) %>% 
  ungroup() %>% 
  mutate(label = paste0("No",row_number(),"_label",label))

#並列化のおまじない
cl <- makeCluster(detectCores())

label_list <- mnist_df$label

# 説明変数を行に、対象を列にするように転置
mnist_df_t <- 
  mnist_df %>% 
  dplyr::select(-label) %>% 
  t()

colnames(mnist_df_t) <- label_list

B = 4000
sa <- 9^seq(-1,1,length=20)  # マルチスケールの設定のためのリスト

mnist_boot <- pvclust(data = mnist_df_t,
                      r = 1/sa,
                      nboot = B,
                      method.dist = "euclidean",
                      method.hclust = "ward.D2",
                      parallel = cl) 

plot(mnist_boot, cex=0.8, cex.pv=0.8)
pvrect(mnist_boot, alpha = 0.90, pv = "au")

終わりに

オンラインで行う勉強会は、現地に行かない手軽さがありますが、やはり集まって話を聞いて懇親会をするという流れが個人的には好きです。