3

ステップ1。必要なパッケージをロードします。

library(ggplot2)
library(MASS)

ステップ2。ガンマ分布に適合する 10,000 個の数値を生成します。

x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]

Step.3. xどの分布に適合するかわからない場合、pdf(確率密度関数)を描画します。

t1 <- as.data.frame(table(x))
names(t1) <- c("x","y")
t1 <- transform(t1,x=as.numeric(as.character(x)))
t1$y <- t1$y/sum(t1[,2])
ggplot() + geom_point(data = t1,aes(x = x,y = y)) + theme_classic()

ここに画像の説明を入力

Step.4. グラフから、 の分布がxガンマ分布に非常に似ていることがわかるため、 fitdistr()in パッケージを使用しておよびガンマ分布MASSのパラメーターを取得します。shaperate

fitdistr(x,"gamma") 
##       output 
##       shape           rate    
##   2.0108224880   0.2011198260 
##  (0.0083543575) (0.0009483429)

Step.5. 実際の点(黒点)と当てはめグラフ(赤線)を同じプロットに描いてください。ここに問題があります。最初にプロットを見てください。

ggplot() + geom_point(data = t1,aes(x = x,y = y)) +     
geom_line(aes(x=t1[,1],y=dgamma(t1[,1],2,0.2)),color="red") + 
theme_classic()

ここに画像の説明を入力

質問 1: 実際のパラメーターは、、、shape=2関数rate=0.2を使用しfitdistr()て取得するパラメーターはshape=2.01、、rate=0.20です。この2つはほぼ同じですが、なぜ当てはめグラフが実際の点にうまく当てはまらないのか、当てはめグラフに何か問題があるに違いないか、当てはめグラフと実際の点の描き方がまったく間違っています。 ?

質問 2: 確立したモデルのパラメーターを取得した後、どの方法でモデルを評価しますか?RSS(residual square sum)線形モデルのようなもの、または のp-valueshapiro.test()およびks.test()その他のテスト? 私は統計の知識が乏しいので、両方の質問から私を助けてください、ありがとう!(ps: 私は Google とスタックオーバーフローで何度も検索していますが、うまくいかないので、この質問は役に立たないので投票しないでください,Thx! )

4

1 に答える 1

1

何らかの理由で、適合線が正確に 10 倍高いように見えます。

ggplot() + geom_point(data = t1,aes(x = x,y = y)) +     
  geom_line(aes(x=t1[,1],y=(dgamma(t1[,1],2,0.2))/10),color="red") + 
  theme_classic()

完璧にフィットします: ここに画像の説明を入力

jbaums が述べたように、これはこの場合 0.1 である dx あたりの密度によって引き起こされます。

于 2016-01-12T09:09:02.580 に答える