迭代器的元素方差

Chr*_*kas 5 statistics julia

什么是数值稳定的方法来获取迭代器元素的方差?举个例子,我想做点什么

var((rand(4,2) for i in 1:10))
Run Code Online (Sandbox Code Playgroud)

并找回一个(4,2)矩阵,该矩阵是每个系数的方差.这使用Julia的Base引发错误var.有没有可以处理这个的包?或者使用Base Julia功能轻松(并且存储效率)这样做?或者需要自己开发吗?

Chr*_*kas 6

我继续并实施了一个Welford算法来计算:

# Welford algorithm
# https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
function componentwise_meanvar(A;bessel=true)
  x0 = first(A)
  n = 0
  mean = zero(x0)
  M2 = zero(x0)
  delta = zero(x0)
  delta2 = zero(x0)
  for x in A
    n += 1
    delta .= x .- mean
    mean .+= delta./n
    delta2 .= x .- mean
    M2 .+= delta.*delta2
  end
  if n < 2
    return NaN
  else
    if bessel
      M2 .= M2 ./ (n .- 1)
    else
      M2 .= M2 ./ n
    end
    return mean,M2
  end
end
Run Code Online (Sandbox Code Playgroud)

其他一些算法也在DiffEqMonteCarlo.jl中实现.我很惊讶我找不到这个库,但也许有一天会重构它.