我的问题如下:我从某个点一次在地面上几米处投下40个球。球滚动,停下来。使用计算机视觉,我计算了XY平面中的质心。我只对从质心到每个球的距离感兴趣,这是使用简单几何图形计算的。现在,我想知道与中心的单侧标准偏差。因此,我将能够知道一定数量的球在一个std半径内,更多球在2 * std半径内,依此类推。如何计算单面标准偏差?正常方法将声明一半球位于0均值的“负侧”。在这个实验中,这当然是没有意义的。我是否必须确保滚珠符合标准分布?感谢您的任何帮助。
我的问题如下:我从某个点一次在地面上几米处投下40个球。球滚动,停下来。使用计算机视觉,我计算了XY平面中的质心。我只对从质心到每个球的距离感兴趣,这是使用简单几何图形计算的。现在,我想知道与中心的单侧标准偏差。因此,我将能够知道一定数量的球在一个std半径内,更多球在2 * std半径内,依此类推。如何计算单面标准偏差?正常方法将声明一半球位于0均值的“负侧”。在这个实验中,这当然是没有意义的。我是否必须确保滚珠符合标准分布?感谢您的任何帮助。
Answers:
要表征质心周围的2D色散量,您只需要(均方根)均方根距离,
在这个公式中 是点坐标,其质心(平均值点)是
这个问题要求距离的分布。当球的质心周围具有各向同性的二元正态分布时(这是一个标准且物理上合理的假设),平方距离与具有两个自由度的卡方分布成比例(每个坐标一个)。这是将卡方分布定义为独立标准正态变量的平方和的直接结果,因为
这些方程式最严峻的考验是 ,那么分数 与最大的不同 。通过模拟实验, 和 ,并用缩放的卡方分布(红色)过度绘制平方距离的直方图,我们可以验证这一理论。
每行显示相同的数据:x轴的左边是对数; x轴是对数。在右侧,它显示了实际的平方距离。的真实价值 这些模拟设置为 。
这些结果用于100,000次迭代 和50,000次迭代 。直方图和卡方密度之间的一致性非常好。
虽然 未知,可以通过各种方式进行估算。例如,均方距离应为 乘以平均值 ,这是 。用,例如估算 如 乘以均方根距离。因此,对 将会 乘以RMS距离。使用的值 分布,我们可以这样说:
大约39%的距离小于 ,因为39%的 分布小于 。
大约78%的距离小于 次 ,因为78%的 分布小于 。
依此类推,您可以使用任意多个代替 要么 。作为检查,在模拟中 先前绘制的距离的实际比例小于 次 是
0.3932 0.6320 0.7767 0.8647 0.9178 0.9504 0.9700 0.9818 0.9890 0.9933
理论比例是
0.3935 0.6321 0.7769 0.8647 0.9179 0.9502 0.9698 0.9817 0.9889 0.9933
协议很好。
这是R
进行和分析仿真的代码。
f <- function(n, n.iter, x.min=0, x.max=Inf, plot=TRUE) {
#
# Generate `n.iter` experiments in which `n` locations are generated using
# standard normal variates for their coordinates.
#
xy <- array(rnorm(n*2*n.iter), c(n.iter,2,n))
#
# Compute the squared distances to the centers for each experiment.
#
xy.center <- apply(xy, c(1,2), mean)
xy.distances2 <- apply(xy-array(xy.center, c(n.iter,2,n)), c(1,3),
function(z) sum(z^2))
#
# Optionally plot histograms.
#
if(plot) {
xy.plot <- xy.distances2[xy.distances2 >= x.min & xy.distances2 <= x.max]
hist(log(xy.plot), prob=TRUE, breaks=30,
main=paste("Histogram of log squared distance, n=", n),
xlab="Log squared distance")
curve(dchisq(n/(n-1) * exp(x), df=2) * exp(x) * n/(n-1),
from=log(min(xy.plot)), to=log(max(xy.plot)),
n=513, add=TRUE, col="Red", lwd=2)
hist(xy.plot, prob=TRUE, breaks=30,
main=paste("Histogram of squared distance, n=", n),
xlab="Squared distance")
curve(n/(n-1) * dchisq(n/(n-1) * x, df=2),
from=min(xy.plot), to=max(xy.plot),
n=513, add=TRUE, col="Red", lwd=2)
}
return(xy.distances2)
}
#
# Plot the histograms and compare to scaled chi-squared distributions.
#
par(mfrow=c(2,2))
set.seed(17)
xy.distances2 <- f(2, 10^5, exp(-6), 6)
xy.distances2 <- f(n <- 40, n.iter <- 50000, exp(-6), 12)
#
# Compare the last simulation to cumulative chi-squared distributions.
#
sigma.hat <- sqrt((n / (2*(n-1)) * mean(xy.distances2)))
print(cumsum(tabulate(cut(xy.distances2,
(0:10) * (n-1)/n * sigma.hat^2))) / (n*n.iter), digits=4)
print(pchisq(1:10, df=2), digits=4)
我认为您有些困惑。的确,距离不能为负,但这不会影响标准偏差的计算。尽管这意味着距离的分布可能不完全是正态的,但仍可能是接近的。但是即使它与正常值相差很远,仍然存在标准偏差。
同样,没有“单面”标准偏差-您可能正在考虑假设检验(可以是单面或双面)。在标题中,您说的均值为0,但平均距离不会为0(除非球在堆栈中的高度为40球!),并且您说有限制-如果球掉入,则可能有限制一个房间,那么他们离中心的距离就不会比离最近的墙的距离远。但是,除非某些球弹到墙壁上,否则不会影响任何事情。
因此,一旦有了40个距离,就可以使用标准方法计算标准差(以及均值,中位数,四分位数范围等)。您还可以绘制距离图(例如,分位数正态图,箱形图),以查看其是否大致呈正态分布(如果感兴趣)。
自问这个问题以来已经有一段时间了,但问题的答案是这就是名为Rayleigh分布的2D分布。在此假设瑞利形状因子等于X和Y坐标的标准偏差。实际上,将从X和Y的标准偏差的合并平均值中计算出形状因子的值。
从...开始
使用双变量正态分布。
转换为点
还假设
然后将二维分布表示为围绕点的半径
当然,这是用于连续分发。对于仅40个球的样本,没有确切的解决方案。您需要使用40个球的样本进行蒙特卡洛分析。泰勒(Taylor,MS)和格鲁布斯(Grubbs),弗兰克·E(Frank E.)(1975)。“极端点差的近似概率分布”找到了Chi分布的估计值,其对数正态分布将适合样本的分布。
编辑-尽管有Wuber的怀疑,但他计算出的理论比例是:
0.3935 0.6321 0.7769 0.8647 0.9179 0.9502 0.9698 0.9817 0.9889 0.9933
从CDF函数中,r的累积Sigma值(以sigma为单位)等于:
0-1、0-2、0-3,...,0-10
是:
0.3935、0.6321、0.7769、0.8647、0.9179、0.9502、0.9698、0.9817、0.9889、0.9933