我想模拟遵循不同分布的需求值(例如上面:线性>指数> invlog>等的开始)我对概率分布的概念感到困惑,但我认为我可以使用rnorm,rexp,rlogis等我有什么方法可以吗?
我认为可能是这个,但在R:Generating smoothed randoms that follow a distribution
答案 0 :(得分:1)
如果您知道要使用的分布及其参数,则使用rnorm()
,rexp()
等模拟R中常用概率分布的随机值相当简单。例如,rnorm(10, mean=5, sd=2)
从正态分布返回10次绘制,平均值为5,sd为2。
rnorm(10, mean = 5, sd = 2)
## [1] 5.373151 7.970897 6.933788 5.455081 6.346129 5.767204 3.847219 7.477896 5.860069 6.154341
## or here's a histogram of 10000 draws...
hist(rnorm(10000, 5, 2))
您可能对指数分布感兴趣 - 请查看hist(rexp(10000, rate=1))
以获取相关信息。
最简单的解决方案是调查您感兴趣的概率分布及其在R中的实现。
仍然可以从某些自定义函数返回随机抽取,并且有一些技术可以做到 - 但它可能会变得混乱。这是从零到3之间的x ^ 3 - 3x ^ 2 + 4区域定义的概率中随机绘制的非常粗略的实现。
## first a vector of random uniform draws from the region
unifdraws <- runif(10000, 0, 3)
## assign a probability of "keeping" draws based on scaled probability
pkeep <- (unifdraws^3 - 3*unifdraws^2 + 4)/4
## randomly keep observations based on this probability
keep <- rbinom(10000, size=1, p=pkeep)
draws <- unifdraws[keep==1]
## and there it is!
hist(draws)
## of course, it's less than 10000 now, because we rejected some
length(draws)
## [1] 4364