2016-06-22 12 views
4

3つの異なる密度プロットをRにオーバーレイして、3つの線をすべて表示する1つのプロットを作成しようとしています(スーパーインポーズ)。私はsmパッケージがインストールされている/ロードされているが、私は無駄に自分のデータでそれを使ってみました。 私は単にdensity()を使って3つの個別のデータプロットを作成し、値をプロットしました。私のコードは次のようになります。sm.density.compare():1つのプロットに複数の密度推定を表示

library(sm) 

set.seed(0) 
x <- rnorm(100, 0, 1) 
y <- rnorm(126, 0.3, 1.2) 
z <- rnorm(93, -0.5, 0.7) 
dx <- density(x) 
dy <- density(y) 
dz <- density(z) 

plot(dx) 
plot(dy) 
plot(dz) 

しかし、私は、グラフをオーバーレイするsm.density.compare()を使用しようとすると:

sm.density.compare(dx,dy,model="equal") 

私が言うエラーが出る:sm.densityで

エラー.compare(dx、dy、model = "equal"):
sm.density.compareは1-dデータトレースのみを処理できます。

これをどのように修正できますか?私はかなり多くを研究しましたが、成功しませんでした。私はかなり新しいRですし、本当に助けを使うことができます。

+0

ハズレ!その完璧な、それは働いた!ありがとう! –

答えて

6

sm.density.compare()を使用する場合は、density()を使用しないでください。

sm.density.compare()密度推定を行っています。具体的には、グループ化されたデータの密度推定を行っているため、異なるグループの密度を同じグラフにプロットすることができます。ここで

はあなたが本当に何をする必要があるかです:

## three groups, each of length: length(x), length(y), length(z) 
group.index <- rep(1:3, c(length(x), length(y), length(z))) 
## collect data together and use sm.density.compare() 
den <- sm.density.compare(c(x,y,z), group = group.index, model = "equal") 
## plot will be generated automatically 

den3

model = "equal"を使用する場合は、sm.density.compare()は値を戻しました。 str(den)を見て:estimaateは密度推定値の、マトリックスである一方、

List of 4 
$ p   : num 0 
$ estimaate : num [1:3, 1:50] 2.37e-07 3.81e-06 6.06e-10 2.17e-06 2.26e-05 ... 
$ eval.points: num [1:50] -4.12 -3.94 -3.76 -3.58 -3.4 ... 
$ h   : num 0.376 

hは、すべての密度推定のために使用される帯域幅が含まれ、eval.pointsは、推定ポイントが含まれています。 (エイドリアンにはタイプミスがあります。「見積もり」でなく「見積もり」でなくてはならない、LOL)。

smからのすべての機能は、接頭辞sm.から始まり、を受け入れ、sm.optionsに渡されます。 ?sm.optionsをお読みください。カラー表示、ラインの種類と線幅、帯域幅の選択方法などを完全に制御できます。

リファレンスバンドは2つのグループのデータにのみ追加されます。つまり、ペアワイズの比較のためには、sm.density.compare()がもっとできます。例えば:lowerupperが基準バンド/信頼領域のバウンドを与える

den2 <- sm.density.compare(c(x,y), group = rep(1:2, c(length(x), length(y))), 
          model = "equal") 

den2

> str(den2) 
List of 6 
$ p   : num 0.22 
$ estimate : num [1:2, 1:50] 4.92e-06 2.70e-05 2.51e-05 1.00e-04 1.09e-04 ... 
$ eval.points: num [1:50] -4.12 -3.94 -3.76 -3.58 -3.4 ... 
$ upper  : num [1:50] 0.00328 0.00373 0.00459 0.00614 0.00886 ... 
$ lower  : num [1:50] 0 0 0 0 0 ... 
$ h   : num 0.44 

。あなたがdensity()を使用している場合


、そしてこのような状況ではsm.density.compare()

## set universal estimation range 
xlim <- range(x, y, z) 
dx <- density(x, from = xlim[1], to = xlim[2], n = 200) 
dy <- density(y, from = xlim[1], to = xlim[2], n = 200) 
dz <- density(z, from = xlim[1], to = xlim[2], n = 200) 

を使用していない、各グループの密度推定が独立して行われます。各「密度」オブジェクトがリストされ、例えば:

> str(dx) 
List of 7 
$ x  : num [1:200] -2.64 -2.61 -2.58 -2.55 -2.52 ... 
$ y  : num [1:200] 0.023 0.026 0.0291 0.0323 0.0356 ... 
$ bw  : num 0.31 
$ n  : int 100 
$ call  : language density.default(x = x, n = 200, from = xlim[1], to = xlim[2]) 
$ data.name: chr "x" 
$ has.na : logi FALSE 
- attr(*, "class")= chr "density" 

xは、評価点、yが推定される密度、bwが使用する帯域幅です。独立した推定のため、dx$bwdy$bwおよびdz$bwが異なることがわかります。ただし、density()を呼び出すときは、bwという引数を使用して、汎用のbwを手動で指定できます。 ?densityを参照してください。ここでは例を示しません。

これらの密度プロットをオーバーレイするには、自分で行う必要があります。

## set global plotting range 
ylim <- range(dx$y, dy$y, dz$y) 
## make plot 
plot(dx$x, dx$y, col = 1, lwd = 2, type = "l", xlim = xlim, ylim = ylim) 
lines(dy$x, dy$y, col = 2, lwd = 2) 
lines(dz$x, dz$y, col = 3, lwd = 2) 

do it yourself

関連する問題