0

私はRを使用して、正規分布線が適合した病気の人と健康な人のサイズ頻度ヒストグラムを作成しています。アドバイスを求めている問題が2つあります。

  1. 集約されたデータからヒストグラムを作成するにはどうすればよいですか?以下の表の例は、各サイズ内の病気の人と健康な人の数をまとめたものです。

dput(データ)

'structure(list(Size = c(25L, 28L, 31L, 45L, 60L), diseased = c(0L, 
22L, 10L, 5L, 2L), healthy = c(55L, 40L, 15L, 7L, 2L)), .Names = c("Size", 
"diseased", "healthy"), class = "data.frame", row.names = c(NA, 
-5L))'

2.両方のヒストグラムを正規分布線を合わせて1つの図にオーバーレイするにはどうすればよいですか。

集合データggplot(data、aes(x = Size、y = diseased))+ geom_bar(stat ='identity')に対して次のコードを試しましたが、これはうまく機能しますが、ヒストグラムを追加する方法がわかりません健康な人のために。

また、次のテキストを使用して、要約されたデータ(「データ」と呼ばれる)を元のraw形式に戻そうとしました:raw <-data [rep(1:data、times = data $ diseased)、 "Size"、drop = FALSE ]

次のエラーメッセージが表示されます。rep(1:data、times = data $ diseased)のエラー:無効な'times'引数。以前のコメントから、rep関数は「0」を処理できないようです

4

1 に答える 1

0

急いでいるので、通常の曲線をハックしましたが、これを使用して、2 つの「ヒストグラム スタイル」のプロットを重ねてプロットできます。

もちろん、要約だけでなく完全なデータセットがあれば、曲線を取得するのは簡単です。私はそれらを一緒にいじりましたが、ここで一般的なアイデアを得るには十分だと思います.

なぜこれをやりたいのかは完全にはわかりませんが、できます...

library(SDMTools) # Use this to get weighted means

testdata <- structure(list(Size=c(25L, 28L, 31L, 45L, 60L),
                           diseased=c(0L, 22L, 10L, 5L, 2L),
                           healthy=c(55L, 40L, 15L, 7L, 2L)),
                      .Names = c("Size", "diseased", "healthy"),
                      class = "data.frame",
                      row.names = c(NA, -5L))

barplot(testdata$healthy,
        names.arg=paste("                 ",testdata$Size),
        col="light blue",
        border="blue",
        xlim=c(0,6),
        ylim=c(0,70),
        width=0.5,
        space=1)
par(new=TRUE)
barplot(testdata$diseased,
        col="pink",
        border="red",
        xlim=c(0,6),
        ylim=c(0,70),
        width=0.5,
        space=c(2,1,1,1,1))

healthy_mean <- wt.mean(x=testdata$healthy,wt=testdata$Size)
healthy_sd <- wt.sd(x=testdata$healthy,wt=testdata$Size)
diseased_mean <- wt.mean(x=testdata$diseased,wt=testdata$Size)
diseased_sd <- wt.sd(x=testdata$diseased,wt=testdata$Size)

yfit_healthy <- as.data.frame(dnorm(0:max(testdata$healthy),
                              mean=healthy_mean,sd=healthy_sd))
names(yfit_healthy) <- "y"
yfit_diseased <- as.data.frame(dnorm(0:max(testdata$diseased),
                               mean=diseased_mean,sd=diseased_sd))
names(yfit_diseased) <- "y"

yfit_healthy$x <- seq(0,6,length.out=length(yfit_healthy$y))
yfit_diseased$x <- seq(0,6,length.out=length(yfit_diseased$y))

lines(yfit_healthy$x,
      (max(testdata$healthy)*yfit_healthy$y)/max(yfit_healthy$y),
      col="blue",lwd=2)

lines(yfit_diseased$x,
      (max(testdata$diseased)*yfit_diseased$y)/max(yfit_diseased$y),
      col="red",lwd=2)

このコードは私を取得します:

正確には私の最高のグラフではありません

于 2013-02-25T22:20:29.783 に答える