====== 06.Google Colaboratoryで時系列データで折れ線グラフを描画 ====== [[00.初めての医療統計rとezr:index.html|初めての医療統計RとEZRトップページ]] 前回の[[00.初めての医療統計rとezr:05.colaboratoryで自前データでrで統計|05.Google Colaboratoryで自前データでRで統計]]では、GoogleColaboratory上で、自作データをアップロードしてRプログラミングを行う方法を紹介しました。 今回は、自作データのうち、『時系列データ』をアップロードして、グラフを描画し、対応のあるt検定を行ってみたいと思います。 ===== Rで折れ線グラフ 過去のリンク ===== https://i-doctor.sakura.ne.jp/font/?p=44413 dplyr(tidyverse)でsummarise()関数で標準偏差sdを計算するとNAになってしまうときは平均meanの名前の付け方に注意 2020年8月15日 [[https://i-doctor.sakura.ne.jp/dokuwiki/doku.php/ggplot2%E3%81%A7%E8%AB%96%E6%96%87%E7%94%A8%E3%81%AE%E7%99%BD%E9%BB%92%E6%8A%98%E3%82%8C%E7%B7%9A%E3%82%B0%E3%83%A9%E3%83%95|ggplot2で論文用の白黒折れ線グラフ]] https://i-doctor.sakura.ne.jp/font/?p=21579 ggplot2で折れ線グラフ(1) 2017年12月12日 https://i-doctor.sakura.ne.jp/font/?p=21594 ggplot2で折れ線グラフ(2) 2017年12月12日 ggplot2で折れ線グラフ(factorでもgroup=1で折れ線グラフを描ける) https://gist.github.com/adash333/0f3f92e0d1676d27a5985c57a0eff1e6 ===== ソースコード ===== (1)単一の折れ線グラフ https://colab.research.google.com/drive/1LH8RInDrx0XDS3tivf8coUHaEjG9z15t https://gist.github.com/adash333/6ebcbb98ebc064ff94c8475d7833bd98 (2)200726_ggplot-line-chart_001.ipynb https://colab.research.google.com/drive/1SZTh9i62LHZ9qShJKi6CjX3qnMAwZ1qU https://gist.github.com/adash333/af401dc1aca27c9dad9a37ccfd076beb (3) https://colab.research.google.com/drive/1hsdpM_FlUAIK8KzZJDUaUetrRnEons3U?hl=ja (Colaboratoryでは、なぜか、packageのインストールがうまくいかない。また、stat_summary関数の一部がうまく動かない) https://adash333.github.io/ggplot2-example/191016_ggplot-bar.html 4 https://gist.github.com/adash333/fd7e673debefa7547895f05d3b50c04f ===== 開発環境 ===== Windows10 Pro (1803) (OSは何でもよいです) Chrome Googleアカウント GoogleDriveで『Text Editor for Drive』を利用(→方法は[[00.初めての医療統計rとezr:04.googlecolaboratoryでrプログラミング#googleドライブで_text_editor_for_drive_をインストール|こちら]]をご覧ください。) ==== 今回使用したRパッケージ ==== tidyverse readxl ===== 自前データの用意 ===== 今回、自前のデータとして、以下のエクセルファイルを用いてみます。 {{ :00.初めての医療統計rとezr:book2.xlsx |}} (←クリックでダウンロードできます。) 糖尿病DMの7症例の3ヶ月間のHbA1c[%]の推移のデータです。 ^ ID ^ age ^ sex ^ DM ^ HbA1c00M ^ HbA1c01M ^ HbA1c02M ^ HbA1c03M ^ | 00001 | 56 | M | 1 | 7.3 | 7.4 | 7.3 | 7.4 | | 00002 | 77 | F | 1 | 8.3 | 8.4 | 8.3 | 8.2 | | 00003 | 68 | M | 1 | 7.1 | 7.0 | 7.0 | 7.0 | | 00004 | 81 | F | 1 | 7.6 | 7.4 | 7.3 | 7.4 | | 00005 | 42 | M | 1 | 10.1 | 8.4 | 7.3 | 6.5 | | 00006 | 65 | M | 1 | 6.1 | 6.2 | 6.2 | 6.3 | | 00007 | 68 | F | 1 | 7.8 | 7.4 | 7.9 | 8.4 | {{:00.初めての医療統計rとezr:pasted:20191013-171212.png}} Rで統計する際の自前データの記載方法については、[[00.初めての医療統計rとezr:03.excelでcsv出力|03.Excelでcsv形式でデータを保存]]をご覧頂けましたら幸いです。半角英数字とピリオドのみを用いて記載していただくのがお勧めです。なお、欠損データは半角英数字の大文字で『NA』と記載してください。 ===== Google ColaboratoryのR用テンプレートをコピーして名前をつけて保存 ===== 以下のテンプレートへ行き、Googleログインして、『ファイル』>『ドライブにコピーを保存』を順にクリックすると、自分のipynbファイルとして、そのままRを利用することができます。 https://colab.research.google.com/drive/1Wbt_tHd9KFEEszzXchwuFrhyCNR_KgtC {{:00.初めての医療統計rとezr:pasted:20191013-165744.png}} 今回は、191014_001.ipynb という名前にしました。 {{:00.初めての医療統計rとezr:pasted:20191013-172316.png}} ===== 自前データのアップロードとread_excel()によるエクセルデータのRへの取り込み ===== 今回、Rに取り込みたい自前データ{{ :00.初めての医療統計rとezr:book2.xlsx |}}を、デスクトップに保存しておくものとします。 画面左上の『>』をクリックして、左側からタブのような画面を引き出します。 {{:00.初めての医療統計rとezr:pasted:20191013-213752.png}} 『ファイル』をクリック。 {{:00.初めての医療統計rとezr:pasted:20191013-214119.png}} 『アップロード』をクリック。 {{:00.初めての医療統計rとezr:pasted:20191013-214151.png}} book2.xlsx を選択して、『開く』をクリック。 {{:00.初めての医療統計rとezr:pasted:20191013-214522.png}} {{:00.初めての医療統計rとezr:pasted:20191013-214730.png}} 左側の画面に、book2.xlsxが表示されるので、右側のコードを入力する画面に以下を入力して、Shift+Enterを押して実行します。 # 後で使用するので、とりあえずtidyverseを使用するための準備 library(tidyverse) # read_excel()関数を使用するための準備 library(readxl) # d に、book2.xlsxの1番目のsheetをtibbleデータとして代入する d <- read_excel("book2.xlsx", sheet=1) # d を表示する d {{:00.初めての医療統計rとezr:pasted:20191013-214857.png}} ===== ggplotでグラフ描画するためにデータをtidy data(整然データ)に変換 ===== いきなり出てきた"tidy data"ですが、[[https://amzn.to/2oDjp05|RユーザのためのRStudio[実践]入門]]によりますと、『ベクトルの処理が得意なRで扱いやすい縦長のデータ形式』だそうです。具体的には、以下の3条件を満たすデータだそうです(By Hadley Wickham)。 -1つの列が1つの変数を表す -1つの行が1つの観測を表す -1つのテーブルが1つのデータセットだけを含む 詳しくは、以下の本が非常にお勧めです。 理論は置いておいて、今回は、グラフを描くために、とりあえず、gather()関数を用いて、『d』を以下のように変形します。 tidy_d <- gather(d, key="time", value="HbA1c", # 新しくできる列の名前を指定 HbA1c00M, HbA1c01M, HbA1c02M, HbA1c03M) # 変形する対象の列を指定 tidy_d {{:00.初めての医療統計rとezr:pasted:20191013-221240.png}} ==== gather()関数について ==== gather()関数の引数は、以下のようになっています。 gather(データ, key="キーの列の名前", value="値の列の名前", 変形する対象の列1, 変形する対象の列2, ...) 2021年現在、pivot_longer()関数が推奨です。 https://qiita.com/yanami/items/3775df6c579fd0a2d60c @yanami が2020年09月15日に更新 【tidyr】gather?, spread? もう古い。時代はpivot ==== mutate()関数について ==== 列を追加するときには、mutate()関数を用いるのが便利です。 参考:[[https://kazutan.github.io/kazutanR/hands_on_170730/mutate.html|列の変換 - mutate関数]] [[https://heavywatal.github.io/rstats/dplyr.html|dplyr — 高速data.frame処理]] [[https://qiita.com/matsuou1/items/e995da273e3108e2338e|dplyrを使いこなす!基礎編(@matsuou1, 2016年01月22日に更新)]] ===== group_by()関数とsummarise()関数を用いてグループごとに集計する ===== timeごとに、HbA1cの平均meanと標準偏差sdを求めます。以下のようにします。 tidy_d %>% group_by(time) %>% summarise(HbA1c_avg = mean(HbA1c), HbA1c_sd = sd(HbA1c)) {{:00.初めての医療統計rとezr:pasted:20191013-222832.png}} ==== 参考 ==== # entropyの平均と標準偏差 variety_ave <- tidy_d %>% group_by(type, time) %>% summarise(mass_ave = mean(Entropy, na.rm = TRUE)) variety_ave group_by(type, time) で、type別に、time別に、group分けして平均を計算してくれます。 na.rm = TRUE で、NAを無視して計算してくれます。 https://stats.biopapyrus.jp/r/basic/nan.html R の非数値(NA、NaN、Inf など)の取り扱い方 欠損値 ===== ggplot()関数とstat_summary()関数で折れ線グラフを描く ===== # ggplot()関数とstat_summary()関数で折れ線グラフを描く g <- ggplot(data = tidy_d, aes(x = time, y=HbA1c)) + theme_set(theme_classic(base_size = 12)) + stat_summary( aes(group=sex), # sex性別ごとに fun.y=mean, # 平均値を geom="line", # 線でつなげて colour="black", # 色は黒で size=0.5 # 先の太さは0.5mm ) # エラーバーの追加 # Google Colaboratoryでは、fun.data = mean_sdl (標準偏差)はうまくいかない # R Studioではうまくいくよう g <- g + stat_summary(aes(group=sex), # sex性別ごとに fun.data=mean_se, # mean_seで標準誤差、#mean_cl_normalで95%信頼区間(正規分布) geom="errorbar", size=0.5, # 線の太さ width=0.1 ) # エラーバーの上から重ねて、点(マーク)を描き入れる g <-g + stat_summary( aes(shape=sex), # 種類ごとに点の形を変えて fun.y=mean, # 種類ごとの平均値のところに geom="point", # 点で colour="black", size=4) # 形の指定 # 点の形を1番◯、15番■(、23番◇)にマニュアル変更 g <- g + scale_shape_manual(values=c(1,15)) # 原点を左下にする g <- g + scale_y_continuous(limits = c(0,10)) g {{:00.初めての医療統計rとezr:pasted:20191017-135708.png}} ===== ggplot2に関するリンク ===== ggplot2は、tidyverseパッケージに含まれている、グラフを描画するための便利なパッケージです。 Rでグラフを描くなら、ggplot2を利用するのがお勧めです。 利用方法 # tidyverseパッケージのインストール # tidyverseはGoogle Colaboratoryには、あらかじめ入っています。 # ご自身のパソコンでRStudioを用いる場合は、最初の一回だけ、 # tidyverseパッケージのインストールが必要です。 install.packages("tidyverse") # ggplot()関数を用いてグラフを描くときには、あらかじめ、 # tidyverseパッケージを利用する宣言をしておく必要があります。 # tidyverseパッケージを利用するための宣言 library("tidyverse") ggplot2に関して、最初に見るとよさそうなページ https://kazutan.github.io/kazutanR/ggplot2_links.html ggplot2に関する資料 {{:00.初めての医療統計rとezr:pasted:20191019-084834.png}} 論文用のグラフが描きやすくなる、cowplotパッケージなるものがあるらしい。 https://www.slideshare.net/nocchi_airport/ggplot2-62471507 {{:00.初めての医療統計rとezr:pasted:20191019-085653.png}} {{:00.初めての医療統計rとezr:pasted:20191019-085753.png}} ===== Rでggplot2で棒グラフのリンク ===== ソースコード https://colab.research.google.com/drive/1hsdpM_FlUAIK8KzZJDUaUetrRnEons3U?hl=ja geom_barと、stat_summeryを用いる方法がある https://lpasteur.hatenablog.com/entry/2019/04/16/060000 20190424 ggplot2でお絵かき:プロット+平均値+標準偏差を示す https://stats.biopapyrus.jp/r/ggplot/geom_bar.html ggplot で棒グラフを描く方法 geom_bar http://nsyk.sakura.ne.jp/homepage/2018/03/07/%e3%80%90ggplot%e3%83%a1%e3%83%a23%e3%80%91%e6%a3%92%e3%82%b0%e3%83%a9%e3%83%95%e3%82%92%e6%8f%8f%e3%81%8f/ 【GGPLOTメモ3】棒グラフを描く 2018年3月7日 https://datator.exblog.jp/27008169/ ggplot2で棒グラフと散布図の組み合わせをつくってみる 2017-07-24 19:38 https://qiita.com/muraki_ng/items/a99e38cf265d44af5538 @muraki_ng 2018年09月26日に投稿 箱ひげ図に要約統計量を記載 https://stackoverflow.com/questions/41848271/ggplot2-stat-summary-mean-sdl-not-the-same-as-mean-sd → Use fun.args = list(mult = 1) as shown in the examples for stat_summary. http://www.cs.uni.edu/~jacobson/4772/week3/errorBarChart.html Error Bar Charts in R https://code-examples.net/ja/q/125dc5c 棒グラフ stat_summary を使用した標準エラー バー https://community.rstudio.com/t/adding-patterns-or-textures-to-geom-bar-geom-col-bars/4517/2 Adding patterns or textures to geom_bar() / geom_col() bars? 2018-01-26 ==== stat_summary()関数について ==== https://ggplot2.tidyverse.org/reference/stat_summary.html ===== Rで折れ線グラフのリンク ===== https://i-doctor.sakura.ne.jp/font/?p=21594 ggplot2で折れ線グラフ(2) 2017年12月12日 [[http://i-doctor.sakura.ne.jp/dokuwiki/doku.php/excel%E3%81%A7%E6%8A%98%E3%82%8C%E7%B7%9A%E3%82%B0%E3%83%A9%E3%83%95%E3%81%A8%E8%AA%A4%E5%B7%AE|Excelで折れ線グラフと誤差を描画する]] [[http://i-doctor.sakura.ne.jp/dokuwiki/doku.php/rnotebook%E3%81%A7%E6%8A%98%E3%82%8C%E7%B7%9A%E3%82%B0%E3%83%A9%E3%83%95|R Notebookで折れ線グラフと誤差]] [[http://i-doctor.sakura.ne.jp/dokuwiki/doku.php/ggplot2%E3%81%A7%E8%AB%96%E6%96%87%E7%94%A8%E3%81%AE%E7%99%BD%E9%BB%92%E6%8A%98%E3%82%8C%E7%B7%9A%E3%82%B0%E3%83%A9%E3%83%95|ggplot2で論文用の白黒折れ線グラフ]] [[http://i-doctor.sakura.ne.jp/dokuwiki/doku.php/ggplot2でタイトルとx軸y軸の設定|ggplot2でタイトルとx軸y軸の設定]] http://www.sthda.com/english/wiki/ggplot2-error-bars-quick-start-guide-r-software-and-data-visualization ggplot2 error bars : Quick start guide - R software and data visualization https://www.slideshare.net/nocchi_airport/ggplot2-62471507 ggplot2用例集 入門編 https://mrunadon.github.io/ThesisPlot/ 論文用の棒グラフと折れ線グラフをggplot2で描く https://mrunadon.github.io/ggplot2/ グラフ描画ggplot2の辞書的まとめ20のコード https://www.atsumitakeshi.com/techs/R/R_ggplot2_GUI.html ggplot2をGUIで操作する 2019.7.30 https://qiita.com/kilometer/items/c5d7833229a6916d9b6e @kilometer 2018年06月20日に更新 折れ線のjitterは止めようという話 http://nsyk.sakura.ne.jp/homepage/2018/04/13/%E3%80%90ggplot%E3%83%A1%E3%83%A26%E3%80%91%E6%8A%98%E3%82%8C%E7%B7%9A%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E3%81%8F/ 【GGPLOTメモ6】折れ線グラフを描く 2018年4月13日 (引用ここから) # グラフの基本設定 ggplot() + theme_set( theme_classic(base_size = 12, base_family = "Hiragino Kaku Gothic Pro W3") ) # 描画 g <- ggplot( airquality, aes( x = Month, y = Temp ) ) +   geom_line( stat = "summary", fun.y = "mean" ) +   stat_summary(fun.y = "mean", geom = "point", shape = 21, size = 2., fill = "black") +   stat_summary( fun.data = "mean_se", geom = "errorbar", width = .2) +   xlab( "月" ) +   ylab( "気温(華氏)" ) +   scale_y_continuous( breaks = c( 32, 52, 72, 92 ), limits = c( 32, 95 ) ) g (引用ここまで) ===== jitter ===== https://ggplot2.tidyverse.org/reference/geom_dotplot.html Dot plot 本家サイト https://www.karada-good.net/analyticsr/r-269 Rで解析:ジッタープロットの作成。「sinaplot」パッケージ http://www.sthda.com/english/wiki/ggplot2-dot-plot-quick-start-guide-r-software-and-data-visualization ggplot2 dot plot : Quick start guide - R software and data visualization library(ggplot2) # Basic dot plot p<-ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_dotplot(binaxis='y', stackdir='center') p エクセルの場合 https://bdastyle.net/tools/scatterplot/beeswarm-plot.html ===== Rのデータセットに関するリンク ===== https://qiita.com/wakuteka/items/95ac758070f6f4d89a96 @wakuteka 2016年12月26日に更新 R言語 標準データセットの私的まとめ csvを取り込みたいときは、 library(tidyverse) setwd(エクセルファイルのある場所) data <- read_csv("data.csv") # エクセルを取り込みたいときは、 library(tidyverse) library(readxl) setwd(エクセルファイルのある場所) data <- read_excel("data.xlsx", sheet = 1) tribble()関数を用いる方法 library(tidyverse) d <- tribble( ~id, ~age, ~sex, ~DM, ~HbA1c00M, ~HbA1c01M, ~HbA1c02M, ~HbA1c03M, 1, 56, "M", 1, 7.3, 7.4, 7.3, 7.4, 2, 77, "F", 1, 8.3, 8.4, 8.3, 8.2, 3, 68, "M", 1, 7.1, 7, 7, 7, 4, 81, "F", 1, 7.6, 7.4, 7.3, 7.4, 5, 42, "M", 1, 10.1, 8.4, 7.3, 6.5, 6, 65, "M", 1, 6.1, 6.2, 6., 6.3, 7, 68, "F", 1, 7.8, 7.4, 7.9, 8.4, ) d ===== ggplot2 memo ===== [[https://dreamrs.github.io/esquisse/index.html|esquisseエスキス]]で描いてからコードをコピペする? グラフ作成テンプレート ggplot(data=) + (mapping = aes()) ggplot2グラフ作成の例 -キャンバスを用意する -棒グラフを描く -エラーバーをつける -色をつけていく -表示範囲、軸のタイトルを設定 -最終的な微調整 -[[https://mickey24.hatenablog.com/entry/20110316/ggplot2_ggsave|ggsave()関数で画像を出力]] 参考:[[https://mrunadon.github.io/ThesisPlot/|論文用の棒グラフと折れ線グラフをggplot2で描く]] https://mrunadon.github.io/images/geom_kazutanR.html ggplot2 まとめ: 初歩から程よいレベルまで Mr.Unadon(うなどん) 2017/07/22 https://qiita.com/uri/items/892fc597a9076dec501e @uri 2018年12月01日に更新 君の知らない物語(あまり知られていないtidyverseの便利な機能) https://qiita.com/yuifu/items/83103d03aef2dba95465 @yuifu 2015年03月10日に投稿 ggplot2で論文用の図を作るときに使いたいオプション(点のshape、色、軸の文字の大きさ、色、エラーバー、背景) https://qiita.com/kazutan/items/c42031ec54be283efd4f @kazutan 2016年06月10日に更新 ggplot2に関する資料まとめ ===== エスキス ===== [[https://dreamrs.github.io/esquisse/index.html|esquisseエスキス]] install.packages("esquisse") # remotes::install_github("dreamRs/esquisse") esquisse::esquisser(iris) # Webブラウザで開きたい場合 esquisser(viewer = "browser") エスキスの使い方(英語) https://dreamrs.github.io/esquisse/articles/get-started.html https://qiita.com/taro_9674/items/55dc92d30ba569465ca9 @taro_9674 2019年07月25日に投稿 【R言語】もうggplot2の操作も怖くない!esquisseパッケージの効力が絶大だった件 https://note.com/tqwst408/n/n82d56c69a18e R言語:ggplotのGUIをまとめてみる Osamu_Machida 2019/02/23 13:07 https://www.marketechlabo.com/r-best-packages/ Rのおすすめパッケージ2019年版 ===== ソースコード ===== ソースコード1:191014_ggplot-line-chart_001.ipynb https://colab.research.google.com/drive/1upLvY2bG2pnORT1NeVGA0S-d01Gj6bkP https://adash333.github.io/ggplot2-example/191014_ggplot-line-chart_001.html ソースコード2 https://colab.research.google.com/drive/1hsdpM_FlUAIK8KzZJDUaUetrRnEons3U?hl=ja (Colaboratoryでは、なぜか、packageのインストールがうまくいかない。また、stat_summary関数の一部がうまく動かない) https://adash333.github.io/ggplot2-example/191016_ggplot-bar.html ===== Rでグラフを描くためのお勧めの本 ===== 初めての方には、以下の本が非常にお勧めです。 上記の本でggplot2に慣れたら、以下の本でデータ整理について学んでみるのがお勧めです。 ===== リンク ===== 目次:[[00.初めての医療統計rとezr:index.html|初めての医療統計RとEZR]] 前:[[00.初めての医療統計rとezr:05.colaboratoryで自前データでrで統計|05.Google Colaboratoryで自前データでRで統計]] 次:[[00.初めての医療統計rとezr:07.colaboratoryで箱ひげ図と蜂群図|07.Google ColaboratoryでRで箱ひげ図と蜂群図(ほうぐんず)]]