[R]正規分布に従う2次元データの作り方

サイト移転のお知らせ

移転先はこちらです。
[R]正規分布に従う2次元データの作り方
新たな記事は移転先に掲載しておりますので、そちらをご確認ください。

スポンサードリンク

ライブラリーの読み込み

擬似的な2次元データを作成するためには
MASSパッケージを読み込む必要があります。

 

MASSパッケージはRをインストールした時点で
すでに内蔵されているので、
library関数で読み込みます。

 

library(MASS)		# MASSパッケージの読込

2次元データを作成するmvrnorm関数

2次元データを生成する関数はmvrnorm関数です。

 

正規乱数を生成するrnorm関数と同じように
2次元正規乱数を生成することができます。

 

mvrnorm関数は正規分布に従う2つの変数x,yの
平均値と分散共分散行列を入力して使います。

 

mvrnorm(生成するデータの数, 平均値のベクタ, 分散共分散行列)

 

2つの変数の平均値をMuというベクタ、
2つの変数間の分散共分散行列をSiというマトリクス
として作成し、mvrnorm関数に入力するとわかり易いと思います。

使用例

次の条件で2つの変数x,yの
2次元データを作成してみます。

 

 

変数x

変数y

平均値

25

35

標準偏差

5

7

相関係数

0.8

 

平均値はそれぞれの値を
そのままベクタにすれば利用できます。

 

Mu <- c(25, 35)		# 平均値ベクタの作成

 

作りたい2次元データの
分散共分散行列が必要となるので、
標準偏差と相関係数を
分散共分散行列に変換する必要があります。

 

相関係数は以下の式より求められるので、
この式から分散・共分散を求めます。

 

[R]正規分布に従う2次元データの作り方
[R]正規分布に従う2次元データの作り方はxとyの共分散、[R]正規分布に従う2次元データの作り方はxの標準偏差、[R]正規分布に従う2次元データの作り方はyの標準偏差

 

分散は標準偏差の2乗なので、そのまま2乗すれば分散となります。

 

求める分散[R]正規分布に従う2次元データの作り方・共分散[R]正規分布に従う2次元データの作り方は次のようになります。

 

[R]正規分布に従う2次元データの作り方
[R]正規分布に従う2次元データの作り方
[R]正規分布に従う2次元データの作り方

 

これを数値として当てはめるとこのようになります。

 

[R]正規分布に従う2次元データの作り方
[R]正規分布に従う2次元データの作り方
[R]正規分布に従う2次元データの作り方

 

この値を使って分散共分散行列Siを作ります。

 

Si <- matrix(c(25, 28, 28, 49), ncol=2)		# 分散共分散行列の作成

 

あとはmvrnorm関数に当てはめるだけで
自動的に乱数を生成してくれます。

 

今回は100組の2次元データを作成してみます。

 

dat <- mvrnorm(100, Mu, Si)			# データの生成
dat

 

このままでは行列形式のデータのため
今後の扱いがし易いように
データフレーム形式にしておきます。

 

dat <- data.frame(x=dat[,1], y=dat[,2])		# 扱いやすく加工
dat

 

コードのまとめ

library(MASS)					# MASSパッケージの読込
Mu <- c(25, 35)					# 平均値ベクタ
Si <- matrix(c(25, 28, 28, 49), ncol=2)		# 分散共分散行列
dat <- mvrnorm(100, Mu, Si)			# データの生成
dat <- data.frame(x=dat[,1], y=dat[,2])		# 扱いやすく加工
dat

 

 

 

散布図を描いて確認する

生成されたデータ datを使用して散布図を描いてみます。

 

生成したデータ datのxとyをそれぞれ横軸と縦軸に
当てはめてプロットしていきます。

 

Rでは plot関数をデータ datに対して使用すれば
そのまま散布図を描いてくれます。

 

さらに全体観を捉えやすくするために、
xlimと ylimを指定してプロットのエリアを少し広めに設定しました。

plot(dat, xlim=c(0, 50), ylim=c(10, 60))

応用するとこんなデータも作れる

データは次のコードを使いました。

2次元正規分布に従う2次元データを2つ作って それらを組み合わせることで、 外れ値を持った2次元データを作ることができます。
Mu2 <- c(25, 35)				# x,yの平均値の設定
Si2 <- matrix(c(25, 28, 28, 49), ncol=2)	# 相関係数の設定
dat2 <- mvrnorm(90, Mu2, Si2)			# データの生成
Muo1 <- c(10, 55)				# 外れ値の平均値1
Muo2 <- c(40, 15)				# 外れ値の平均値2
Sio <- matrix(c(4, 1, 1, 9), ncol=2)		# 外れ値の分散・共分散
Err1 <- mvrnorm(5, Muo1, Sio)			# 外れ値1
Err2 <- mvrnorm(5, Muo2, Sio)			# 外れ値2
Dat <- rbind(dat2, Err1, Err2)			# 1つのデータにする
Dat <- data.frame(x=Dat[,1], y=Dat2[,2])	# データフレームに変換

 

これを散布図にするとこのようなグラフになります。

 

[R]正規分布に従う2次元データの作り方

スポンサードリンク

「[R]正規分布に従う2次元データの作り方」と同じカテゴリーのページ

[R]無作為抽出をする
無作為抽出とはなにか? Rで無作為抽出をするにはsample関数を使う
[R]統計学的なデータの種類の扱い
Rで統計的(数学的)なデータの種類をどのように扱うかという話。
[R]度数分布表を作る方法
Rでは度数分布表を作る関数が用意されていない。 ここではRで度数分布表を作成するための方法と、度数分布表を自動で作成する関数を紹介している。
[R]ヒストグラムを描くhist関数
Rでは標準でヒストグラムを描くためのhist関数が用意されている。 ヒストグラムの書き方とヒストグラムを描くときの注意点について。
[R]代表値を求める
Rで代表値を求めるための方法。 平均値はmean、中央値はmedian、最頻値はtableを使って求めることができます。 基本的な使い方と補足説明を入れてあります。
[R]散布度を求める
散布度をRで求める方法。 散布度にはいろいろな基準があるが、Rはほとんどすべてを網羅している。
[R]箱ひげ図を描く
Rではboxplot関数を使って、箱ひげ図を直接綺麗に描くことができる。 Rで箱ひげ図を描くための方法を説明する。