【问题标题】:how to fit a von mises distribution to my data for generating random samples如何将 von mises 分布拟合到我的数据以生成随机样本
【发布时间】:2020-06-21 08:46:59
【问题描述】:

我的数据由来自特定位置的 16 对距离和方位组成。 我正在尝试为这 16 对生成 1000 个重采样(即创建新的 X2 和 Y2 集)。这样最终我将有 1000、16 对距离和方位,从而产生新的 16 个空间点。

my data, using the bearing and the distance to generate X2 and Y2

到目前为止,我所做的是从我已经拥有的 16 个值中重新采样(重新洗牌),

`

f2 <- function(x) data.frame(bearing = sample(min(HRlog$beartoenc):max(HRlog$beartoenc), 16, replace = TRUE), 
                                distance = sample(min(HRlog$distoenc):max(HRlog$distoenc), 16, replace = TRUE))

    se1randcent <- as.data.frame(lapply(seq(1000), f2))

`

但我的顾问们不同意。

我被告知我应该根据 von mises 分布重新采样,即将分布拟合到我的数据,然后根据我得到的 K 值从这个分布中重新生成 16 对。 我真的不知道这意味着什么。谁能帮我弄清楚?

我发布这个问题是因为我的时间压力很大,而且我怀孕了 9 个月,所以我的怀孕大脑无法帮助我及时解决问题。

对此的任何帮助将不胜感激!

【问题讨论】:

    标签: r distribution resampling


    【解决方案1】:

    R 中的包circular 可能会有所帮助。 von Mises 分布kappa 参数可以使用最小化方法(如下所示)或通过内置最大似然估计器mle.vonmises() 从您提供的角度计算。获得参数后,您可以使用 rvonmises 和样本数量和计算参数来生成样本。生成的样本似乎在 [0,2pi] 上,因此可以进行一些调整以确保正确表示平均值。

    拟合距离可能是一个单独的分布,并且此答案未解决两者之间可能存在依赖关系的问题。

    library(circular) # circular statistics and bessel functions
    
    # converting the bearing to be on the interval [-pi,pi] which is conventional for von Mises
    bearing <- c(19.07,71.88,17.23,202.39,173.67,357.04,5.82,5.82,95.53,5.82,94.13,157.67,19.07,202.39,173.67,128.15)
    bearing_rad <- bearing*2*pi/360 - pi
    
    # sample statistics
    circ_mean <-  mean.circular(bearing_rad) # mu of von Mises
    circ_sd <- sd.circular(bearing_rad) # related to kappa of von Mises
    circ_var <- var.circular(bearing_rad)
    
    # function to return difference in variances between
    diff_vars2 <- function(kappa){
      
      # squaring to make the function convex
      return((1 - A1(kappa) - circ_var)^2)
    }
    
    # solving for kappa by matching the variances
    kappa_solution <- optim(par = 1,fn=diff_vars2,lower = 0,method="L-BFGS-B")
    
    # sample from von mises distribution
    sampled_vals <- rvonmises(n=100, mu=circ_mean, kappa=kappa_solution$par)
    

    基于 cmets 添加内容

    一致性测试的一个问题是您的样本量很小。两种似乎合适的方法是瑞利和柯伊伯检验,它们测试均匀性。有关这些的背景在NCSS Manual

    两者都在circular中实现,但我不确定是否使用了修改后的瑞利。 bearings_rad 的结果表明 Rayleigh p-value = 0.2 和 Kuiper p-value

    rayleigh.test(x=bearing_rad)
    kuiper.test(x=bearing_rad)
    

    您可以使用dvonmises 将拟合直方图添加到上图中。这将给出半径,可以使用标准极坐标转换将其转换为 x 和 y。使角度起作用可能有点棘手。如果您不希望背景出现玫瑰图,可以使用plot

    rose.diag(bearing_rad)
    
    density_vals <- dvonmises(x=seq(0,2*pi,0.01)-circ_mean,mu = 0,kappa=kappa_solution$par)
    
    x_from_polar <- density_vals*cos(seq(0,2*pi,0.01))
    y_from_polar <- density_vals*sin(seq(0,2*pi,0.01))
    lines(x=x_from_polar,y=y_from_polar,col='red')
    

    【讨论】:

    • 感谢您的回答,非常有帮助!!我有一个问题,希望没问题。如果我理解正确,冯米塞斯通常使用角度和方位?或者是否可以对距离执行相同的代码?如果我想运行它的距离,我只需将“bearing_rad”切换到我的距离?然后为了生成我的对,我使用 rvonmises 分别从两者中采样??
    • 是的,von Mises 通常应用于角度或轴承。我假设你的距离不是以同样的方式限制的。距离可以缩放到角度范围,但这可能并不理想。粗略的直方图显示正偏斜距离,这表明伽马或对数正态分布或 Box-Cox 将其转换为正态。然后,您可以对角度和距离进行采样以进行配对。请注意,如果两者之间存在依赖关系,则需要一个 copula 函数。测试角度距离数据的依赖性超出了我的知识范围,可以在stats.stackexchange.com 上询问。
    • 如果答案足够,请接受它。谢谢:)
    • 你好,卡尔文。我有另一个关于循环包的问题,​​我真的希望你能帮助我。有没有办法使用圆形函数以及 kappa 和 mu 我必须生成一个像玫瑰图这样的圆形图来表示我的角度分布?还有方向性的p值?
    • 当您说方向性的 p 值时,您的确切含义是什么?分布不均匀的 p 值?抱歉,您可能很清楚,但我很少使用定向数据。
    猜你喜欢
    • 2016-12-25
    • 2016-11-23
    • 1970-01-01
    • 2019-06-28
    • 2021-07-20
    • 2020-12-06
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多