假设我有一个矢量a,像这样:
set.seed(1)
a <- sort(abs(rnorm(500, mean = 1000, sd = 350)))
我想找出那个间隔的最小尺寸(或可能是范围,我不确定这里的英文单词,对不起),如果你剪切矢量,最小的组将有例如30个元素。
在这种情况下,结果如下所示:
cut(a, breaks = seq(0, max(a) + a[30], by = a[30]))
和a[30]
(此处为462.2426)将是我正在搜索的值。在这种情况下,很容易找到它,因为向量是正态分布的,并且值很可能是a[30]
或max(a) - a[length(a) - 30]
。但是如何找到它一般?
如果有人对这有什么好处感兴趣:在变异函数中,滞后类应该包含至少30个点对(近似经验值),但是你得到的滞后类越多,你的变异函数看起来就越好(或者在一些罕见的情况下)从滞后类中得出的绘图点只会使你的变异函数可解释。我正在寻找的价值将作为width
参数传递给gstat::variogram
。
对不起,如果这个问题是重复的,但我当时找不到另一个。
答案 0 :(得分:0)
如果我执行前两个命令然后
table(cut(a, breaks = seq(0, max(a) + a[30], by = a[30])))
我得到了输出
(0,462] (462,924] (924,1.39e+03] (1.39e+03,1.85e+03] (1.85e+03,2.31e+03] (2.31e+03,2.77e+03]
30 175 226 65 3 1
因此a[30]
似乎不是您要查找的数字,因为有两个组的元素少于30个。
也许你可以考虑一下你的问题并以更精确的方式陈述它。我看到的一个问题是,在很多情况下,最后一组只有很少的元素(如在你的例子中),所以也许你应该把最后一个组视为特殊组,而不是要求它应该至少有30个元素。如果您排除超过30&#39;的第一组和最后一组。条件,然后
intLength <- max(a[k:n] - a[1:(n-k+1)])
startingPoint <- a[which.max(a[k:n] - a[1:(n-k+1)])]
breakPoints1 <- seq(startingPoint-intLength, min(a)-intLength, by = -intLength)
breakPoints2 <- seq(startingPoint, max(a)+intLength, by = intLength)
cut(a, breaks = c(breakPoints1,breakPoints2))
(n = 500
,k = 31
)可能对您有所帮助。