Rの離散均一分布のデフォルト関数はありますか?


28

Rのほとんどの標準分布には、pdf / pmf、cdf / cmf、変位値、ランダム偏差(dnorm、pnorm、qnorm、rnormなど)のコマンドファミリがあります。

いくつかの標準コマンドを使用して離散均一分布のこれらの関数を再現するのは簡単ですが、Rの離散均一分布をモデル化するための組み込み関数の好ましい組み込みファミリは既にありますか?


まだ答えを探している人のために、私はこれを見つけました:purrr :: rdunif、参照:rdrr.io/cran/purrr/man/rdunif.html
Nnie

1
@Nnie、それはあなたがリンクするものがランダムな描画のみを行うのに対し、それは関数の完全なファミリーを要求した質問全体に実際には答えません。
mdewey

完全なファミリーは、rdocumentation.org / packages / extraDistr / versions / 1.8.10 / topics /…でextraDistrパッケージに含まれているようです。
kcrisman

回答:


32

nicoが書いたように、Rには実装されていません。1..kで作業していると仮定すると、これらの関数は次のようになります。

ランダム生成の場合:

rdu<-function(n,k) sample(1:k,n,replace=T)

PDF:

ddu<-function(x,k) ifelse(x>=1 & x<=k & round(x)==x,1/k,0) 

CDF:

pdu<-function(x,k) ifelse(x<1,0,ifelse(x<=k,floor(x)/k,1))

4
ありがとう。組み込み関数を使用すると便利です(最小および最大のパラメータはunifファミリです)。他の標準分布を使用する方法で離散均一分布を使用するためだけに、スクリプトに関数定義を追加する必要があるのは少しいです。組み込み関数はエラー処理も処理し(たとえば、パラメーターが整数でない場合)、速度が最適化されます。

2
いい答えだ。そして、変位値については、qdu <-function(p、k)ifelse(p <= 0 | p> 1、return( "undefined")、ceiling(p * k))のようなことができます

15

以下は、mbqの投稿から適応した、範囲[min、max]の離散均一分布のコードです。

dunifdisc<-function(x, min=0, max=1) ifelse(x>=min & x<=max & round(x)==x, 1/(max-min+1), 0)
punifdisc<-function(q, min=0, max=1) ifelse(q<min, 0, ifelse(q>=max, 1, (floor(q)-min+1)/(max-min+1)))
qunifdisc<-function(p, min=0, max=1) floor(p*(max-min+1))
runifdisc<-function(n, min=0, max=1) sample(min:max, n, replace=T)

11

CRANタスクビュー:確率分布のページ言います:

離散的な均一分布は、基本関数を使用して簡単に取得できます。

私はこれの行に何かするはずです:

a <- round(runif(1000, min=0, max=100))

編集

csgillespieが指摘したように、これは正しくありません...

a <- ceiling(runif(1000, min=0, max=100))

(実施例間の値を生成することに注意しても動作する1から100ではなく0と100)


2
これは、エッジの場合には正しくありません。これを確認するには、次のコマンドを実行してみてくださいtable(round(runif(10000, min=0, max=2)))。明らかに、個別のユニフォームではありません。
csgillespie

@csgillespie:うまく見つけたので、答えを更新しました:)
nico

使えませんceiling(runif(1000, min=-1, max=100))か?
GUNG -復活モニカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.