我不确定这是应该用SO还是其他的.SE,所以如果这被认为是离题的话,我会删除。
我有一个向量,我试图计算方差“手工”(意思是基于方差的定义,但仍然执行计算R)使用公式:V[X] = E[X^2] - E[X]^2
其中E[X] = sum (x * f(x))
和E[X^2] = sum (x^2 * f(x))
然而,我计算的方差与R的var()
函数不同(我用它来检查我的工作)。为什么var()
函数不同?它是如何计算方差的?我已经检查了我的计算几次,所以我对我计算的值相当有信心。我的代码如下所示。
vec <- c(3, 5, 4, 3, 6, 7, 3, 6, 4, 6, 3, 4, 1, 3, 4, 4)
range(vec)
counts <- hist(vec + .01, breaks = 7)$counts
fx <- counts / (sum(counts)) #the pmf f(x)
x <- c(min(vec): max(vec)) #the values of x
exp <- sum(x * fx) ; exp #expected value of x
exp.square <- sum(x^2 * fx) #expected value of x^2
var <- exp.square - (exp)^2 ; var #calculated variance
var(vec)
这样计算出的方差为2.234,但是var()
函数说方差为2.383。
5条答案
按热度按时间t8e9dugd1#
V[X] = E[X^2] - E[X]^2是 * 总体方差 (当向量中的值是整个总体而不仅仅是样本时),
var
函数计算总体方差( 样本方差 *)的 * 估计量 *。uurv41yg2#
虽然这个问题已经得到了回答,但我担心有些人仍然会在“总体方差”和“估计值”之间混淆,这可能是由于这个例子。
如果向量
vec
表示整个总体,则vec
只是表示分布函数的一种方法,可以更简洁地将其总结为pmf,而pmf是从vec
导出的。关键是,vec
的元素在这种情况下不是随机变量。在这种情况下,从pmf计算E[X]和var[X]是正确的。然而,大多数情况下,当你有数据时(例如以向量的形式),它是来自基础总体的随机样本,向量的每个元素都是随机变量的观测值:这是从总体中“抽取”。在本例中,可以假设每个元素都是从同一个分布(“iid”)中独立抽取的。实际上,这种随机抽样意味着您无法计算真实的pmf,因为您可能会有一些仅由偶然性引起的变化。同样,您无法获得E[X]、E[X^2]以及Var[X]的真实值。这些值需要进行估计。* 样本平均值 * 通常是E[X]的良好估计值(尤其是无偏估计值),但结果是 * 样本方差 * 是总体方差的有偏估计值。要更正此偏差,需要将其乘以因子n/(n-1)。
因为后一种情况在实践中最常见(除了教科书上的练习),它是当你在R中调用
var()
函数时计算出来的。所以如果你被要求找出“估计方差”,它很可能暗示你的向量vec
是随机样本,你属于后一种情况。如果这是最初的问题,那么你就有了答案,我希望你能清楚地认识到,变量名的选择和代码中的注解会导致混乱:事实上,你无法从随机抽样中计算出总体的pmf、期望值或方差:你能得到的是他们的估计值,其中一个--方差--是有偏差的。我想澄清这一点,因为这种混淆(如代码中所示)在初次熟悉这些概念时非常常见,尤其是公认的答案可能会产生误导:V[X] = E[X^2] - E[X]^2不是样本方差;它实际上是“总体方差”,而“总体方差”无法从随机样本中获得。如果用样本估计值(作为平均值)替换此方程中的值,则会得到sample.V[X] = average[X^2] - average[X]^2,它是“样本方差”,并且是有偏的。
有人可能会说我对语义很挑剔;不过,公认答案中的“滥用符号”,只有在大家都认同的情况下,才是可以接受的。不过,对于那些试图找出这些概念上的差异的人来说,我相信最好是保持准确。
yyyllmsg3#
下面是一种计算“估计总体方差”的方法,该方法与stats包中
var
函数的输出相匹配:我想知道人们是怎么看待“估计器”这个词的。
在函数中(不太可能像stats包中的
var
函数那样处理错误和异常):ne5o7dgx4#
R基
var()
取分母N-1,以获得更可靠(* 更少偏差 *)的方差估计量,不幸的是,没有选项可以告诉var()
取N,所以我编写了自己的方差函数来处理这种情况。并给出了一些代码来说明上述函数、基本函数、手动方式和@dca的
estimated.variance.by.hand()
函数:cig3rfwq5#
Var()函数计算样本方差。如果你想要总体方差,你应该把它乘以((n-1)/n)。
假设x1是数组:
计算长度
n〈-长度(x1)
计算弹出方差
变量(x1)*((n-1)/n)