科学の箱

科学・IT・登山の話題

R

Rによるやさしい統計学/3-2つの変数の記述統計

投稿日:

散布図を作成

Rで散布図を作成する。データはrunifで10個ずつ作成する。データのレンジは50~100.

x_test <- as.integer(runif(10, 50, 100))
y_test <- as.integer(runif(10, 50, 100))

x_testおよびy_testをプロットする。ドットは見やすくするために大きめで表示する(pch=19)。さらに赤色で区別がつくようにする。デフォルトは黒。

plot(x_test, y_test, pch=19, col="red")

plot

散布図の利用

散布図は2変数の関連を視覚的に表示することでおおよその関係を推測できる。データが与えられ個々のデータについて関連が推測できない時に、最初のステップとして利用できる。おおよその関連性があることがわかれば、より詳細な分析である回帰分析などに移行できる。

しかし変数の数が多いときには個々の変数について2値の関連性をプロットするのは手間がかかる。このとき前もって関連性がありそうな変数についてわかれば、その変数に絞って散布図を作成すればよいので時間の短縮になる。

このフィルタリングに使えるのが共分散である。次は共分散について計算してみる。

共分散

共分散を手で計算してみる。

> cov_x_y = sum((x_test - mean(x_test)) * (y_test - mean(y_test)))/length(x_test)
> cov_x_y
[1] 20.8

次にRで用意されているcov()を使う。

> cov(x_test, y_test)
[1] 23.11111

計算結果が異なるのはcov()では自由度n-1で計算した不偏共分散の結果が戻っているためである。

さてこの共分散の結果をどのように解釈すればよいのだろうか。共分散は正の方向に大きいほどあるいは負の方向に小さいほど2つの変数に関連がある予想される。0に近ければお互いに偏差が打ち消しあっているので関連は小さい。しかし共分散では単位が異なると計算が結果に違い出てくる。例えば身長と体重から共分散を計算するときにmおよびkgから計算された共分散よりもcmとgで計算された共分散が大きくなる。

これでは本来の目的である変数間の相関を予測しフィルタリングする作業に使えない。単位の効果をなくすために共分散をそれぞれの変数の標準偏差で割る。この値を相関係数と呼ぶ。

相関係数

相関係数を手で求める。

> cov(x_test, y_test)/(sd(x_test) * sd(y_test))
[1] 0.144664

次にRで提供されているcor()を使う。

> cor(x_test, y_test)
[1] 0.144664

クロス集計表

相関は量的変数の関連性を表現するのに使えるが、質的変数には別の取り扱いが必要になる。質的変数同士の関係を連関とよぶ。

クロス集計表は2つの変数について組み合わせを集計した表である。クロス集計表を作成することで質的変数についての関係を調べることができる。

クロス集計表を作成するために数学と国語について好きおよび嫌いでデータを作成する。

> 数学<-sample(c("好き", "嫌い"), 10, replace=TRUE)
> 国語<-sample(c("好き", "嫌い"), 10, replace=TRUE)
> 数学
 [1] "嫌い" "嫌い" "好き" "嫌い" "好き" "好き" "好き" "嫌い" "好き" "好き"
> 国語
 [1] "嫌い" "好き" "嫌い" "好き" "嫌い" "好き" "嫌い" "嫌い" "嫌い" "好き"

クロス集計表をtable()で作成する。

> table(数学, 国語)
      国語
数学   嫌い 好き
  嫌い    2    2
  好き    4    2

相関係数とおなじように質的変数でも数値で連関がわかれば、より詳細なデータ分析に移行するにあたって変数をフィルタリングして時間を有効に活用できる。相関係数の特別な場合である、ファイ係数が利用できる。ファイ係数を利用するためにはあらじめ2値データを0と1に変換する必要がある。

ファイ係数

データの前準備として0,1に変換する。

> 数学_w <- ifelse(数学=="好き", 1, 0)
> 数学_w
 [1] 0 0 1 0 1 1 1 0 1 1
> 国語_w <- ifelse(国語=="好き", 1, 0)
> 国語_w
 [1] 0 1 0 1 0 1 0 0 0 1

ファイ係数を計算する。計算はcor()が利用できる。

> cor(数学_w, 国語_w)
[1] -0.1666667

0,1変換していないデータにcor()を適用するとエラーになる。

> cor(数学,国語)
 以下にエラー cor(数学, 国語) :  'x' は数値でなければなりません

練習問題

1

データを作成する。

> study_time <- c(1, 3, 10, 12, 6, 3, 8, 4, 1, 5)
> point <- c(20, 40, 100, 80, 50, 50, 70, 50, 10, 60)

おおよその傾向を見る

 plot(study_time, point, pch=19, col="red")

2

相関係数を算出する

> cor(study_time, point)
[1] 0.9092974

3

データ作成が面倒くさいのでえランダムで作成する。

> food<-sample(c("洋食", "和食"), 20, replace=TRUE)
> food
 [1] "洋食" "洋食" "洋食" "和食" "和食" "和食" "洋食" "洋食" "洋食" "和食"
[11] "和食" "和食" "洋食" "和食" "洋食" "和食" "和食" "和食" "洋食" "和食"

> taste<-sample(c("甘党", "辛党"), 20, replace=TRUE)

> taste
 [1] "甘党" "甘党" "辛党" "辛党" "甘党" "辛党" "甘党" "甘党" "辛党" "辛党"
[11] "辛党" "辛党" "辛党" "甘党" "甘党" "甘党" "甘党" "甘党" "甘党" "甘党"

クロス集計表を作成する

> table(food, taste)
      taste
food   甘党 辛党
  洋食    6    3
  和食    6    5

4

ファイ係数を計算する

> food_w <- ifelse(food=="洋食", 1, 0)
> taste_w <- ifelse(taste=="甘党", 1, 0)
> cor(food_w, taste_w)
[1] 0.1230915

メタ情報

inarticle



メタ情報

inarticle



-R

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Rによるやさしい統計学/5-統計的検定-1

5章で学ぶこと 5章では検定方法について紹介している。以下の方法について検定対象と検定する条件を理解する。 Z検定 t検定 無相関検定 独立性の検定 また検定の手順についてもまとめている。 検定方法 …

no image

データフレームで層別に操作をする

Rでデータベースに似たデータを取り扱う際には、データフレームを使うことがおおい。JavaはPHPなどのプログラミング言語では、層別に集計作業をする際にはデータベース上のSQLか、データを読み込んでから …

no image

Rでのラインの表示

Rでラインを引くために関数がいくつか用意されている。 abline() 画像全体に線を引く segments() 始点と終点を指定してその間に線を引く points() “点” …

no image

Rによるやさしい統計学/7-分散分析

(1)学部によりテストの結果に有意な差があるかを調べる。 データはcsv形式で作成し、7_1_test_score.csvとする。以下はデータの内容。 法学部,文学部,理学部,工学部 75,62,65 …

no image

与えられたパラメータにもっとも近い値を探す

ベクトルからパラメータにもっとも近い値を探す方法 >  x <- 1:10 >  num <- which( abs(x-5.2) == min(abs(x-5.2)) ) & …

2014年1月
« 12月   2月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

side bar top



アーカイブ

カテゴリー