SlideShare a Scribd company logo
第55回 勉強会@東京 (#TokyoR) 30/07/2016
Cutoff値は自分で決めたい
~生存時間分析とROC curve
@fuuuumin314
自己紹介
• ID:@fuuuumin314
• 大学5年生
• Rとの関わり:主に研究室のデータ分析ツールとして利用
• Rユーザー歴:1年(初心者)
• TokyoR参加:2回目
注意
• もともと統計、機械学習、Rは独学なので間違い、改良点がございましたら
ご指摘いただけると幸いです
今回使うデータ
• Melanoma data {MASS}
• 205件のデンマーク人の悪性黒色腫生存データ
• 生存期間、年齢、性別、隆起の厚さ(mm)、潰瘍の有無
今回使うデータ
• Melanoma data {MASS}
• 205件のデンマーク人の悪性黒色腫生存データ
• 生存期間、年齢、性別、隆起の厚さ(mm)、潰瘍の有無
www.skincancer.org
パッケージ紹介
• library(ggplot2) ← 作図おなじみ
• library(dplyr) ← 前処理おなじみ
• library(MASS) ← データ、step wise AIC
• library(survival) ← 生存時間分析
• library(survminer) ← 生存時間プロット
• library(survivalROC) ← 生存時間分析ROC
前処理
## reading and preparing data
df <- Melanoma
df$status <- as.factor(df$status)
df$ulcer <- as.factor(df$ulcer)
df1 <- df %>%
## excluding cases
dplyr::filter(!(status == 3)) %>%
## alive = 0, dead = 1
dplyr::mutate(cens = ifelse(status == 1, 1, 0))
df1$cens <- as.integer(df1$cens)
>head(df1)
> head(df1)
time status sex age year thickness ulcer cens
1 35 2 1 41 1977 1.34 0 0
2 185 1 1 52 1965 12.08 1 1
3 204 1 1 28 1971 4.84 1 1
4 210 1 1 77 1972 5.16 1 1
5 232 1 1 49 1968 12.88 1 1
6 279 1 0 68 1971 7.41 1 1
単変量解析: code
ulcer_fit <- survfit(Surv(time, cens) ~ ulcer, data = df1)
ulcer_p <- ggsurvplot(fit = ulcer_fit,
risk.table = TRUE,
pval = TRUE,
conf.int = TRUE)
ulcer_p
単変量解析: result
多変量解析: Cox hazard model
ℎ 𝑡 𝑥 = ℎ0(𝑡)exp(𝛽1 𝑥1 + 𝛽2 𝑥2 + ・・・ + 𝛽 𝑘 𝑥 𝑘)
• 各時刻において、ある共変量𝑥 𝑘が1増加したときにイベント発生リス
ク(ハザード比)が何倍になるかを推定
• 時間に依らずハザード比が一定である仮定
→ 残差分析(省略)
多変量解析: code
## multivariate
cox_fit <- coxph(Surv(time, cens) ~ sex + age + thickness + ulcer,
data = df1)
## variable selection
cox_fit2 <- stepAIC(cox_fit)
summary(cox_fit2)
多変量解析: result
> summary(cox_fit2, digits = 3)
Call:
coxph(formula = Surv(time, cens) ~ sex + age + thickness + ulcer,
data = df1)
n= 191, number of events= 57
coef exp(coef) se(coef) z Pr(>|z|)
sex 0.45794 1.58082 0.26832 1.707 0.087873 .
age 0.01429 1.01439 0.00834 1.713 0.086634 .
thickness 0.11137 1.11781 0.03725 2.990 0.002790 **
ulcer1 1.13193 3.10162 0.30961 3.656 0.000256 ***
多変量解析: result
> summary(cox_fit2, digits = 3)
Call:
coxph(formula = Surv(time, cens) ~ sex + age + thickness + ulcer,
data = df1)
n= 191, number of events= 57
coef exp(coef) se(coef) z Pr(>|z|)
sex 0.45794 1.58082 0.26832 1.707 0.087873 .
age 0.01429 1.01439 0.00834 1.713 0.086634 .
thickness 0.11137 1.11781 0.03725 2.990 0.002790 **
ulcer1 1.13193 3.10162 0.30961 3.656 0.000256 ***
結局、thickness の予測能は?
結局、thickness の予測能は?
> range(df1$thickness)
[1] 0.10 17.42
p <- ggplot(data = df1, aes(x = thickness)) + geom_histogram(binwidth
= 1.0)
p <- p + ggtitle("histgram of thickness by 1.0 mm")
p <- p + theme_bw()
p
結局、thickness の予測能は?
> range(df1$thickness)
[1] 0.10 17.42
p <- ggplot(data = df1, aes(x = thickness)) + geom_histogram(binwidth
= 1.0)
p <- p + ggtitle("histgram of thickness by 1.0 mm")
p <- p + theme_bw()
p
ROC curveについて1
値 正しい分類
16 T
15 T
14 F
13 T
12 T
11 T
10 F
9 T
8 T
8 T
8 T
8 F
7 F
6 T
5 F
例えば、11以上を陽性とした場合、
真にT 真にF
陽性 5 1
陰性 5 4
奥村 晴彦 先生のhpより
感度 = 真にTのうち、陽性だった割合
= 5 / 5+5 = 50%
特異度 = 真にFのうち、陰性だった割合
= 4 / 1+4 = 80%
1-特異度 = 偽陽性(FP)
このCut-off値を変化させて感度、特異度(偽陽性)をプロットしたグラフが
ROC曲線
ROC curveについて2
• 一般的なROC curveを時間依存の関数にしたものを今回使う
• 詳細は、
Heagerty, P.J., Lumley, T., Pepe, M. S. (2000) Time-dependent ROC Curves for
Censored Survival Data and a Diagnostic Marker Biometrics, 56, 337 – 344
ROC curve: code
## cutoff of 5 years OS
cutoff <- 365*5
AUC_OS_5y <- survivalROC(Stime = df1$time,
status = df1$cens,
marker = df1$thickness,
predict.time = cutoff,
method = "KM")
plot(AUC_OS_5y$FP, AUC_OS_5y$TP, type="l", xlim=c(0,1), ylim=c(0,1),
xlab=paste( "FP", "n", "AUC = ",round(AUC_OS_5y$AUC,3)),
ylab="TP",main="MM thickness OS, Method = KM n cutoff = 5 years")
abline(0,1)
5 years ROC curve: result
Cut-off値の決定
感度=1, 特異度=1
最短距離
Cut-off値の決定: code
OS_5y_df <- cbind.data.frame(AUC_OS_5y$cut.values,
AUC_OS_5y$TP,
AUC_OS_5y$FP)
colnames(OS_5y_df) <- c("cut_values", "TP", "FP")
OS_5y_df <- OS_5y_df %>%
dplyr::mutate(distance = ((1-TP)^2 + (FP)^2))
distance <- OS_5y_df %>%
dplyr::arrange(distance)
round(head(distance), 3)
Cut-off値の決定: result
> round(head(distance), 3)
cut_values TP FP distance Youden_index
1 2.26 0.765 0.310 0.151 0.455
2 2.34 0.743 0.310 0.162 0.433
3 2.10 0.786 0.344 0.164 0.442
4 1.94 0.808 0.358 0.165 0.451
5 3.22 0.634 0.179 0.166 0.455
6 3.06 0.655 0.234 0.173 0.421
Cross validation (4-folds)
• ランダムに4群に割り付けて
set.seed(55)
df_sample <- df1 %>%
dplyr::mutate(group = sample(x = c(1:4), size = dim(df1)[1], replace = TRUE))
> df_sample$group <- as.factor(df_sample$group)
> summary(df_sample$group)
1 2 3 4
44 51 42 54
Cross validation (4-folds): result
Cutoff = 1.94, AUC = 0.736 Cutoff = 2.26, AUC = 0.796
Cutoff = 2.26, AUC = 0.762 Cutoff = 2.26, AUC = 0.797
まとめ
• Cut-off値決めにROC曲線が有効
• ただしcross-validation で閾値が変動する可能性あり
• 生存曲線でもROC曲線が使える。パッケージもある
反省
• 生存時間の変化によってAUCの変化を示すことができなかった
• あくまでROC曲線は単変量解析のため、多変量のときの予測性能を保障できな
い
• 次回は自分でデータスクレイピングしたい
反省
• 生存時間の変化によってAUCの変化を示すことができなかった
→ iAnalysis ~おとうさんの解析日記~ [R program]時間依存性ROC曲線法
• あくまでROC曲線は単変量解析のため、多変量のときの予測性能を保障できない
→Nomogram (Tokyo.R #46 Cox比例ハザードモデルとその周辺)
→Nomograms for High-Dimensional Data などで正則化
• 次回は自分でデータスクレイピングしたい
参考資料
• Tokyo R の過去の資料
• Rによるデータサイエンス 金 明哲
• Qiita dplyrを使いこなす!
• 大阪大学大学院医学系研究科 老年・腎臓内科学 腎臓内科 hp
• R bloggers “Survival plots have never been so informative”
Enjoy !
ROC curve: code
df_1 <- df_sample %>%
dplyr::filter(!(group == 1))
## cutoff of 5 years OS
cutoff <- 365*5
AUC_OS_5y <- survivalROC(Stime = df_1$time, status = df_1$cens,
marker = df_1$thickness, predict.time = cutoff, method = "KM")
OS_5y_df <- cbind.data.frame(AUC_OS_5y$cut.values, AUC_OS_5y$TP,
AUC_OS_5y$FP)
colnames(OS_5y_df) <- c("cut_values", "TP", "FP")
OS_5y_df <- OS_5y_df %>%
dplyr::mutate(distance = ((1-TP)^2 + (FP)^2)) %>%
dplyr::mutate(Youden_index = (TP - FP))
distance <- OS_5y_df %>%
dplyr::arrange(distance)
cut_value <- distance[1, 1]
cut_value
df_cut <- df_sample %>%
dplyr::filter(group == 1) %>%
dplyr::mutate(thick_dicot = ifelse(thickness >= cut_value, 1, 0))
## univariate by thickness
## low:0, high:1
thick_fit <- survfit(Surv(time, cens) ~ thick_dicot, data = df_cut)
thick_fit
thick_p <- ggsurvplot(fit = thick_fit,
risk.table = TRUE,
pval = TRUE,
conf.int = TRUE)
thick_p

More Related Content

What's hot

岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02
goony0101
 
1 4.回帰分析と分散分析
1 4.回帰分析と分散分析1 4.回帰分析と分散分析
1 4.回帰分析と分散分析
logics-of-blue
 
ロジスティック回帰分析の入門 -予測モデル構築-
ロジスティック回帰分析の入門 -予測モデル構築-ロジスティック回帰分析の入門 -予測モデル構築-
ロジスティック回帰分析の入門 -予測モデル構築-Koichiro Gibo
 
Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~
Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~
Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~
Satoshi Fujii
 
R Markdownによるドキュメント生成と バージョン管理入門
R Markdownによるドキュメント生成と バージョン管理入門R Markdownによるドキュメント生成と バージョン管理入門
R Markdownによるドキュメント生成と バージョン管理入門
nocchi_airport
 
Stanの便利な事後処理関数
Stanの便利な事後処理関数Stanの便利な事後処理関数
Stanの便利な事後処理関数
daiki hojo
 
ベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-oldベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-old
Naoki Hayashi
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
Hiroshi Shimizu
 
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とRブートストラップ法とその周辺とR
ブートストラップ法とその周辺とRDaisuke Yoneoka
 
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介
Taku Yoshioka
 
Stanコードの書き方 中級編
Stanコードの書き方 中級編Stanコードの書き方 中級編
Stanコードの書き方 中級編
Hiroshi Shimizu
 
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnetNagi Teramo
 
臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜
臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜
臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜
Yasuyuki Okumura
 
ベイズ入門
ベイズ入門ベイズ入門
ベイズ入門
Zansa
 
DARM勉強会第3回 (missing data analysis)
DARM勉強会第3回 (missing data analysis)DARM勉強会第3回 (missing data analysis)
DARM勉強会第3回 (missing data analysis)
Masaru Tokuoka
 
ベイズ主義による研究の報告方法
ベイズ主義による研究の報告方法ベイズ主義による研究の報告方法
ベイズ主義による研究の報告方法
Masaru Tokuoka
 
第4回DARM勉強会 (多母集団同時分析)
第4回DARM勉強会 (多母集団同時分析)第4回DARM勉強会 (多母集団同時分析)
第4回DARM勉強会 (多母集団同時分析)
Masaru Tokuoka
 
金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル
Kei Nakagawa
 
(実験心理学徒だけど)一般化線形混合モデルを使ってみた
(実験心理学徒だけど)一般化線形混合モデルを使ってみた(実験心理学徒だけど)一般化線形混合モデルを使ってみた
(実験心理学徒だけど)一般化線形混合モデルを使ってみた
Takashi Yamane
 
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
Koichiro Gibo
 

What's hot (20)

岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02
 
1 4.回帰分析と分散分析
1 4.回帰分析と分散分析1 4.回帰分析と分散分析
1 4.回帰分析と分散分析
 
ロジスティック回帰分析の入門 -予測モデル構築-
ロジスティック回帰分析の入門 -予測モデル構築-ロジスティック回帰分析の入門 -予測モデル構築-
ロジスティック回帰分析の入門 -予測モデル構築-
 
Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~
Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~
Bioconductorも便利ですよ ~ConsensusClusterPlus(CCP)の紹介~
 
R Markdownによるドキュメント生成と バージョン管理入門
R Markdownによるドキュメント生成と バージョン管理入門R Markdownによるドキュメント生成と バージョン管理入門
R Markdownによるドキュメント生成と バージョン管理入門
 
Stanの便利な事後処理関数
Stanの便利な事後処理関数Stanの便利な事後処理関数
Stanの便利な事後処理関数
 
ベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-oldベイズ統計学の概論的紹介-old
ベイズ統計学の概論的紹介-old
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とRブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
 
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介
 
Stanコードの書き方 中級編
Stanコードの書き方 中級編Stanコードの書き方 中級編
Stanコードの書き方 中級編
 
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
 
臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜
臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜
臨床疫学研究における傾向スコア分析の使い⽅ 〜観察研究における治療効果研究〜
 
ベイズ入門
ベイズ入門ベイズ入門
ベイズ入門
 
DARM勉強会第3回 (missing data analysis)
DARM勉強会第3回 (missing data analysis)DARM勉強会第3回 (missing data analysis)
DARM勉強会第3回 (missing data analysis)
 
ベイズ主義による研究の報告方法
ベイズ主義による研究の報告方法ベイズ主義による研究の報告方法
ベイズ主義による研究の報告方法
 
第4回DARM勉強会 (多母集団同時分析)
第4回DARM勉強会 (多母集団同時分析)第4回DARM勉強会 (多母集団同時分析)
第4回DARM勉強会 (多母集団同時分析)
 
金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル
 
(実験心理学徒だけど)一般化線形混合モデルを使ってみた
(実験心理学徒だけど)一般化線形混合モデルを使ってみた(実験心理学徒だけど)一般化線形混合モデルを使ってみた
(実験心理学徒だけど)一般化線形混合モデルを使ってみた
 
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
 

Viewers also liked

Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327Ken Haneda
 
#1Creators Learning English Meetup ~2017年、今年こそ英語!~
#1Creators Learning English Meetup ~2017年、今年こそ英語!~#1Creators Learning English Meetup ~2017年、今年こそ英語!~
#1Creators Learning English Meetup ~2017年、今年こそ英語!~
Ken Haneda
 
20170123 creators learning_english_meetup
20170123 creators learning_english_meetup20170123 creators learning_english_meetup
20170123 creators learning_english_meetup
将一 深見
 
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
Tomohiro Fukuda
 
Mvvm is like born fraction
Mvvm is like born fractionMvvm is like born fraction
Mvvm is like born fraction
Ken Haneda
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
Narihiro Nakamura
 
20160730tokyor55
20160730tokyor5520160730tokyor55
20160730tokyor55
Med_KU
 
SOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENT
SOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENTSOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENT
SOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENT
Tomohiro Fukuda
 
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Antoine Choppin
 
DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...
DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...
DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...
Tomohiro Fukuda
 
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...
Tomohiro Fukuda
 
PyCon JP 2016 Talk#024 ja
 PyCon JP 2016 Talk#024 ja PyCon JP 2016 Talk#024 ja
PyCon JP 2016 Talk#024 ja
drillan
 
型ヒントについて考えよう!
型ヒントについて考えよう!型ヒントについて考えよう!
型ヒントについて考えよう!
Yusuke Miyazaki
 
人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ slide share
人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ  slide share人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ  slide share
人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ slide share
Ogushi Masaya
 
Factorization machines with r
Factorization machines with rFactorization machines with r
Factorization machines with r
Shota Yasui
 
可視化周辺の進化がヤヴァイ 〜2016〜
可視化周辺の進化がヤヴァイ 〜2016〜可視化周辺の進化がヤヴァイ 〜2016〜
可視化周辺の進化がヤヴァイ 〜2016〜
Takashi Kitano
 
Availability of Mobile Augmented Reality System for Urban Landscape Simulation
Availability of Mobile Augmented Reality System for Urban Landscape SimulationAvailability of Mobile Augmented Reality System for Urban Landscape Simulation
Availability of Mobile Augmented Reality System for Urban Landscape Simulation
Tomohiro Fukuda
 
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape Assessment
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape AssessmentGOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape Assessment
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape Assessment
Tomohiro Fukuda
 
高速・省メモリにlibsvm形式で ダンプする方法を研究してみた
高速・省メモリにlibsvm形式で ダンプする方法を研究してみた高速・省メモリにlibsvm形式で ダンプする方法を研究してみた
高速・省メモリにlibsvm形式で ダンプする方法を研究してみた
Keisuke Hosaka
 
心理学における「再現性」の問題とBayes Factor
心理学における「再現性」の問題とBayes Factor心理学における「再現性」の問題とBayes Factor
心理学における「再現性」の問題とBayes Factor
Shushi Namba
 

Viewers also liked (20)

Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327
 
#1Creators Learning English Meetup ~2017年、今年こそ英語!~
#1Creators Learning English Meetup ~2017年、今年こそ英語!~#1Creators Learning English Meetup ~2017年、今年こそ英語!~
#1Creators Learning English Meetup ~2017年、今年こそ英語!~
 
20170123 creators learning_english_meetup
20170123 creators learning_english_meetup20170123 creators learning_english_meetup
20170123 creators learning_english_meetup
 
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
 
Mvvm is like born fraction
Mvvm is like born fractionMvvm is like born fraction
Mvvm is like born fraction
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
20160730tokyor55
20160730tokyor5520160730tokyor55
20160730tokyor55
 
SOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENT
SOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENTSOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENT
SOAR: SENSOR ORIENTED MOBILE AUGMENTED REALITY FOR URBAN LANDSCAPE ASSESSMENT
 
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
 
DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...
DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...
DISTRIBUTED AND SYNCHRONISED VR MEETING USING CLOUD COMPUTING: Availability a...
 
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...
A STUDY OF VARIATION OF NORMAL OF POLY-GONS CREATED BY POINT CLOUD DATA FOR A...
 
PyCon JP 2016 Talk#024 ja
 PyCon JP 2016 Talk#024 ja PyCon JP 2016 Talk#024 ja
PyCon JP 2016 Talk#024 ja
 
型ヒントについて考えよう!
型ヒントについて考えよう!型ヒントについて考えよう!
型ヒントについて考えよう!
 
人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ slide share
人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ  slide share人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ  slide share
人工知能の技術で有名なニューラルネットワークのフレームワークである #Chainer を用いた対話botを使った俺の屍を越えてゆけ slide share
 
Factorization machines with r
Factorization machines with rFactorization machines with r
Factorization machines with r
 
可視化周辺の進化がヤヴァイ 〜2016〜
可視化周辺の進化がヤヴァイ 〜2016〜可視化周辺の進化がヤヴァイ 〜2016〜
可視化周辺の進化がヤヴァイ 〜2016〜
 
Availability of Mobile Augmented Reality System for Urban Landscape Simulation
Availability of Mobile Augmented Reality System for Urban Landscape SimulationAvailability of Mobile Augmented Reality System for Urban Landscape Simulation
Availability of Mobile Augmented Reality System for Urban Landscape Simulation
 
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape Assessment
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape AssessmentGOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape Assessment
GOAR: GIS Oriented Mobile Augmented Reality for Urban Landscape Assessment
 
高速・省メモリにlibsvm形式で ダンプする方法を研究してみた
高速・省メモリにlibsvm形式で ダンプする方法を研究してみた高速・省メモリにlibsvm形式で ダンプする方法を研究してみた
高速・省メモリにlibsvm形式で ダンプする方法を研究してみた
 
心理学における「再現性」の問題とBayes Factor
心理学における「再現性」の問題とBayes Factor心理学における「再現性」の問題とBayes Factor
心理学における「再現性」の問題とBayes Factor
 

Similar to No55 tokyo r_presentation

Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
Hiroki Itô
 
Survival analysis0702
Survival analysis0702Survival analysis0702
Survival analysis0702
Nobuaki Oshiro
 
Survival analysis0702 2
Survival analysis0702 2Survival analysis0702 2
Survival analysis0702 2
Nobuaki Oshiro
 
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
Toru Tamaki
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
Shuyo Nakatani
 
Rでシステムバイオロジー
RでシステムバイオロジーRでシステムバイオロジー
Rでシステムバイオロジー弘毅 露崎
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333Issei Kurahashi
 
Rによる繰り返しの並列処理
Rによる繰り返しの並列処理Rによる繰り返しの並列処理
Rによる繰り返しの並列処理
wada, kazumi
 
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
Toru Tamaki
 
みどりぼん9章前半
みどりぼん9章前半みどりぼん9章前半
みどりぼん9章前半Akifumi Eguchi
 
局所特徴量と統計学習手法による物体検出
局所特徴量と統計学習手法による物体検出局所特徴量と統計学習手法による物体検出
局所特徴量と統計学習手法による物体検出MPRG_Chubu_University
 
アカスジカスミカメの分布拡大メカニズム
アカスジカスミカメの分布拡大メカニズムアカスジカスミカメの分布拡大メカニズム
アカスジカスミカメの分布拡大メカニズム
arosawa
 
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
koba cky
 
C02
C02C02
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
 
JSIAM_2019_9_4
JSIAM_2019_9_4JSIAM_2019_9_4
JSIAM_2019_9_4
KoutaFunakoshi
 
文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference
文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference
文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference
Toru Tamaki
 
打ち切りデータのヒストグラム
打ち切りデータのヒストグラム打ち切りデータのヒストグラム
打ち切りデータのヒストグラム
Ko Abe
 
K060 中心極限定理clt
K060 中心極限定理cltK060 中心極限定理clt
K060 中心極限定理cltt2tarumi
 
相互相関関数の最大化と時間差推定
相互相関関数の最大化と時間差推定相互相関関数の最大化と時間差推定
相互相関関数の最大化と時間差推定
KoueiYamaoka
 

Similar to No55 tokyo r_presentation (20)

Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
 
Survival analysis0702
Survival analysis0702Survival analysis0702
Survival analysis0702
 
Survival analysis0702 2
Survival analysis0702 2Survival analysis0702 2
Survival analysis0702 2
 
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
Rでシステムバイオロジー
RでシステムバイオロジーRでシステムバイオロジー
Rでシステムバイオロジー
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
 
Rによる繰り返しの並列処理
Rによる繰り返しの並列処理Rによる繰り返しの並列処理
Rによる繰り返しの並列処理
 
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
 
みどりぼん9章前半
みどりぼん9章前半みどりぼん9章前半
みどりぼん9章前半
 
局所特徴量と統計学習手法による物体検出
局所特徴量と統計学習手法による物体検出局所特徴量と統計学習手法による物体検出
局所特徴量と統計学習手法による物体検出
 
アカスジカスミカメの分布拡大メカニズム
アカスジカスミカメの分布拡大メカニズムアカスジカスミカメの分布拡大メカニズム
アカスジカスミカメの分布拡大メカニズム
 
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
 
C02
C02C02
C02
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
JSIAM_2019_9_4
JSIAM_2019_9_4JSIAM_2019_9_4
JSIAM_2019_9_4
 
文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference
文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference
文献紹介:Selective Feature Compression for Efficient Activity Recognition Inference
 
打ち切りデータのヒストグラム
打ち切りデータのヒストグラム打ち切りデータのヒストグラム
打ち切りデータのヒストグラム
 
K060 中心極限定理clt
K060 中心極限定理cltK060 中心極限定理clt
K060 中心極限定理clt
 
相互相関関数の最大化と時間差推定
相互相関関数の最大化と時間差推定相互相関関数の最大化と時間差推定
相互相関関数の最大化と時間差推定
 

No55 tokyo r_presentation

  • 1. 第55回 勉強会@東京 (#TokyoR) 30/07/2016 Cutoff値は自分で決めたい ~生存時間分析とROC curve @fuuuumin314
  • 2. 自己紹介 • ID:@fuuuumin314 • 大学5年生 • Rとの関わり:主に研究室のデータ分析ツールとして利用 • Rユーザー歴:1年(初心者) • TokyoR参加:2回目
  • 4. 今回使うデータ • Melanoma data {MASS} • 205件のデンマーク人の悪性黒色腫生存データ • 生存期間、年齢、性別、隆起の厚さ(mm)、潰瘍の有無
  • 5. 今回使うデータ • Melanoma data {MASS} • 205件のデンマーク人の悪性黒色腫生存データ • 生存期間、年齢、性別、隆起の厚さ(mm)、潰瘍の有無 www.skincancer.org
  • 6. パッケージ紹介 • library(ggplot2) ← 作図おなじみ • library(dplyr) ← 前処理おなじみ • library(MASS) ← データ、step wise AIC • library(survival) ← 生存時間分析 • library(survminer) ← 生存時間プロット • library(survivalROC) ← 生存時間分析ROC
  • 7. 前処理 ## reading and preparing data df <- Melanoma df$status <- as.factor(df$status) df$ulcer <- as.factor(df$ulcer) df1 <- df %>% ## excluding cases dplyr::filter(!(status == 3)) %>% ## alive = 0, dead = 1 dplyr::mutate(cens = ifelse(status == 1, 1, 0)) df1$cens <- as.integer(df1$cens)
  • 8. >head(df1) > head(df1) time status sex age year thickness ulcer cens 1 35 2 1 41 1977 1.34 0 0 2 185 1 1 52 1965 12.08 1 1 3 204 1 1 28 1971 4.84 1 1 4 210 1 1 77 1972 5.16 1 1 5 232 1 1 49 1968 12.88 1 1 6 279 1 0 68 1971 7.41 1 1
  • 9. 単変量解析: code ulcer_fit <- survfit(Surv(time, cens) ~ ulcer, data = df1) ulcer_p <- ggsurvplot(fit = ulcer_fit, risk.table = TRUE, pval = TRUE, conf.int = TRUE) ulcer_p
  • 11. 多変量解析: Cox hazard model ℎ 𝑡 𝑥 = ℎ0(𝑡)exp(𝛽1 𝑥1 + 𝛽2 𝑥2 + ・・・ + 𝛽 𝑘 𝑥 𝑘) • 各時刻において、ある共変量𝑥 𝑘が1増加したときにイベント発生リス ク(ハザード比)が何倍になるかを推定 • 時間に依らずハザード比が一定である仮定 → 残差分析(省略)
  • 12. 多変量解析: code ## multivariate cox_fit <- coxph(Surv(time, cens) ~ sex + age + thickness + ulcer, data = df1) ## variable selection cox_fit2 <- stepAIC(cox_fit) summary(cox_fit2)
  • 13. 多変量解析: result > summary(cox_fit2, digits = 3) Call: coxph(formula = Surv(time, cens) ~ sex + age + thickness + ulcer, data = df1) n= 191, number of events= 57 coef exp(coef) se(coef) z Pr(>|z|) sex 0.45794 1.58082 0.26832 1.707 0.087873 . age 0.01429 1.01439 0.00834 1.713 0.086634 . thickness 0.11137 1.11781 0.03725 2.990 0.002790 ** ulcer1 1.13193 3.10162 0.30961 3.656 0.000256 ***
  • 14. 多変量解析: result > summary(cox_fit2, digits = 3) Call: coxph(formula = Surv(time, cens) ~ sex + age + thickness + ulcer, data = df1) n= 191, number of events= 57 coef exp(coef) se(coef) z Pr(>|z|) sex 0.45794 1.58082 0.26832 1.707 0.087873 . age 0.01429 1.01439 0.00834 1.713 0.086634 . thickness 0.11137 1.11781 0.03725 2.990 0.002790 ** ulcer1 1.13193 3.10162 0.30961 3.656 0.000256 ***
  • 16. 結局、thickness の予測能は? > range(df1$thickness) [1] 0.10 17.42 p <- ggplot(data = df1, aes(x = thickness)) + geom_histogram(binwidth = 1.0) p <- p + ggtitle("histgram of thickness by 1.0 mm") p <- p + theme_bw() p
  • 17. 結局、thickness の予測能は? > range(df1$thickness) [1] 0.10 17.42 p <- ggplot(data = df1, aes(x = thickness)) + geom_histogram(binwidth = 1.0) p <- p + ggtitle("histgram of thickness by 1.0 mm") p <- p + theme_bw() p
  • 18. ROC curveについて1 値 正しい分類 16 T 15 T 14 F 13 T 12 T 11 T 10 F 9 T 8 T 8 T 8 T 8 F 7 F 6 T 5 F 例えば、11以上を陽性とした場合、 真にT 真にF 陽性 5 1 陰性 5 4 奥村 晴彦 先生のhpより 感度 = 真にTのうち、陽性だった割合 = 5 / 5+5 = 50% 特異度 = 真にFのうち、陰性だった割合 = 4 / 1+4 = 80% 1-特異度 = 偽陽性(FP) このCut-off値を変化させて感度、特異度(偽陽性)をプロットしたグラフが ROC曲線
  • 19. ROC curveについて2 • 一般的なROC curveを時間依存の関数にしたものを今回使う • 詳細は、 Heagerty, P.J., Lumley, T., Pepe, M. S. (2000) Time-dependent ROC Curves for Censored Survival Data and a Diagnostic Marker Biometrics, 56, 337 – 344
  • 20. ROC curve: code ## cutoff of 5 years OS cutoff <- 365*5 AUC_OS_5y <- survivalROC(Stime = df1$time, status = df1$cens, marker = df1$thickness, predict.time = cutoff, method = "KM") plot(AUC_OS_5y$FP, AUC_OS_5y$TP, type="l", xlim=c(0,1), ylim=c(0,1), xlab=paste( "FP", "n", "AUC = ",round(AUC_OS_5y$AUC,3)), ylab="TP",main="MM thickness OS, Method = KM n cutoff = 5 years") abline(0,1)
  • 21. 5 years ROC curve: result
  • 23. Cut-off値の決定: code OS_5y_df <- cbind.data.frame(AUC_OS_5y$cut.values, AUC_OS_5y$TP, AUC_OS_5y$FP) colnames(OS_5y_df) <- c("cut_values", "TP", "FP") OS_5y_df <- OS_5y_df %>% dplyr::mutate(distance = ((1-TP)^2 + (FP)^2)) distance <- OS_5y_df %>% dplyr::arrange(distance) round(head(distance), 3)
  • 24. Cut-off値の決定: result > round(head(distance), 3) cut_values TP FP distance Youden_index 1 2.26 0.765 0.310 0.151 0.455 2 2.34 0.743 0.310 0.162 0.433 3 2.10 0.786 0.344 0.164 0.442 4 1.94 0.808 0.358 0.165 0.451 5 3.22 0.634 0.179 0.166 0.455 6 3.06 0.655 0.234 0.173 0.421
  • 25. Cross validation (4-folds) • ランダムに4群に割り付けて set.seed(55) df_sample <- df1 %>% dplyr::mutate(group = sample(x = c(1:4), size = dim(df1)[1], replace = TRUE)) > df_sample$group <- as.factor(df_sample$group) > summary(df_sample$group) 1 2 3 4 44 51 42 54
  • 26. Cross validation (4-folds): result Cutoff = 1.94, AUC = 0.736 Cutoff = 2.26, AUC = 0.796 Cutoff = 2.26, AUC = 0.762 Cutoff = 2.26, AUC = 0.797
  • 27. まとめ • Cut-off値決めにROC曲線が有効 • ただしcross-validation で閾値が変動する可能性あり • 生存曲線でもROC曲線が使える。パッケージもある
  • 29. 反省 • 生存時間の変化によってAUCの変化を示すことができなかった → iAnalysis ~おとうさんの解析日記~ [R program]時間依存性ROC曲線法 • あくまでROC曲線は単変量解析のため、多変量のときの予測性能を保障できない →Nomogram (Tokyo.R #46 Cox比例ハザードモデルとその周辺) →Nomograms for High-Dimensional Data などで正則化 • 次回は自分でデータスクレイピングしたい
  • 30. 参考資料 • Tokyo R の過去の資料 • Rによるデータサイエンス 金 明哲 • Qiita dplyrを使いこなす! • 大阪大学大学院医学系研究科 老年・腎臓内科学 腎臓内科 hp • R bloggers “Survival plots have never been so informative”
  • 32. ROC curve: code df_1 <- df_sample %>% dplyr::filter(!(group == 1)) ## cutoff of 5 years OS cutoff <- 365*5 AUC_OS_5y <- survivalROC(Stime = df_1$time, status = df_1$cens, marker = df_1$thickness, predict.time = cutoff, method = "KM") OS_5y_df <- cbind.data.frame(AUC_OS_5y$cut.values, AUC_OS_5y$TP, AUC_OS_5y$FP) colnames(OS_5y_df) <- c("cut_values", "TP", "FP") OS_5y_df <- OS_5y_df %>% dplyr::mutate(distance = ((1-TP)^2 + (FP)^2)) %>% dplyr::mutate(Youden_index = (TP - FP)) distance <- OS_5y_df %>% dplyr::arrange(distance) cut_value <- distance[1, 1] cut_value df_cut <- df_sample %>% dplyr::filter(group == 1) %>% dplyr::mutate(thick_dicot = ifelse(thickness >= cut_value, 1, 0)) ## univariate by thickness ## low:0, high:1 thick_fit <- survfit(Surv(time, cens) ~ thick_dicot, data = df_cut) thick_fit thick_p <- ggsurvplot(fit = thick_fit, risk.table = TRUE, pval = TRUE, conf.int = TRUE) thick_p