1

二項分布と正規分布の間の二乗和を計算し、データを次の関数として表示する関数をRで記述しています。p

これが私が持っているものです:

まず、確率p(n = 100)でランダムな二項分布を生成します。

random_binom<-rbinom(100,100,p)

次に、あるランダム要素の値がnp(平均)以下である確率とsqrt(np(1-p))、正規分布によるの標準偏差を求めます。

d_norm<-dnorm(random_binom,p*100,sqrt(100*p*(1-p)))

そして、分布のランダムな値が二項分布による平均の値以下になる確率

d_binom<-dbinom(random_binom,100,p)

最後に2を引き、正方形を取り、それを返します。

result<-sum((d_norm-d_binom)^2) return(result)

これで、コンソール内で、次のすべての関数を作成しました。

myfunction:

function(p){
random_binom<-rbinom(100,100,p)
d_norm<-dnorm(random_binom,p*100,sqrt(100*p*(1-p)))
d_binom<-dbinom(random_binom,100,p)
result<-sum((d_norm-d_binom)^2)
return(result)
}

pのベクトルを渡したいのですがp<-(c(0:99)/100)、これを行うと、関数は次のようになります。

inf

値のベクトルではなく。プロットできるように、Rに値のベクトルを返すようにするにはどうすればよいですか?lapplyを使用してみましたが、データが奇妙な形式で返されます。

[[95]]
[1] 0.01064091

[[96]]
[1] 0.01418807

[[97]]
[1] 0.02647295

[[98]]
[1] 0.05065813

[[99]]
[1] 0.1179141

[[100]]
[1] 0.7342808

つまり、各要素には別の要素が含まれているため、グラフ化が非常に困難になります。

4

1 に答える 1

3

問題は、pが0の場合、関数がこれを効果的に実行することです。

dnorm(0, 0, 0)
[1] Inf

多分あなたが欲しいp<-(c(1:99)/100)ですか?


lapplyを返しますlist。を使用unlistして配列に変換できます。lapply呼び出しの結果をに割り当てたとしLます。次に、これを行うことができます

unlist(L)
于 2012-09-09T12:48:56.727 に答える