2

課題として、PMF を使用して特定の幾何分布のサンプルを開発し、アルゴリズム化して生成する必要がありました。

ここに画像の説明を入力

逆変換法を使用して、値を生成する次の式を思い付きました。

ここに画像の説明を入力

ここで、U はサンプルのサイズに応じて値または n 値を表し、Unif(0,1) 分布から抽出され、p は上記の PMF で述べたように 0.3 です。

私はアルゴリズム、R での実装を持っており、経験値の理論値 (R で生成) への調整を視覚的に評価するために QQ プロットを既に生成しています。つまり、生成されたサンプルが実際に幾何分布に従うかどうかです。

今、生成されたサンプルを適合度テスト、つまりカイ二乗に提出したかったのですが、Rでこれを行うのに問題があります.

4

3 に答える 3

1

パッケージ「vcd」には、「離散データの適合度テスト」として説明されている「goodfit」機能があります。

G.fit <- goodfit(x, type = "nbinomial", par = list(size = 1))

以前の質問で投稿したコードを使用するつもりでしたが、そのコードを削除したようです。私はそれが攻撃的だと思います。このフォーラムを使用して宿題の回答を収集し、それを改ざんして証拠を削除していますか? (削除された質問は、十分な担当者がいる私たちには引き続き表示されます。インターフェースは、賛成票のある回答を含む質問の削除を防止するため、この質問を削除することはできません。)

幾何学的に分布したサンプルをテストするための QQ プロットを生成する

- - 質問 - -

Rで生成されたn要素のサンプルがあります

sim.geometric <- function(nvals)
{
    p <- 0.3
    u <- runif(nvals)
    ceiling(log(u)/log(1-p))
}

具体的には、実際に幾何学的分布に従うかどうか、その分布をテストしたいと思います。QQ Plot を生成したいのですが、方法がわかりません。

------再投稿された回答----------

QQ プロットは、同じ確率パラメーターを持つ幾何分布から抽出された「真の」サンプルと比較すると、直線になるはずです。1 つは関数に 2 つのベクトルを与え、基本的に各分位点で逆 ECDF を比較します。(あなたの試みはあまり成功していません:)

sim.res <- sim.geometric(100) sim.rgeom <- rgeom(100, 0.3) qqplot(sim.res, sim.rgeom)

ここでは、qqplot のヘルプ ページの作成者の指示に従います (これにより、上の曲線が同一線上で反転します)。

png("QQ.png")
qqplot(qgeom(ppoints(100),prob=0.3), sim.res,
       main = expression("Q-Q plot for" ~~ {G}[n == 100]))
dev.off()

---画像は含まれていません---

各分布の 25 パーセンタイル ポイントと 75 パーセンタイル ポイントを通る線をプロットすることで、「適合線」を追加できます。(「確率質量」がどこにあるかをよりよく理解するために、これにジッター機能を追加しました:)

sim.res <- sim.geometric(500)
qqplot(jitter(qgeom(ppoints(500),prob=0.3)), jitter(sim.res),
       main = expression("Q-Q plot for" ~~ {G}[n == 100]), ylim=c(0,max( qgeom(ppoints(500),prob=0.3),sim.res )),
xlim=c(0,max( qgeom(ppoints(500),prob=0.3),sim.res )))
 qqline(sim.res, distribution = function(p) qgeom(p, 0.3),
       prob = c(0.25, 0.75), col = "red")
于 2013-12-04T07:20:09.500 に答える
1

vector にランダムに生成された変量があると仮定しましょうx。次のことができます。

x <- rgeom(1000,0.2)

x_tbl <- table(x)
x_val <- as.numeric(names(x_tbl))
x_df <- data.frame(count=as.numeric(x_tbl), value=x_val)

# Expand to fill in "gaps" in the values caused by 0 counts
all_x_val <- data.frame(value = 0:max(x_val))
x_df <- merge(all_x_val, x_df, by="value", all.x=TRUE)
x_df$count[is.na(x_df$count)] <- 0

# Get theoretical probabilities 
x_df$eprob <- dgeom(x_df$val, 0.2)

# Chi-square test: once with asymptotic dist'n, 
# once with bootstrap evaluation of chi-sq test statistic
chisq.test(x=x_df$count, p=x_df$eprob, rescale.p=TRUE)
chisq.test(x=x_df$count, p=x_df$eprob, rescale.p=TRUE, 
   simulate.p.value=TRUE, B=10000)
于 2013-12-03T18:57:10.023 に答える