カーブをヒストグラムにフィットさせるRの関数はありますか?
次のヒストグラムがあるとしましょう
hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
正常に見えますが、ゆがんでいます。このヒストグラムを包むように歪んでいる通常の曲線に適合させたい。
この質問は基本的なものですが、インターネットでRの答えを見つけることができないようです。
カーブをヒストグラムにフィットさせるRの関数はありますか?
次のヒストグラムがあるとしましょう
hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
正常に見えますが、ゆがんでいます。このヒストグラムを包むように歪んでいる通常の曲線に適合させたい。
この質問は基本的なものですが、インターネットでRの答えを見つけることができないようです。
回答:
私があなたの質問を正しく理解している場合は、密度推定値とヒストグラムが必要になるでしょう。
X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))
hist(X, prob=TRUE) # prob=TRUE for probabilities not counts
lines(density(X)) # add a density estimate with defaults
lines(density(X, adjust=2), lty="dotted") # add another "smoother" density
しばらくしてから編集します。
少しおしゃれなバージョンを次に示します。
X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))
hist(X, prob=TRUE, col="grey")# prob=TRUE for probabilities not counts
lines(density(X), col="blue", lwd=2) # add a density estimate with defaults
lines(density(X, adjust=2), lty="dotted", col="darkgreen", lwd=2)
それが生成するグラフとともに:
lines(density(X,na.rm= TRUE)
ベクトルにNA値が含まれている可能性があるため、追加のパラメーターを指定することをお勧めします。
そのようなことはggplot2で簡単です
library(ggplot2)
dataset <- data.frame(X = c(rep(65, times=5), rep(25, times=5),
rep(35, times=10), rep(45, times=4)))
ggplot(dataset, aes(x = X)) +
geom_histogram(aes(y = ..density..)) +
geom_density()
またはDirkのソリューションからの結果を模倣する
ggplot(dataset, aes(x = X)) +
geom_histogram(aes(y = ..density..), binwidth = 5) +
geom_density()
ここに私がそれをする方法があります:
foo <- rnorm(100, mean=1, sd=2)
hist(foo, prob=TRUE)
curve(dnorm(x, mean=mean(foo), sd=sd(foo)), add=TRUE)
ボーナス演習は、ggplot2パッケージでこれを行うことです...
ダークは、密度関数をヒストグラムにプロットする方法を説明しました。しかし、歪んだ正規分布のより強い仮定を使用して、密度の代わりにそれをプロットしたい場合があります。分布のパラメーターを推定し、snパッケージを使用してプロットできます。
> sn.mle(y=c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
$call
sn.mle(y = c(rep(65, times = 5), rep(25, times = 5), rep(35,
times = 10), rep(45, times = 4)))
$cp
mean s.d. skewness
41.46228 12.47892 0.99527
これはおそらく、よりスキューが通常のデータでよりうまく機能します。
私も同じ問題を抱えていましたが、Dirkの解決策は機能していないようでした。毎回この警告メッセージを受け取っていました
"prob" is not a graphical parameter
私は読んで?hist
約見つけましたfreq: a logical vector set TRUE by default.
私のために働いたコードは
hist(x,freq=FALSE)
lines(density(x),na.rm=TRUE)