在 stackoverflow 的帮助下,我生成了一个由成对的 x 和 y 值组成的数据集,每个值都有一个站点标识符。我需要按站点(简单)进行子集化,然后根据它们的 x 值对点进行分类,并计算每个 bin 的 x 和 y 的平均值。
诀窍是 bin 需要 a) 至少覆盖 x (easy) 的对数范围的 1%,并且 b) 足够大以使 y 的标准误差小于该 bin 的 y 平均值的 1/2 .
在实践中,我想从 x 的最大值开始,将 bin 范围设置为 log(x) 范围的 1%,然后在必要时将其扩展,直到满足错误条件。然后下一个 bin 将从第一个停止的地方开始,并以相同的方式调整大小,依此类推。
样本数据生成器:
x <- runif(200,0,1)
y <- x + rnorm(200,0,0.1)
df <- data.frame(site=factor(c(rep("EBT",100), rep("MUT",100))),x,y
感谢您的帮助,我肯定在探索我在 R 中可以做的事情的前沿。
我正在尝试遵循此分析,以防有人想知道重点是什么
编辑:我还没有编写循环来执行此操作,但是在伪伪代码中我想我会尝试:
set minimum bin width
start at the largest x value
set the bin width to the minimum
if stderr(y) < (mean(y) / 2)
calculate and store mean x and mean y
otherwise extend bin by one data point and repeat
next bin starts at first x following last bin
repeat bin calculations until last bin runs into 0
then combine final partial bin with previous complete bin and recalculate means
我很高兴通过一些循环来尝试一下,但在过去我认为必须以这种方式完成的事情最终只需要几行更优雅的代码,所以我想我会把它放在那里。