我试图找到一种合理的方法来可视化 R 中圆形随机变量的概率密度函数。最合适的方法是在极坐标图上。但是,我不确定如何在 R 中对此进行编码。有人可以使用 wrapped exponential distribution 作为示例说明如何做到这一点吗?我真的很感激。
答案 0 :(得分:1)
循环包似乎专注于 vonMises 分发。您可以滚动自己的包裹指数概率分布:
wrapped.exp <- function(theta, lambda){
lambda*exp(-lambda*theta)/(1-exp(-2*pi*lambda) )}
并使用 plotrix 包的 radial.plot
:
theta <- seq(0, 2*pi, len=100)
rval <- wrapped.exp(theta, .2)
# radial.plot's default radial limits are just the range so not really good for distributions.
radial.plot(rval,theta, radial.lim=c(0, 0.4))
绘图代码:
> png()
> rval <- wrapped.exp(theta, .2)
> radial.plot(rval,theta, radial.lim=c(0, 0.4))
> dev.off()
我会注意到“包裹指数”公式实际上并不是闭区间 [0, 2*pi]
上的真正数学函数,因为该函数在 0 = 2pi 处有两个值,所以它可能应该有使任何 theta + 或 > 2pi 成为 NA 或“mod 2pi”的代码。进一步注意:该公式实际上只是 2pi 处的截断指数。由于它是一个截断的密度,它似乎在 2*pi 处不应该有 0 值。出现径向图使用径向矢量的范围,而不是从 0 到最大值。似乎它应该默认为 c(0, range(lambda)[2])。当我有时间时,我会更正这个答案。
答案 1 :(得分:1)
pkg:pracma 中的 ezpolar
函数给出了比 plotrix::radial.plot
更典型的极坐标图,但是它与基本图形函数 curve
一样,因为它需要一个函数参数。>
if(!require(pracma) ){
install.packages("pracma", dependencies=TRUE); library(pracma) }
?ezpolar
wrapped.exp <- function(theta, lambda){
lambda*exp(-lambda*theta)/(1-exp(-2*pi*lambda) )}
theta <- seq(0, 2*pi, len=100)
# since it requires a functional argument with only one variable,
# I'm defining a separate helper function with predefined lambda
png() ; wrap.2 <- function(x) wrapped.exp(x,.2)
ezpolar(wrap.2); dev.off()