--- title: "国際脳MRIチュートリアルRmarkdownプログラム" author: "小池進介|東京大学" date: "`r format(Sys.time(), '%Y/%m/%d')` " output: html_document: toc: true toc_depth: 3 toc_float: true df_print: paged keed_me: true theme: flatly --- ## **1. データの確認** ### **1-1. CSVデータを取り込む** ```{r, echo=TRUE, warning=FALSE, message=FALSE} cols <- c("character",rep("factor", 23),rep("character", 4)) Rdata1 <- read.csv("第2回国際脳MRI・臨床データ解析チュートリアル アンケート.csv", header = T, fileEncoding = "utf-8", colClasses = cols) ``` ### **1-2. CSVデータの確認** ```{r, echo=TRUE, warning=FALSE, message=FALSE} library(DT) #DTパッケージを読み込む datatable(Rdata1) ``` - 最初の一行はテスト回答、最初の一列はタイムスタンプなので、削除します - 列名がみずらいので編集します。 ### **1-3. CSVデータの編集&再確認** ```{r, echo=TRUE, warning=FALSE, message=FALSE} Rdata.colnames <- c("Title", "Field", "MRIanalysisYear", "Difficulty_SRPB", "Difficulty_TS", "Difficulty_ComBat", "Difficulty_BMBprotocol", "Difficulty_BMBpipeline", "Difficulty_BMBTS", "Satisfuction_SRPB", "Satisfuction_TS", "Satisfuction_ComBat", "Satisfuction_BMBprotocol", "Satisfuction_BMBpipeline", "Satisfuction_BMBTS", "Length_SRPB", "Length_TS", "Length_ComBat", "Length_BMBprotocol", "Length_BMBpipeline", "Length_BMBTS", "web_satisfuction", "Useful", "GoogPoint", "Improvement", "Future", "Opinion") Rdata <- Rdata1[2:nrow(Rdata1), 2:ncol(Rdata1)] colnames(Rdata) <- Rdata.colnames datatable(Rdata) ``` ___ ## **2. 欠損値の確認** ### **2-1. miceパッケージ** ```{r, echo=TRUE, warning=FALSE, message=FALSE} library(mice) #miceパッケージを読み込む md.pattern(Rdata) ``` - 欠損値がないとかわいいエラーメッセージが記録されるようです。 ___ ## **3. Distribution** ### **3-1. summary()** ```{r, echo=TRUE, warning=FALSE, message=FALSE} summary(Rdata) ``` - みづらいので並び替えたほうが良さそうです ### **3-2. reorder and summary()** ```{r, echo=TRUE, warning=FALSE, message=FALSE} Rdata.temp <- data.frame( factor(Rdata[,1], levels = c("学部学生", "大学院学生", "研究員", "教員・研究職", "医療職")), factor(Rdata[,2], levels = c("神経科学", "精神医学", "神経内科学", "放射線医学")), factor(Rdata[,3], levels = c("ほぼ未経験", "1年未満", "1~3年", "3~5年", "5年以上", "10年以上")), factor(Rdata[,4], levels = c("やさしすぎる", "やさしい", "ちょうどよい", "難しい", "難しすぎる", "不参加")), factor(Rdata[,5], levels = c("やさしすぎる", "やさしい", "ちょうどよい", "難しい", "難しすぎる", "不参加")), factor(Rdata[,6], levels = c("やさしすぎる", "やさしい", "ちょうどよい", "難しい", "難しすぎる", "不参加")), factor(Rdata[,7], levels = c("やさしすぎる", "やさしい", "ちょうどよい", "難しい", "難しすぎる", "不参加")), factor(Rdata[,8], levels = c("やさしすぎる", "やさしい", "ちょうどよい", "難しい", "難しすぎる", "不参加")), factor(Rdata[,9], levels = c("やさしすぎる", "やさしい", "ちょうどよい", "難しい", "難しすぎる", "不参加")), factor(Rdata[,10], levels = c("満足", "やや満足", "どちらでもない", "やや不満足", "不満足", "不参加")), factor(Rdata[,11], levels = c("満足", "やや満足", "どちらでもない", "やや不満足", "不満足", "不参加")), factor(Rdata[,12], levels = c("満足", "やや満足", "どちらでもない", "やや不満足", "不満足", "不参加")), factor(Rdata[,13], levels = c("満足", "やや満足", "どちらでもない", "やや不満足", "不満足", "不参加")), factor(Rdata[,14], levels = c("満足", "やや満足", "どちらでもない", "やや不満足", "不満足", "不参加")), factor(Rdata[,15], levels = c("満足", "やや満足", "どちらでもない", "やや不満足", "不満足", "不参加")), factor(Rdata[,16], levels = c("長すぎる", "長い", "ちょうどよい", "短い", "短すぎる", "不参加")), factor(Rdata[,17], levels = c("長すぎる", "長い", "ちょうどよい", "短い", "短すぎる", "不参加")), factor(Rdata[,18], levels = c("長すぎる", "長い", "ちょうどよい", "短い", "短すぎる", "不参加")), factor(Rdata[,19], levels = c("長すぎる", "長い", "ちょうどよい", "短い", "短すぎる", "不参加")), factor(Rdata[,20], levels = c("長すぎる", "長い", "ちょうどよい", "短い", "短すぎる", "不参加")), factor(Rdata[,21], levels = c("長すぎる", "長い", "ちょうどよい", "短い", "短すぎる", "不参加")), factor(Rdata[,22], levels = c("大変良かった", "良かった", "どちらでもない", "あまりよくなかった", "良くなかった")), factor(Rdata[,23], levels = c("とても役立つ", "役立つ", "どちらでもない", "役立たない", "全く役立たない")), Rdata[,24:27] ) colnames(Rdata.temp) <- Rdata.colnames summary(Rdata.temp) Rdata <- Rdata.temp ``` *http://highschoolstudent.hatenablog.com/entry/2013/12/15/154341* ### **3-3. summarytoolsパッケージ** ```{r, echo=TRUE, warning=FALSE, message=FALSE, plain.ascii=FALSE} # library(summarytools) #summarytoolsパッケージを読み込む #print(dfSummary(Rdata[,1:31], graph.magnif=0.50), method = 'render') ``` **なぜかこれをうごかすとこの先が表示されなくなるので、とりあえずコメントアウトにしています。** **誰か解決策教えて下さい。** - こちらのほうがみやすいですが、いい感じに文字化けしています。 *https://niszet.hatenablog.com/entry/2018/07/23/073000* - おそらくFactorの表記を変えるしかなさそうです。 例えば、 factor(Rdata[,1], labels = c("Univ Student", "Graduate Student", "Post-doc", "Research Staff", "Medical Staff")) とか *http://m-hiyama.hatenablog.com/entry/20151215/1450140312* ### **3-4. geom_bar()** ```{r, echo=TRUE, warning=FALSE, message=FALSE} library(ggplot2) g <- list() for(i in 1:(ncol(Rdata)-4)){ g[[i]] <- ggplot(Rdata, aes(x = eval(parse(text = Rdata.colnames[i])))) + # aes(x = Title) と、""でくくってはいけないため geom_bar() + xlab(Rdata.colnames[i]) } # graphの描出 for (i in 1:23) print(g[[i]]) ``` ```{} ##### Rmarkdownではちいさくてうまくいかなかったので、やめました # library(gridExtra) # g.list <- NULL # for (i in 1:31) g.list <- c(g.list, paste("g[[",i,"]]",sep="")) # g.list.chr <- as.character("") # for (i in 1:31) g.list.chr <- paste(g.list.chr, g.list[i], sep = ",") # library(stringr) # g.list.chr <- str_sub(g.list.chr, start = 2) # eval(parse(text = paste("grid.arrange(",g.list.chr,", ncol = 2)",sep = ""))) ``` *https://qiita.com/nozma/items/cd98ec7938e0783d5d89* *https://rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf* ___ ## **4. 自由記載分** ### **4-1. 良かった点** ```{r, echo=TRUE, warning=FALSE, message=FALSE} comments <- data.frame(Rdata[,1:3],Rdata[,24]) colnames(comments)[4] <- Rdata.colnames[24] comments <- comments[comments[,4]!="",] # no commentを削除 datatable(comments) ``` - ありがとうございました。 ### **4-2. 改善すべき点** ```{r, echo=TRUE, warning=FALSE, message=FALSE} comments <- data.frame(Rdata[,1:3],Rdata[,25]) colnames(comments)[4] <- Rdata.colnames[25] comments <- comments[comments[,4]!="",] # no commentを削除 datatable(comments) ``` - ありがとうございました。 ### **4-3. 今後期待する点** ```{r, echo=TRUE, warning=FALSE, message=FALSE} comments <- data.frame(Rdata[,1:3],Rdata[,26]) colnames(comments)[4] <- Rdata.colnames[26] comments <- comments[comments[,4]!="",] # no commentを削除 datatable(comments) ``` - ありがとうございました。 ### **4-4. その他ご意見** ```{r, echo=TRUE, warning=FALSE, message=FALSE} comments <- data.frame(Rdata[,1:3],Rdata[,27]) colnames(comments)[4] <- Rdata.colnames[27] comments <- comments[comments[,4]!="",] # no commentを削除 datatable(comments) ``` - ありがとうございました。 ___ ## **5. Stats** ### **5-1. tableone()** せっかくなので、MRI解析経験を2群にわけてtableoneで統計かけてみました。 ```{r, echo=TRUE, warning=FALSE, message=FALSE} summary(Rdata[,3]) # というわけで、3年を区切りにしてみます cat.Rdata <- ifelse(as.numeric(Rdata[,3]) <= 3, "Shorter", "Longer") Rdata.tableone <- data.frame(Rdata, cat.Rdata) library(tableone) vars <- Rdata.colnames[c(1:2,4:23)] factorVars <- Rdata.colnames[1:2] table1 <- CreateTableOne(vars = vars, strata = "cat.Rdata", data = Rdata.tableone, factorVars = factorVars) table1 ``` - あまり差はなさそうです。とりあえず連続変数としてt検定もしてみます。 - 不参加を抜かないといけません。 ### **5-2. tableone() 連続変数で** ```{r, echo=TRUE, warning=FALSE, message=FALSE} Rdata.tableone[Rdata.tableone=="不参加"] <- NA Rdata.tableone2 <- Rdata[,1:3] for (i in 4:23) Rdata.tableone2 <- data.frame(Rdata.tableone2, as.numeric(Rdata[,i])) Rdata.tableone2 <- data.frame(Rdata.tableone2, cat.Rdata) colnames(Rdata.tableone2) <- c(Rdata.colnames[1:23], "cat.Rdata") vars <- Rdata.colnames[c(1:2,4:23)] factorVars <- Rdata.colnames[1:2] table2 <- CreateTableOne(vars = vars, strata = "cat.Rdata", data = Rdata.tableone2, factorVars = factorVars) table2 ``` - 数が小さいと「やさしすぎる」「満足」「短すぎる」「役立つ」です。 - この結果だと、MRI経験年数が短いとSRPBに関して満足度が低いということになります(が有意かどうかの判断はお任せします。) ## もしこのRmarkdownについて改善点がありましたら、フィードバックください。 ## そのまま掲載させていただきたいと思います。