我有一个向量值,我想找到统计模式。我最近了解到一个函数multimode::locmodes
,它可以找到我想要的模式的位置。然而,我认为该函数假设我已经知道数据中存在的模式的数量。
例如,给定这个数据x
,我可以绘制一个直方图,发现可能有3种模式。然后我可以使用locmodes
和模式数量mod0 = 3
来获取位置。然而,这种方法要求我已经知道mod0
的值?有没有更编程的方法来找到mod0
的值?
set.seed(123)
x <- c(rnorm(250, 0.125, 0.03), rnorm(25, 0.85, 0.05), rnorm(200, 1.24, 0.02))
hist(x)
字符串
mm <- multimode::locmodes(x, mod0 = 3)
mm
#>
#> Estimated location
#> Modes: 0.1222717 0.853707 1.24139
#> Antimodes: 0.4918366 1.060701
#>
#> Estimated value of the density
#> Modes: 4.4179 0.3331802 3.866845
#> Antimodes: 8.32699e-13 0.001885466
#>
#> Critical bandwidth: 0.0383606
型
创建于2023-11-11使用reprex v2.0.2
2条答案
按热度按时间t2a7ltrp1#
你可以在带宽向量上循环
字符串
并以图形方式评估
它建议了三种模式,因为从3到下一个更高的数字的步长是“非常高的”。也许你可以使用95%
quantile
,但即使这样也不能提供太多的保护来防止任意性。型
multimode::sizer
还建议了三种模式,请查看?multimode::sizer
的参考资料,了解它们是如何确定的:型
型
a64a0gku2#
一个快速而肮脏的方法是找到内核密度的峰值:
字符串
注意,这给出了与
locmodes
几乎相同的结果。将
bw
参数设置为更高的值是一种平滑噪声的方法。它需要一些图形探索来找到正确的值。