样本方差
sample variance
function(x) var(sum(((x - mean(x))^2)/(n - 1)))
这是我的功能,但似乎不起作用。
我们可以在函数中使用 var 吗?
如果我没记错的话,这比你想象的要难得多;您不能按照您尝试的方式直接计算它。 (提示:当你取 sum()
时,你得到长度为 1 的单个 value/vector,因此该向量的样本方差为 NA
。)This post on Mathematics Stack Exchange derives the variance of the sample variance as mu_4/n - sigma^4*(n-3)/(n*(n-1))
, where mu_4
is the fourth central moment; you could also see this post on CrossValidated or this Wikipedia page(不同的推导呈现根据第四中心矩、峰度或超峰度...) 所以:
set.seed(101)
r <- rnorm(100)
mu_4 <- mean((r-mean(r))^4)
sigma_4 <- var(r)^2
n <- length(r)
mu_4/n - sigma_4*(n-3)/(n*(n-1)) ## 0.01122
注意:
var(replicate(100000,var(rnorm(100))))
给出大约 0.0202。至少它不是错误的数量级,但它与上面的例子相差 2 倍。我的猜测只是估计本身是高度可变的(这并不奇怪,因为它取决于第四时刻......)(我尝试了几次上面的估计方法,它确实看起来确实高度可变......)
function(x) var(sum(((x - mean(x))^2)/(n - 1)))
这是我的功能,但似乎不起作用。 我们可以在函数中使用 var 吗?
如果我没记错的话,这比你想象的要难得多;您不能按照您尝试的方式直接计算它。 (提示:当你取 sum()
时,你得到长度为 1 的单个 value/vector,因此该向量的样本方差为 NA
。)This post on Mathematics Stack Exchange derives the variance of the sample variance as mu_4/n - sigma^4*(n-3)/(n*(n-1))
, where mu_4
is the fourth central moment; you could also see this post on CrossValidated or this Wikipedia page(不同的推导呈现根据第四中心矩、峰度或超峰度...) 所以:
set.seed(101)
r <- rnorm(100)
mu_4 <- mean((r-mean(r))^4)
sigma_4 <- var(r)^2
n <- length(r)
mu_4/n - sigma_4*(n-3)/(n*(n-1)) ## 0.01122
注意:
var(replicate(100000,var(rnorm(100))))
给出大约 0.0202。至少它不是错误的数量级,但它与上面的例子相差 2 倍。我的猜测只是估计本身是高度可变的(这并不奇怪,因为它取决于第四时刻......)(我尝试了几次上面的估计方法,它确实看起来确实高度可变......)