Julia数据科学系列-Statistics-julia统计标准库

Statistics.jl

原文档戳我

Statistics是Julia的标准库, 里边包含了一些非常基本的统计方法:

  • std, stdm

  • var, varm

  • cor, cov

  • mean, mean!

  • median, median!

  • middle

  • quantile, quantile!

stdstdm

std

计算标准差:

std(itr; corrected::Bool=true, mean=nothing[, dims])
  • 对于array, 等同于sqrt(sum((itr .- mean(itr)).^2) / (length(itr) - 1));

  • corrected=true: 用n-1进行归一化, 否则用n;

Warn 如果输入array中包含NaN或者missing, 结果也会是NaN/missing, 要先对array进行skipmissing操作再计算。

stdm

根据已知的mean计算std:

stdm(itr, mean; corrected::Bool=true)

varvarm

计算方差, 与std和stdm的参数类似, 略过

corcov

cor

计算皮尔森相关系数

cor(x::AbstractVector) # 自己跟自己算相关, 返回1.0
cor(X::AbstractMatrix; dims::Int=1) # 在指定维度上算相关系数矩阵
cor(x::AbstractVector, y::AbstractVector) # 最常用: 计算两个向量的相关系数
cor(X::AbstractVecOrMat, Y::AbstractVecOrMat) # 计算矩阵之间指定维度的相关系数

cov

计算协方差

cov(x::AbstractVector; corrected::Bool=true) #计算x的方差, 等于var()?
cov(X::AbstractMatrix; dims::Int=1, corrected::Bool=true) # 计算矩阵X在指定维度上的协方差矩阵
cov(x::AbstractVector, y::AbstractVector; corrected::Bool=true) # 最常用: 计算两组向量的协方差
cov(X::AbstractVecOrMat, Y::AbstractVecOrMat; dims::Int=1, corrected::Bool=true)

meanmean!

mean!(r, v)
# 计算v在r维度上的平均值, 并返回结果到r中:
# r 必须是跟v的相应维度等大小的ones矩阵
julia> v = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> mean!([1., 1.], v)
2-element Vector{Float64}:
 1.5
 3.5

julia> mean!([1. 1.], v)
1×2 Matrix{Float64}:
 2.0  3.0

mean(itr) # 返回向量均值, 同样不支持missing
mean(f:Function, itr) # 先用f处理itr中的每个元素, 再求均值
mean(√, [1, 2, 3]) == mean([√1, √2, √3]) # true

mean(f::Function, A::AbstractArray; dims) # 应用f, 指定dim
julia> mean(√, [1 2 3; 4 5 6], dims=2)
2×1 Matrix{Float64}:
 1.3820881233139908
 2.2285192400943226

julia> mean(√, [1 2 3; 4 5 6], dims=1)
1×3 Matrix{Float64}:
 1.5  1.82514  2.09077

mean(A::AbstractArray; dims) # 指定dim

medianmedian!

median(itr) 算中位数 median(A::AbstractArray; dims)

median!(v) 用中位数结果替换原向量。

Warn

  • 只支持向量类型, 迭代器会报错;

  • 会把向量类型转换成数值类型;

  • 所以这个函数有啥用啊? 不太安全啊感觉

middle

算中间值(最小和最大值的平均):

middle(x) # 单个标量的中间值是其本身
middle(x, y) # 两个实数的中间值是其平均值
middle(range) # 直接用左右极值算平均数
middle(array) # 先求极值, 再算平均

quantile!quantile

quantile!

quantile!([q::AbstractArray, ] v::AbstractVector, p; sorted=false, alpha::Real=1.0, beta::Real=alpha)

计算vp比例的值:

  • 如果p是一个向量, 可以显式声明一个变量q用来存储结果, 如果不声明, 则创建新的结果向量;

  • sort: v是否是sort过的;

  • 默认情况下, alpha = beta =1, 线性地取比例值, 与R和NumPy的行为一致, 参考:Hyndman and Fan, 1996;

:x HyndmanFan1996

Hyndman, R.J and Fan, Y. (1996) "Sample Quantiles in Statistical Packages", The American Statistician, Vol. 50, No. 4, pp. 361-365

quantile!

同上, 只是支持各种迭代类型, 而不是只支持向量

quantile(itr, p; sorted=false, alpha::Real=1.0, beta::Real=alpha)