R言語

R言語でデータ解析【初心者向け】

  1. HOME >
  2. R言語 >

R言語でデータ解析【初心者向け】

スポンサーリンク

こんにちは、usagi-sanです。

今回は、データの平均値、分散、相関係数を求めたり、グラフをプロットしたりすることで、データの扱い方や解釈の方法を学んでいきます。

特に相関係数を求めて、グラフを描いてみることは統計解析の初期段階であるため、データを可視化することは非常に重要になってきます。

次のRファイルに今回説明するすべてのプログラミングコードがあるため、コードをコピペして使いたいという場合はダウンロードを推奨します

 

データirisを用いた練習

平均値と分散を求める

まず前回も用いたデータirisの平均値と分散を求めてみましょう。

前回の記事にも書いたように、次の関数を用いることでベクトルの平均値と共分散を求めることができます。

上の例で、dataSepal.Lengthの標本を\(x_1,x_2,\ldots,x_{150} \)とすると、標本平均はと不偏標本分散は次を計算しています。\begin{align}標本平均\ \ \bar{x}&=\cfrac{1}{150}\sum_{i=1}^{150}x_i\\不偏標本分散\ \ s^2&=\cfrac{1}{149}\sum_{i=1}^{150}(x_i-\bar{x})^2\end{align}

注意として不偏標本分散(標本数-1)で割ったものとなっています。

高校で習った分散とは定義が異なるので注意してください。

相関係数を求める

相関係数は関数corを用いることで計算できます。

次のように、異なる2つの変数(データフレームの列)に対して、計算することができます。

2行目でdataのSepal.LengthとSepal.Widthの相関係数を求めています。

また、3行目でSepal.LengthとPetal.lengthの相関係数を求めています。

数式で表現すると、Sepal.LengthよSepal.Widthの相関係数とは次を求めています。\begin{align}相関係数: \ \ r = \cfrac{s_{Sepal.L.\ Sepal.W}}{\sqrt{s_{Sepal.L}^2}\sqrt{s_{Sepal.W}^2}}.\end{align}相関係数の性質より、この値の絶対値が大きいほど、2つのデータ間に関連性があることがわかります。

データ解析に用いる主な関数

標本平均値と不偏標本分散などの統計量は以下の関数から計算することが可能です。

mean(x)xの平均を求める
var(x)xの分散を求める
cov(x,y)xとyの共分散を求める
sd(x)xの標準偏差を求める
cor(x,y)xの相関係数を求める
ave(x)xの平均を求める
max(x)xの最大値を求める
min(x)xの最小値を求める
median(x)xの中央値を求める
quantile(x)xの最小値, 第1四分位数, 中央値,  第3四分位数, 最大値を求める
summary(x)xの要約統計量(最小値, 第1四分位数, 中央値, 平均, 第3四分位数, 最大値)を求める

データの標準化

続いて、先ほど求めた標本平均と標本不偏分散を用いて、"Species"以外のデータを標準化してみましょう。

標準化とは次のように、各データから標本平均を引き、標本分散の平方根で割ったものをいいます。(R言語では不偏標本分散の平方根で割っています。)\begin{align}標準化: \ \ \cfrac{x_i-\bar{x}}{s},\end{align}統計学では、便利な性質をもつため、しばしばこの標準化が現れます。

データの標準化には、関数scaleが便利です。

実際に次のようにして"Species"以外のデータを標準化できます。

またfunctionを用いて次のように、標準化の関数を作ることもできます。

上のコードを上から実行していき、11,12行目の2つの標準化データを見てみると、同じ値を返すことが分かると思います。

データフレームの保存と読み込み

txtファイルへの保存

作成したデータフレームをtxtファイルへ保存したい、または読み込みたい場合は以下のように、関数write.tableを用います。

関数write.tableの引数を次の表にまとめました。より詳細なデータの保存が可能となります。

row.namesTRUEの場合、行名を表示させる
col.namesTRUEの場合、列名を表示させる
sepデータの区切り文字を指定する。タブ区切りは"\t"、カンマ区切りは","とする。
quoteTRUEの場合、データをダブルクォーテーション""で囲む。
appendTRUEの場合、行末に出力される。FALSEの場合は上書き保存される。
fileEncodingエンコーディングの指定。WindowsとMacで作業する場合、fileEncoding="CP932"とするとよい。
na欠損データNAを指定して文字で置換する。
dec小数点を指定した文字で置換する。

出力結果は以下の画像のようになります。

txtファイルへの保存

csvファイルへの保存

作成したデータフレームは次のように、csvファイルに保存することが可能です。

csvファイルに保存したい場合は、write.tableではなくwrite.csvが便利です。

下の画像のように、"標準化データ.csv"をエクセルで確認することができます。

csvファイルへの保存

関数の引数は上で紹介したwrite.tableと同じなので省略します。

write.tableと同様に、csvファイルへの詳細な出力の設定が可能となります。

エクセルファイルへに保存

また、エクセルファイルに保存したい場合は、パッケージopenxlxsxをインストールする必要があります。

次のようにすることで結果をexcelファイルに保存することができます。

上のようにしてエクセルファイルへ保存することができます。

