R에 불연속 균일 분포에 대한 기본 기능이 있습니까?


28

R의 대부분의 표준 분포에는 pdf / pmf, cdf / cmf, Quantile, random 편차가 있습니다 (예 : 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
좋은 대답입니다. 그리고 Quantile의 경우 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))

그래도 작동합니다 (이 예제는 0에서 100이 아닌 1 에서 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.