R中是否有离散均匀分布的默认函数?

机器算法验证 r 分布 均匀分布
2022-01-16 00:00:38

R 中的大多数标准分布都有一系列命令 - pdf/pmf、cdf/cmf、分位数、随机偏差(例如 - dnorm、pnorm、qnorm、rnorm)。

我知道使用一些标准命令来为离散均匀分布重现这些函数很容易,但是是否已经有一个首选的内置函数族用于在 R 中建模我不知道的离散均匀分布?

4个回答

正如 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))

以下是 [min, max] 范围内离散均匀分布的代码,改编自 mbq 的帖子:

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)

CRAN 任务视图:概率分布页面说:

用基本函数可以很容易地得到离散的均匀分布。

我想这应该做一些事情:

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

编辑

正如csgillespie指出的那样,这是不正确的......

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

不过会起作用(请注意,该示例将生成1到 100 之间的值,而不是 0 到 100 之间的值)

此功能可能是您正在寻找的:

https://purrr.tidyverse.org/reference/rdunif.html

rdunif(n, b, a = 1)