write.xlsxでもできますが、フォント"calibri"が標準となってしまいます。

フォントを変更したい場合は、6行目のように、フォントを"游ゴシック"に変更する必要があります。

データのプロット

関数plot

データのグラフを描きたいとき、関数plotを用いることでをデータをプロットすることが可能です。

上の実行すると、下の画像のプロットを描くことができます。

2行目の実行結果は1枚目の画像であり、Sepal.Lengthのみのプロットとなっています。

横軸は標本のインデックス(エクセルファイルでいう行番号)に対応しています。

4行目以降は、引数legendpar(new=T)を行うことで、複数のプロットを組み合わせています。

 

plotの画像

複数のplotを重ねる

関数plotの引数の設定を変更することで上の画像のように詳細な設定を行うことが可能です。

下の表に、引数をまとめました。

関数ployの引数
mainタイトル名を指定するxlimx軸の範囲を設定する
subサブタイトル名を指定するylimy軸の範囲を設定する
xlabx軸の名前を指定するxaxsFLASEの場合、x軸を描かない
ylaby軸の名前を指定するyaxsFLASEの場合、y軸を描かない
tmagタイトルなどのテキストの大きさの倍率loglog="x"とすることでx軸を対数軸にする。log="y"、log="xy"も同様に対数軸にする。
colプロットの点の色を指定する(col = "red", col = "blue"など)cexテキストの大きさを拡大縮小する。(cex.axis, cex.lab, cex.mailなどのように細かく指定できる。)
adjテキストの位置(adj = 0: 左揃え, 0.5: 中央揃え, 1:右揃え)psテキストをptx単位で大きさを指定できる。

legendの使いかたも下の表にまとめました。複数のグラフを比較するときに重宝します。

関数legendの引数
legendデータの種類の名前を指定する
pchプロットの点の種類を変更する
colpchで指定した記号の色を指定する(上の画像の赤い丸の形に指定できたりする)

データの相関図

下のようにデータフレームをplotに適用すると、データ(Sepal.Legth, Sepal.Width, Petal.Length, Petal.Width)の全ての組み合わせの相関図を描くことが可能です。

上のコードを実行すると下の画像を出力する子ができます。

全てのデータの相関図を描く

関数boxplot(箱ひげ図)

関数boxplotを用いることで、箱ひげ図を描くことが可能です。

下のコードの2行目のように、data2(Species以外のデータ)をに対してboxplotを行うと、下の画像の箱ひげ図が描かれます。

箱ひげ図

Sepal.LengthSpecies別で箱ひげ図で描きたい場合、4行目のようにすることで下の画像の箱ひげ図を描くことができます。

ある1つのデータを水準ごとに箱ひげ図を描きたい場合に便利です。

箱ひげ図(Speciesごと)

さらに、boxplot引数を設定することで下の画像のような、お洒落な箱ひげ図を描くことができます。

 

boxplot引数変更

上で用いたboxplotの関数の引数を次の表にまとめました。

ほとんどの引数がplotと同じように指定することができます。

より詳細な箱ひげ図を描くことができます。

関数boxplotの引数
mainタイトル名を指定するxlimx軸の範囲を設定する
subサブタイトル名を指定するylimy軸の範囲を設定する
xlabx軸の名前を指定するhorizontalTRUEの場合、箱ひげ図を横に描く
ylaby軸の名前を指定するborder箱の枠線の色と髭の色を指定する
colプロットの点の色を指定する(col = "red", col = "blue"など)notchTRUEの場合、箱に切り込みを入れる
width箱の横幅の長さrangeひげの位置を指定する。デフォルトでは1.5となっている(第3四分位数+1.5×(第3四分位数-第1四分位数の1.5をデフォルトとしている。)
staplewexひげの幅

プロットの保存方法

プロットの保存方法を紹介します。

Rstudioを使っている場合、次の画像のplot画面から、赤矢印のexportを行うことで画像の保存をすることが可能です。

画像保存方法

いちいちエクスポートするのが面倒だという場合は、次のpng("画像目.png")を用いることで、プロットの保存ができます。

plotを完了したら、4行目のdev.off()とすることで無事、作業しているディレクトリにpngファイルが保存されます。

データの相関係数

さきほどのプロットで、データの相関を見ることができました。

より数値的に各データの相関を計算したい場合には、cov2corを用います。

この関数は共分散行列を相関行列に変換する関数となっています。

共分散行列を詳しく知りたい方は平均ベクトルと共分散行列#1を見てください。

まず、分散を求めた時に用いた関数varを用いることで共分散行列を次のように計算できます。

さらに次のように、cov2corを用いることで、共分散行列を相関行列に変換することが可能です。

出力結果の見方ですが、上の1行目 2列目はSepal.LengthとSepal.Widthの相関係数、1行目 3列目はSepal.LengthとPetal.Lengthの相関係数,...という風になります。

また、次の自作関数を用いてすべてのirisの4つの変数の相関係数を計算することが可能です。

このcor_matは、先ほど求めた相関行列と一致します。

最後の行で、このcor_matをcsvファイルに保存しており、出力結果は次のようになります。

相関行列

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-, ,