1

Allianz SE 社の単純な損失のヒストグラム、密度 (ガウス カーネル)、および適合した対応する正規分布をプロットしたいと考えています。(つまり、単純な損失から単純な利益を引いたものです)

次のコードがあります。

hist(alvsloss,breaks = 100, freq=F,main="Histogramm,
 density curve (gaussian kernel) of Allianz simple losses ",xlab="loss in percent",ylab="density")
lines(density(alvsloss), col="red", lwd=2)
curve(dnorm(x, mean = mean(alvsloss), sd = mean(alvsloss)), add=TRUE, col="blue", lty="dotted")

今、私は最初の問題を抱えています:

The fitted normal distribution is not drawn, I get the (german) error message:

In dnorm(x, mean = mean(alvsloss), sd = mean(alvsloss)) :
  NaNs wurden erzeugt

正規分布曲線はプロットされません。

2 つ目は、一般的な質問です。正規分布を除外すると、ヒストグラムと密度だけが得られます。コマンドを使用して、周波数を true と false の間で変更できます

 freq=T

また

 freq=F

両方の写真のスクリーンショットを添付しました (少なくとも 10 の評判がないので、アップロードする必要があります)。私はそれらを理解していません.freq = Tがあれば、y軸に密度値があります. では、0.0012 や 0.1 のような値が必要ですが、300 や 400 の値ではなく、密度は相対値である必要がありますか? また、カーネルがまったく一致しません。明らかに間違っていますか? 私が freq=FI を持っている場合、正しい画像が得られます。これで絶対値が得られました。たとえば、リターンが約 0.0 (中間の高さのピーク) だったケースが 30 件ありましたね。これで密度は適合しますが、freq=T 値であると考えたので、この場合は適合しないと予想していたので、別の方法である必要があります。この図では間違っているはずですか?

これが回答された場合、さらに質問があります: x 軸が好きではありません。より詳細なスケーリングを行うにはどうすればよいですか? 次のように言うのは正しいでしょうか: 0.5 から 0.1 までの右側のテールは左側のテールより重いので、この領域では利益よりも損失の確率が高くなりますか? 一方、極端な値は左側にのみ発生します: -0.2 の値と約 -0.4 の値です。この場合、極端な損失は発生していませんが、極端な利益は実現していますか? これは正しいですか?

私の間違いは何ですか、私はそれを見ることができませんか?

スクリーンショット:

ここでデータを見つけることができます

alvslossデータです

完全な解決策は次のとおりです。

hist(alvsloss,breaks = 100, freq=F,main="Histogramm, density curve (gaussian kernel) of Allianz simple losses ",xlab="loss in percent",ylab="density")
lines(density(alvsloss), col="red", lwd=2) 
curve(dnorm(x, mean = mean(alvsloss), sd = sd(alvsloss)), add=TRUE, col="blue",lwd=2)

これにより、次の図が得られます。

ここに画像の説明を入力

正しいようですね。

4

2 に答える 2

3

R のヘルプには次のように書かれています。

論理的; TRUE の場合、ヒストグラム グラフィックは度数の表現であり、結果のカウント コンポーネントです。FALSE の場合、確率密度、成分密度がプロットされます

freq属性がの場合TRUE、値がデータに出現する回数がプロットされます。値 1 の 400 倍と値 0 の 300 倍のベクトルがある場合、バーの高さは の場合は 400 と 300 になりfreq=TRUE、 の場合は 4/7 と 3/7 になりfreq=FALSEます。

質問の 2 番目の部分ではNA、ベクトルに値がある場合は、次の方法で平均を計算する必要があります。

mean(...,na.rm=TRUE)

さらに、ndoogan が言ったように、コードにタイプミスがあると思います。代わりにこれを試してください:

dnorm(x, mean = mean(alvsloss,na.rm=TRUE), sd = sd(alvsloss,na.rm=TRUE))

curve最後に、 を使用してベクトルをプロットすることはできません。関数に対してのみ機能します。だからあなたは試すことができます:

lines(dnorm(x, mean = mean(alvsloss,na.rm=TRUE), sd = sd(alvsloss,na.rm=TRUE)), col="blue", lty="dotted")

また

curve(dnorm,from=ToBeFilled,to=ToBeFilled,col="blue", lty="dotted",mean = mean(alvsloss,na.rm=TRUE), sd = sd(alvsloss,na.rm=TRUE)))

ToBeFilledそれぞれ、プロットする区間の境界です。

于 2013-03-14T12:17:06.813 に答える
1

作業しているデータをどこで取得するかわかりませんが、dnorm プロットの標準偏差をデータの標準偏差に設定してみてください...

curve(dnorm(x, mean = mean(alvsloss), sd = sd(alvsloss)), add=TRUE, col="blue", lty="dotted")
于 2013-03-14T12:13:03.600 に答える