应该如何定义标量输入的样本方差?

机器算法验证 r 方差 matlab
2022-04-10 21:07:25

最近我惊恐地发现,Matlab为标量输入样本0

>> var(randn(1),0)   %the '0' here tells var to give sample variance
ans =
     0
>> var(randn(1),1)   %the '1' here tells var to give population variance
ans =
     0

不知何故,在这种情况下,样本方差没有除以R 返回一个标量的 NaN:0=n1

> var(rnorm(1,1))
[1] NA

您认为定义标量的总体样本方差的明智方法是什么?返回零而不是 NaN 可能会产生什么后果?

编辑:来自 Matlab 的帮助var

VAR normalizes Y by N-1 if N>1, where N is the sample size.  This is
an unbiased estimator of the variance of the population from which X is
drawn, as long as X consists of independent, identically distributed
samples. For N=1, Y is normalized by N. 

Y = VAR(X,1) normalizes by N and produces the second moment of the
sample about its mean.  VAR(X,0) is the same as VAR(X).

`var 状态的 m 代码中的一个神秘注释:

if w == 0 && n > 1
    % The unbiased estimator: divide by (n-1).  Can't do this
    % when n == 0 or 1.
    denom = n - 1;
else
    % The biased estimator: divide by n.
    denom = n; % n==0 => return NaNs, n==1 => return zeros
end

NaN,即使用户请求标量上的样本方差,他们也明确选择不返回。我的问题是为什么他们应该选择这样做,而不是如何。

编辑:我看到我错误地询问了应该如何定义标量的总体方差(请参阅上面的划线)。这可能引起了很多混乱。

3个回答

标量不能“具有”总体方差,尽管它们可以是具有(总体)方差的总体的单个样本。如果您想估计,那么您至少需要:样本中的多个数据点,来自同一分布的另一个样本,或通过模型获得的有关总体方差的一些先验信息。

顺便说一句,R返回了缺失(NA)而不是NaN

is.nan(var(rnorm(1,1)))
[1] FALSE

我相信这个论坛的人会有更好的答案,这是我的想法:

我认为 R 的回答是合乎逻辑的。随机变量具有总体方差,但事实证明,对于 1 个样本,您没有足够的自由度来估计样本方差,即您试图提取存在的信息。

关于Matlab的答案,我不知道如何证明0,除了它来自分子。

后果可能很奇怪。但我能想到与估计有关的任何其他事情。

我认为 Matlab 对标量使用以下逻辑(类似于我们如何定义总体方差)以避免处理 NA 和 NAN。

Var(x)=(xx¯)21=0

对于标量,上述内容如下:x¯=x.

他们的定义可能是一种编程约定,可能会使编码的某些方面更容易。