420 likes | 597 Views
バイオデータ解析入門 ~ R 入門~. 久留米大学バイオ統計センター 川口淳. 内容. R の紹介 R での計算 ベクトル,行列 データフレーム,データの入出力 確率分布,基本統計量 グラフィックス パッケージ プログラミング. R とは. 統計計算とグラフィックスのための言語・環境 多様な統計手法 (公開パッケージ) うまくデザインされた出版物並みのプロットを容易に作成できる フリーソフト プログラムコードは S-Plus でも使える. R 環境. データを効率的に操作し、保管する機能 配列、とくに行列の計算
E N D
バイオデータ解析入門~R入門~ 久留米大学バイオ統計センター 川口淳
内容 • Rの紹介 • Rでの計算 • ベクトル,行列 • データフレーム,データの入出力 • 確率分布,基本統計量 • グラフィックス • パッケージ • プログラミング
Rとは • 統計計算とグラフィックスのための言語・環境 • 多様な統計手法 (公開パッケージ) • うまくデザインされた出版物並みのプロットを容易に作成できる • フリーソフト • プログラムコードはS-Plusでも使える
R環境 • データを効率的に操作し、保管する機能 • 配列、とくに行列の計算 • データ解析の媒介に使う道具の集り • グラフィカルな機能と、画面または印刷物への出力 • 条件分岐、ループ、ユーザー定義の再帰的関数を含む、簡潔で効率的なプログラミング言語
参考書など • RjpWiki(http://www.okada.jp.org/RWiki/) • Rによる統計解析の基礎 中澤 港 (著) (2003/10), ピアソンエデュケーション • The R Tips―データ解析環境Rの基本技・グラフィックス活用集,舟尾 暢男 (編集),(2005/02) ,九天社 参考: RjpWiki→リンク集
Rをつかう • インストール • 参考:RjpWiki→Rのインストール • 起動 • デスクトップのアイコンをダブルクリック • スタート→すべてのプログラム→R • 終了 • 右上の✕ボタン→質問に「いいえ」
Rの画面 • コンソール • Rに命令を送るウィンドウ.直接入力もできる. • スクリプト(エディタ) • Rのコマンドを保存できるノートみたいなもの • 作ったプログラムはここから保存 • グラフ • グラフ出力用のウィンドウ • グラフの保存,コピーができる.
スクリプト グラフ コンソール
ヘルプの使い方 • 関数について • ?rnorm • help(rnorm) • 演算子について • ?”+” 参考: RjpWiki→Tips紹介→Rのヘルプ機能
四則演算,累乗 #コメントアウト 3+4 3-4 3*4 3/4 3^4 変数を使った計算 x<-3 y<-4 x #値の確認 y x+y x-y x*y x/y x^y Rで計算する
三角関数 x<-pi/4 cos(x) sin(x) tan(x) 対数,指数関数 x<-1 log(x, base = exp(1)) log10(x) exp(x) 初等数値関数
ベクトルを作る • c(), seq(), rep() • x<-c(1,3,5,7) • x<-seq(1,7,by=2) • x<-seq(1,7,length=3) • x<-rep(1, 3) • x<-rep(c(1,2), c(2,3)) • ベクトルの長さを計算(データ数の計算) • length(x) 参考: RjpWiki→Tips紹介→ベクトル・行列・配列・リストTips大全→ベクトルTips大全
ベクトルの成分の抽出 • x<--5:5 #1から10までの数列 • x[1] • x[-2] • x[c(1,3)] • y<-x[x>0] • y<-x[x>0 & x<3]
ベクトル生成 x<--1:1 y<-2:4 計算 sum(x) sum(y) x+y x*y x%*%y ベクトルの計算
matrix(), matrix(0,2,3) x<-1:9 z1<-matrix(x,3,3) w1<-matrix(x,3,3,byrow=T) cbind(), rbind(), y<--1:-9 z2<-cbind(x,y) w2<-rbind(x,y) 行列を作る 参考: RjpWiki→Tips紹介→ベクトル・行列・配列・リストTips大全→行列Tips大全
行列の情報 • dim() • dim(z2) • dim(w2) • colnames(), rownames() • colnames(z2)<-c(“成分1”, “成分2”) • rownames(z2)<-letters[1:dim(z2)[1]]
計算 solve(A) A+B A-B A/B A*B A%*%B A%o%B apply(A, 2, sum) 行列演算 • 行列作成 • A <- matrix(c(3,1,4,1,2,7,1,5,1),3,3) • B <- matrix(c(1:9), 3,3)
データフレームとは • 行列に似ている. • 各行・列はラベルを必ず持ち,ラベルによる操作が可能である点が普通の行列と異なる. • 各列の要素の型はバラバラでも構わないので,データをデータフレームに変換することで統計解析がやりやすくなる. • 行列演算ができなくなるので,行列演算をする場合には行列に戻すことが必要となる.
データフレーム 参考: RjpWiki→Tips紹介→データフレームTips大全
データフレーム作成 • 行列からデータフレーム • A<- matrix(c(3,1,4,1,2,7,1,5,1),3,3) • C<-data.frame(A) • attach(C) • X1 • C$X1 • 行列に戻す • D<-data.matrix(C)
外部ファイルからのデータフレーム作成と出力外部ファイルからのデータフレーム作成と出力 • テキストファイルから入力 • #データファイルのあるディレクトリの指定 • setwd(“D:/test/”) • data<-read.table(“data.txt”,header=TRUE) • テキストファイルへの出力 • write.table(data, “data2.txt”) • foreignパッケージの使用 • library(foreign) 参考: RjpWiki→Tips紹介 →データフレームTips大全 参考: RjpWiki→単語検索
データフレーム操作 • あたらしい要素を加える. • id<-1:length(data[,1]) • data2<-data.frame(data, id) • 要素同士で演算したものを加える. • data3<-data.frame(data,obs=data$hdis/data$total) • 特定の条件を満たすデータを抽出する. • data4<-subset(data, data[“bpress"]==2) • ある要素に基づいてデータを要約する. • data5<-aggregate(data[,c("hdis","total")],data.frame(bpress=data[,"bpress"]),FUN=sum)
分布 接頭辞:d(確率),p(確率点),q(パーセンタイル点),r(乱数) 参考: RjpWiki→Tips紹介→Rにおける確率分布
例:正規分布 • 乱数発生 • #データ数100, 平均1,分散2 • x<-rnorm(100, 1, 2) • 標準正規分布片側95%点 • qnorm(0.95,0,1) • 累積確率分布関数値 (p値の計算など) • dnorm(1.96,0,1)
基本統計量の計算 • 平均mean(), 分散var(), 標準偏差sd(), 相関係数cor() • x<-rnorm(100, 3, 0.1) • y<-rnorm(100,3,1) • mean(x) • var(x) • sd(x) • summary(x) • cor(x,y)
離散変数の図示 • 準備 • x <- c(1,1,3,1,4,1,1,2,1,2) • freq.x <- table(x) • per.x <- freq.x/sum(freq.x) • 度数分布図 • barplot(freq.x) • 積み上げ棒グラフ • barplot(matrix(freq.x, nrow(freq.x)), beside=F) • 帯グラフ • barplot(matrix(per.x, nrow(per.x)), horiz=T, beside=F) • 円グラフ • pie(freq.x)
連続変数の図示 • データ • point <- c(68,70,55,78,84,95,66,72,92,74) • ヒストグラム • hist(point, main="Histgram") • 正規確率プロット • qqnorm(point, main="Normal QQplot") • 幹葉表示 • stem(point, scale=2) • 箱ひげ図 • boxplot(point, main="Box and whisker plot") Rによる統計解析の基礎 中澤 港 (著) (2003/10), ピアソンエデュケーション
多変量データの図示 • データ • x<-iris[1:4] • 散布図 • plot(x$Sepal.Length, x$Sepal.Width) • 散布図行列 • pairs(x) 参考: RjpWiki→Tips紹介→グラフィックス参考実例集
グラフィックパラメータ • グラフィックパラメータの書き方は,どの作図関数においても共通. • 主タイトル • plot(x$Sepal.Length, x$Sepal.Width, main="Scatter Plot") • 軸ラベル • plot(x$Sepal.Length, x$Sepal.Width, xlab="Sepal Length", ylab="Sepal Width") • 軸の範囲 • plot(x$Sepal.Length, x$Sepal.Width, xlim=c(2,10), ylim=c(0,5)) 参考: RjpWiki→Tips紹介→Rのグラフィックスパラメータ
グラフの出力 • コピー • グラフィックウィンドウを選択し,カメラ印のボタンをクリック. • 貼り付け • ワードなどの貼り付けボタンをクリック • 画像ファイルとして保存 • メニュー「ファイル」→「別名で保存」
統計手法(一部) 参考: RjpWiki→単語検索
例:回帰分析 • 例を用いる. • example(lm)#たくさん結果が出てわかりにくい • ?lm • #exampleを一部分だけをコピー&ペースト • ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) • trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) • group <- gl(2,10,20, labels=c("Ctl","Trt")) • weight <- c(ctl, trt) • anova(lm.D9 <- lm(weight ~ group)) • summary(lm.D90 <- lm(weight ~ group - 1))# omitting intercept
回帰分析の結果を見る • 通常 • lm.D90 <- lm(weight ~ group) • lm.D90 • もっと詳しく • summary(lm.D90) • もっともっと詳しく • attributes(lm.D90) • lm.D90$coefficients • lm.D90$residuals • lm.D90$effects • lm.D90[attributes(lm.D90)$names]
離散データ解析(一部) 参考: RjpWiki→Tips紹介 → Rの古典的検定用関数一覧
例:カイ二乗検定,Fisherの正確検定 • chisq.testのヘルプより(一部改) • x <- matrix(c(12, 5, 7, 7), nc = 2) • chisq.test(x) • fisher.testのヘルプより • TeaTasting <-matrix(c(3, 1, 1, 3),nr = 2, dimnames = list(Guess = c("Milk", "Tea"), Truth = c("Milk", "Tea"))) • fisher.test(TeaTasting, alternative = "greater")
パッケージの使い方 • インストール(インターネット経由) • メニュー「パッケージ」→「パッケージのインストール」 • パッケージを読み込むと,そのパッケージに含まれる統計手法を使うことができる. • コンソールに入力(lirary(パッケージ名)) • library(mva) • library(tree) • メニューから • 「パッケージ」→「パッケージの読み込み」
パッケージ紹介(一部) 参考: RjpWiki→Rに関する各種文献とその訳
繰り返し for x<--3:6 s<-0 for(i in 1:10) {s<-s+x[i]} s 条件実行 if p<-0 for(i in 1:10) {if(x[i]>0) p<-p+1} p 繰り返し処理,条件分岐 参考: RjpWiki→Tips紹介→R プログラミング Tips 大全
自作関数 • function • mysum<-function(x) • {s1<-0 • for(i in 1: length(x)) • {s1<-s1+x[i]} • } • x<--3:6 • s2<-mysum(x) • s2 参考: RjpWiki→Tips紹介→Rの関数定義の基本
練習問題 • ファイル「RESTING.txt」のデータをRに読み込み,restingという名のデータフレームを作成しなさい. • Heightの単位をcmからmに変換し(1/100する),Height2という名の変数をつけ,データフレームrestingに追加しなさい. • Height2のヒストグラムを作成しなさい.横軸のラベルを「身長(m)」に変更しなさい. • Pulseの箱ひげ図を作成しなさい. • Height2とPulseの散布図を作成しなさい.横軸の範囲を1.4から2.0に,縦軸の範囲を50から120に変更しなさい. • Pulseを応答変数,Height2を説明変数として,回帰分析をしなさい. • 関数abline()を使って,5で作成した散布図の中に,6で求めた回帰直線を引きなさい.