データサイエンティスト上がりのDX参謀・起業家

データサイエンティスト上がりのDX参謀・起業家のブログ。データ分析や事業について。自身はアーティスト、経営者、事業家。

初めてのR1

私は新しいプログラム言語を学ぶとき、仕組みはさておいてとりあえず実行してみたい派です(最初は使い方がわかりませんものね)。

そんな人のために、プログラムをコピペするだけで面白そうな結果が出るプログラムを書いていきたいと思います。

Rはプログラムが大変だと思われがちですが、慣れるとそんなことはありませんよ。

まずはここからRをダウンロードして下さい。

トップページからWindows→baseと進むと、exeファイルをダウンロードできます。

このexeファイルをインストールすると、Rが使えるようになります。

デスクトップにRが出てくると思うのでダブルクリックすると起動します。

これで準備完了です。

R consoleと表示されているウインドウにこれから書くプログラムをコピペすると、とりあえず解析ができます。

set.seed(1)
norm <- rnorm(400)
Data <- matrix(norm, nrow=100, ncol=4, byrow=T)

panel.hist <- function(x,pch=1,bg=1, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(usr[1:2], 0, 1.5) )
    h <- hist(x, plot = FALSE)
    breaks <- h$breaks; nB <- length(breaks)
    y <- h$counts; y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col="#A0C2DE", ...)
}
panel.cor <- function(x, y, digits=2, prefix="", cex.cor,pch=1,bg=1)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- abs(cor(x, y))
    txt <- format(c(r, 0.123456789), digits=digits)[1]
    txt <- paste(prefix, txt, sep="")
    if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
    text(0.5, 0.5, txt, cex = cex.cor * r)
}

colnames(Data) <- c("Height", "BMI", "SBP", "FBS")
pairs(Data, lower.panel=panel.smooth, pch=21, bg="#A0C2DE", upper.panel=panel.cor, diag.panel=panel.hist)

コンソール画面が止まってしまったらEnterキーを押して下さい(Rは改行すると1つの区切りと認識します)。

こんな図がでてきます。

プログラム3行目まででデータを作って、最後の行で図を描いています。

途中のpanel.histとかは図にヒストグラムを描いたりするためのプログラムです。

図の右上部分は相関係数が表示されていますが、無相関なので数字が小さいですね。

赤い線はスプラインだったかな。

無相関なデータでは面白くないので相関のあるデータにしてみます。

Data2 <- Data
Data2[, 1] <- 170 + Data[, 1]*10
Data2[, 2] <- 22 + Data[, 1]*2 + Data[, 2]*2
Data2[, 3] <- 120 + Data[, 2]*10 + Data[, 3]*10
Data2[, 4] <- 90 + Data[, 2]*10 + Data[, 4]*10


pairs(Data2, lower.panel=panel.smooth, pch=21, bg="#A0C2DE", upper.panel=panel.cor, diag.panel=panel.hist)

同じように図を描くと今度は相関係数が大きくなり、プロットでも相関がみてとれると思います。

次にHeight、SBPとBMIの関連をみてみます。

cor(Data2)
Data2.lm <- lm(BMI~Height + SBP, data=data.frame(Data2))
summary(Data2.lm)

コンソール画面に直接結果が表示されます。

これで次のような予測式が出ます(ダミーデータなので係数の信用性はありません)。

BMI=-21.9+0.18*Height+0.10*SBP

R二乗(決定係数)は0.72なのでそこそこの予測力ですね。

次に綺麗なプロットを描いてみましょう。

パッケージをインストールする必要があります。

インターネットに繋がっている状態で次のコードを入れて下さい。

install.packages("ggplot2")

ウィンドウが出てくると思うので、適当にどこか選んでください(私はいつもTokyo(Tsukuba)を選んでます)。

すると勝手にネットからパッケージをインストールしてくれます。

次回からはinstall.packagesは書く必要はありません(Rをバージョンアップしたら再度行う必要は有り)。

次に以下のコードをコピペするとさっきより綺麗な図が描けます。

library(ggplot2)
ggplot(data.frame(Data2), aes(Height, BMI)) + geom_point() + 
	stat_smooth(method="lm", size=1.2)
ggplot(data.frame(Data2), aes(Height, BMI)) + geom_point() + 
	stat_smooth(size=1.2)

2つの図を描いているのですが、すぐに1つめの図が上書きされてしまいます。

こんなときは図を選択している状態で、上のメニューで履歴→記録にチェックを入れます。

入れてから記録し始めるので、もう一度コードをコピペして下さい。

キーボードのPage Upを押すると図が切り替わるはずです(無い人はFnを押しながら上矢印を押す)。

ついでに作ったデータをcsvファイルで保存してみましょう。

write.csv(Data2, "Data2.csv", row.names=F)
getwd()

getwd()で表示された場所にData2.csvというデータが保存されたはずです。

このcsvデータは次のようにやると再びRに読み込めます。

a <- read.csv("Data2.csv")
a

手持ちのデータがある場合はエクセルでcsvファイルに変換して、getwd()の場所に置いていろいろ読み込んでみて下さい(もちろん""の中に直接ファイルパスを書き込んでも良いです)。

最後にRのパッケージを一括ダウンロードしてくれるコードです。

以下を入力して一時間ほど放置すると、Rの大半のパッケージがパソコンに入ります(最初のブログにも載せてあるやつです)。

install.packages("ctv")
library(ctv)

install.views("Bayesian")
install.views("ChemPhys")
install.views("ClinicalTrials")
install.views("Cluster")
install.views("Distributions")
install.views("Econometrics")
install.views("ExperimentalDesign")
install.views("Finance")
install.views("Genetics")
install.views("Graphics")
install.views("gR")
install.views("HighPerformanceComputing")
install.views("MachineLearning")
install.views("MedicalImaging")
install.views("Multivariate")
install.views("NaturalLanguageProcessing")
install.views("Optimization")
install.views("Pharmacokinetics")
install.views("Phylogenetics")
install.views("Psychometrics")
install.views("Robust")
install.views("SocialSciences")
install.views("Spatial")
install.views("Survival")
install.views("TimeSeries")

これをすれば、私のブログのコードの中にはコピペで実行できるものも多いです。

Rには経済、疫学、臨床試験機械学習、薬物動態解析、遺伝子解析など統計解析モデルは多様な分野のものがほとんど入っています。

これでRに興味を持てば、いろいろやってみて下さいな。