3

以下の頻度表を考えると:

> print(dat)
V1    V2
1  1 11613
2  2  6517
3  3  2442
4  4   687
5  5   159
6  6    29

# V1 = Score
# V2 = Frequency

密度をプロットするにはどうすればよいでしょうか(つまり、y 軸の範囲は 0 から 1.0 です)。

現在、周波数プロットには次のものがあります。

plot(0,main="table",type="n");
lines(dat,lty=1)

# I need to use lines() and plot() here, 
# because need to make multiple lines in single plot

密度のためにそれにアプローチする方法がわかりません。

4

1 に答える 1

4

各ブロックの密度はV2 / sum(V2)、各行が個別のブロックであると想定しています。

あなたのデータのために

dat <- data.frame(V1 = 1:6, V2 = c(11613, 6517, 2442, 687, 159, 29))

私は得る:

> with(dat, V2 / sum(V2))
[1] 0.541474332 0.303865342 0.113862079 0.032032452 0.007413624 0.001352170

Rのツールを使用して確認できます。最初にコンパクト度数表を展開します

dat2 <- unlist(apply(dat, 1, function(x) rep(x[1], x[2])))

次にhist()、必要な値を計算するために使用します

dens <- hist(dat2, breaks = c(0:6), plot = FALSE)

結果のオブジェクトを見てください。

> str(dens)
List of 7
 $ breaks     : int [1:7] 0 1 2 3 4 5 6
 $ counts     : int [1:6] 11613 6517 2442 687 159 29
 $ intensities: num [1:6] 0.54147 0.30387 0.11386 0.03203 0.00741 ...
 $ density    : num [1:6] 0.54147 0.30387 0.11386 0.03203 0.00741 ...
     $ mids       : num [1:6] 0.5 1.5 2.5 3.5 4.5 5.5
 $ xname      : chr "dat2"
 $ equidist   : logi TRUE
 - attr(*, "class")= chr "histogram"

density次のコンポーネントに注意してください。

> dens$density
[1] 0.541474332 0.303865342 0.113862079 0.032032452 0.007413624 0.001352170

これは、元の頻度表表現からの手計算と一致します。

プロットに関しては、代わりに密度を描画したい場合は、次を試してください。

dat <- transform(dat, density = V2 / sum(V2))
plot(density ~ V1, data = dat, type = "n")
lines(density ~ V1, data = dat, col = "red")

軸の制限を強制したい場合は、次のようにします。

plot(density ~ V1, data = dat, type = "n", ylim = c(0,1))
lines(density ~ V1, data = dat, col = "red")
于 2012-05-02T11:29:09.863 に答える