统计
Statistics 标准库模块包含基本统计功能。
Statistics.std
— 函数std(itr; corrected::Bool=true, mean=nothing[, dims])
计算集合 itr
的样本标准差。
该算法在假设 itr
的每个条目都是从同一个未知分布中抽取的样本(样本不相关)的情况下,返回生成分布标准差的估计值。对于数组,此计算等效于计算 sqrt(sum((itr .- mean(itr)).^2) / (length(itr) - 1))
。如果 corrected
为 true
,则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n
是 itr
中的元素数量。
如果 itr
是一个 AbstractArray
,则可以提供 dims
来计算跨维度的标准差。
可以提供一个预先计算的 mean
。当指定 dims
时,mean
必须是一个与 mean(itr, dims=dims)
形状相同的数组(允许额外的尾部单例维度)。
如果数组包含 NaN
或 missing
值,结果也是 NaN
或 missing
(如果数组同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 missing
条目并计算非 missing
值的标准差。
Statistics.stdm
— 函数stdm(itr, mean; corrected::Bool=true[, dims])
计算集合 itr
的样本标准差,已知平均值 mean
。
该算法在假设 itr
的每个条目都是从同一个未知分布中抽取的样本(样本不相关)的情况下,返回生成分布标准差的估计值。对于数组,此计算等效于计算 sqrt(sum((itr .- mean(itr)).^2) / (length(itr) - 1))
。如果 corrected
为 true
,则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n
是 itr
中的元素数量。
如果 itr
是一个 AbstractArray
,则可以提供 dims
来计算跨维度的标准差。在这种情况下,mean
必须是一个与 mean(itr, dims=dims)
形状相同的数组(允许额外的尾部单例维度)。
如果数组包含 NaN
或 missing
值,结果也是 NaN
或 missing
(如果数组同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 missing
条目并计算非 missing
值的标准差。
Statistics.var
— 函数var(itr; corrected::Bool=true, mean=nothing[, dims])
计算集合 itr
的样本方差。
该算法在假设 itr
的每个条目都是从同一个未知分布中抽取的样本(样本不相关)的情况下,返回生成分布方差的估计值。对于数组,此计算等效于计算 sum((itr .- mean(itr)).^2) / (length(itr) - 1)
。如果 corrected
为 true
,则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n
是 itr
中的元素数量。
如果 itr
是一个 AbstractArray
,则可以提供 dims
来计算跨维度的方差。
可以提供一个预先计算的 mean
。当指定 dims
时,mean
必须是一个与 mean(itr, dims=dims)
形状相同的数组(允许额外的尾部单例维度)。
如果数组包含 NaN
或 missing
值,结果也是 NaN
或 missing
(如果数组同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 missing
条目并计算非 missing
值的方差。
Statistics.varm
— 函数varm(itr, mean; dims, corrected::Bool=true)
计算集合 itr
的样本方差,已知平均值 mean
。
该算法在假设 itr
的每个条目都是从同一个未知分布中抽取的样本(样本不相关)的情况下,返回生成分布方差的估计值。对于数组,此计算等效于计算 sum((itr .- mean(itr)).^2) / (length(itr) - 1)
。如果 corrected
为 true
,则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n
是 itr
中的元素数量。
如果 itr
是一个 AbstractArray
,则可以提供 dims
来计算跨维度的方差。在这种情况下,mean
必须是一个与 mean(itr, dims=dims)
形状相同的数组(允许额外的尾部单例维度)。
如果数组包含 NaN
或 missing
值,结果也是 NaN
或 missing
(如果数组同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 missing
条目并计算非 missing
值的方差。
Statistics.cor
— 函数cor(x::AbstractVector)
返回数字一。
cor(X::AbstractMatrix; dims::Int=1)
计算矩阵 X
沿维度 dims
的 Pearson 相关矩阵。
cor(x::AbstractVector, y::AbstractVector)
计算向量 x
和 y
之间的 Pearson 相关系数。
cor(X::AbstractVecOrMat, Y::AbstractVecOrMat; dims=1)
计算向量或矩阵 X
和 Y
沿维度 dims
的 Pearson 相关系数。
Statistics.cov
— 函数cov(x::AbstractVector; corrected::Bool=true)
计算向量 x
的方差。如果 corrected
为 true
(默认值),则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n = length(x)
。
cov(X::AbstractMatrix; dims::Int=1, corrected::Bool=true)
计算矩阵 X
沿维度 dims
的协方差矩阵。如果 corrected
为 true
(默认值),则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n = size(X, dims)
。
cov(x::AbstractVector, y::AbstractVector; corrected::Bool=true)
计算向量 x
和 y
之间的协方差。如果 corrected
为 true
(默认值),则计算 $\frac{1}{n-1}\sum_{i=1}^n (x_i-\bar x) (y_i-\bar y)^*$,其中 $*$ 表示复共轭,n = length(x) = length(y)
。如果 corrected
为 false
,则计算 $\frac{1}{n}\sum_{i=1}^n (x_i-\bar x) (y_i-\bar y)^*$.
cov(X::AbstractVecOrMat, Y::AbstractVecOrMat; dims::Int=1, corrected::Bool=true)
计算向量或矩阵 X
和 Y
沿维度 dims
的协方差。如果 corrected
为 true
(默认值),则将总和按 n-1
缩放,而如果 corrected
为 false
,则将总和按 n
缩放,其中 n = size(X, dims) = size(Y, dims)
。
Statistics.mean!
— 函数mean!(r, v)
计算 v
在 r
的单例维度上的平均值,并将结果写入 r
。
示例
julia> using Statistics
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
Statistics.mean
— 函数mean(itr)
计算集合中所有元素的平均值。
如果 itr
包含 NaN
或 missing
值,结果也是 NaN
或 missing
(如果数组同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 missing
条目并计算非 missing
值的平均值。
示例
julia> using Statistics
julia> mean(1:20)
10.5
julia> mean([1, missing, 3])
missing
julia> mean(skipmissing([1, missing, 3]))
2.0
mean(f, itr)
将函数 f
应用于集合 itr
的每个元素,并取平均值。
julia> using Statistics
julia> mean(√, [1, 2, 3])
1.3820881233139908
julia> mean([√1, √2, √3])
1.3820881233139908
mean(f, A::AbstractArray; dims)
将函数 f
应用于数组 A
的每个元素,并跨维度 dims
取平均值。
此方法需要至少 Julia 1.3。
julia> using Statistics
julia> mean(√, [1, 2, 3])
1.3820881233139908
julia> mean([√1, √2, √3])
1.3820881233139908
julia> mean(√, [1 2 3; 4 5 6], dims=2)
2×1 Matrix{Float64}:
1.3820881233139908
2.2285192400943226
mean(A::AbstractArray; dims)
计算数组在给定维度上的平均值。
空数组的 mean
需要至少 Julia 1.1。
示例
julia> using Statistics
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> mean(A, dims=1)
1×2 Matrix{Float64}:
2.0 3.0
julia> mean(A, dims=2)
2×1 Matrix{Float64}:
1.5
3.5
Statistics.median!
— 函数median!(v)
类似于 median
,但可能会覆盖输入向量。
Statistics.median
— 函数median(itr)
计算集合中所有元素的中位数。对于偶数个元素,不存在精确的中位数元素,因此结果等同于计算两个中位数元素的平均值。
如果 itr
包含 NaN
或 missing
值,则结果也是 NaN
或 missing
(如果 itr
包含两者,则 missing
优先)。使用 skipmissing
函数省略 missing
项并计算非 missing
值的中位数。
示例
julia> using Statistics
julia> median([1, 2, 3])
2.0
julia> median([1, 2, 3, 4])
2.5
julia> median([1, 2, missing, 4])
missing
julia> median(skipmissing([1, 2, missing, 4]))
2.0
median(A::AbstractArray; dims)
沿给定维度计算数组的中位数。
示例
julia> using Statistics
julia> median([1 2; 3 4], dims=1)
1×2 Matrix{Float64}:
2.0 3.0
Statistics.middle
— 函数middle(x)
计算标量值的中点,这等同于 x
本身,但为了保持一致性,其类型与 middle(x, x)
相同。
middle(x, y)
计算两个数字 x
和 y
的中点,其值和类型等同于计算它们的平均值 ((x + y) / 2
)。
middle(a::AbstractArray)
计算数组 a
的中点,这包括找到其极值然后计算它们的平均值。
julia> using Statistics
julia> middle(1:10)
5.5
julia> a = [1,2,3.6,10.9]
4-element Vector{Float64}:
1.0
2.0
3.6
10.9
julia> middle(a)
5.95
Statistics.quantile!
— 函数quantile!([q::AbstractArray, ] v::AbstractVector, p; sorted=false, alpha::Real=1.0, beta::Real=alpha)
计算向量 v
在指定概率或概率向量或元组 p
(在区间 [0,1] 上)处的分位数。如果 p
是一个向量,则还可以指定一个可选的输出数组 q
。(如果未提供,则将创建一个新的输出数组。)关键字参数 sorted
指示是否可以假设 v
已排序;如果为 false
(默认值),则 v
的元素将在原地部分排序。
样本分位数由 Q(p) = (1-γ)*x[j] + γ*x[j+1]
定义,其中 x[j]
是 v
的第 j 个顺序统计量,j = floor(n*p + m)
,m = alpha + p*(1 - alpha - beta)
且 γ = n*p + m - j
。
默认情况下 (alpha = beta = 1
),分位数通过点 ((k-1)/(n-1), x[k])
之间的线性插值计算,其中 k = 1:n
,其中 n = length(v)
。这对应于 Hyndman 和 Fan (1996) 的定义 7,与 R 和 NumPy 默认值相同。
关键字参数 alpha
和 beta
对应于 Hyndman 和 Fan 中的相同参数,将它们设置为不同的值允许使用本文中定义的任何方法 4-9 计算分位数。
- 定义 4:
alpha=0
,beta=1
- 定义 5:
alpha=0.5
,beta=0.5
- 定义 6:
alpha=0
,beta=0
(ExcelPERCENTILE.EXC
,Python 默认值,Stataaltdef
) - 定义 7:
alpha=1
,beta=1
(Julia,R 和 NumPy 默认值,ExcelPERCENTILE
和PERCENTILE.INC
,Python'inclusive'
) - 定义 8:
alpha=1/3
,beta=1/3
- 定义 9:
alpha=3/8
,beta=3/8
如果 v
包含 NaN
或 missing
值,则会抛出 ArgumentError
。
参考文献
Hyndman,R.J 和 Fan,Y. (1996) "统计软件包中的样本分位数",美国统计学家,第 50 卷,第 4 期,第 361-365 页
维基百科上的分位数 详细介绍了不同的分位数定义
示例
julia> using Statistics
julia> x = [3, 2, 1];
julia> quantile!(x, 0.5)
2.0
julia> x
3-element Vector{Int64}:
1
2
3
julia> y = zeros(3);
julia> quantile!(y, x, [0.1, 0.5, 0.9]) === y
true
julia> y
3-element Vector{Float64}:
1.2000000000000002
2.0
2.8000000000000003
Statistics.quantile
— 函数quantile(itr, p; sorted=false, alpha::Real=1.0, beta::Real=alpha)
计算集合 itr
在指定概率或概率向量或元组 p
(在区间 [0,1] 上)处的分位数。关键字参数 sorted
指示是否可以假设 itr
已排序。
样本分位数由 Q(p) = (1-γ)*x[j] + γ*x[j+1]
定义,其中 x[j]
是 itr
的第 j 个顺序统计量,j = floor(n*p + m)
,m = alpha + p*(1 - alpha - beta)
且 γ = n*p + m - j
。
默认情况下 (alpha = beta = 1
),分位数通过点 ((k-1)/(n-1), x[k])
之间的线性插值计算,其中 k = 1:n
,其中 n = length(itr)
。这对应于 Hyndman 和 Fan (1996) 的定义 7,与 R 和 NumPy 默认值相同。
关键字参数 alpha
和 beta
对应于 Hyndman 和 Fan 中的相同参数,将它们设置为不同的值允许使用本文中定义的任何方法 4-9 计算分位数。
- 定义 4:
alpha=0
,beta=1
- 定义 5:
alpha=0.5
,beta=0.5
- 定义 6:
alpha=0
,beta=0
(ExcelPERCENTILE.EXC
,Python 默认值,Stataaltdef
) - 定义 7:
alpha=1
,beta=1
(Julia,R 和 NumPy 默认值,ExcelPERCENTILE
和PERCENTILE.INC
,Python'inclusive'
) - 定义 8:
alpha=1/3
,beta=1/3
- 定义 9:
alpha=3/8
,beta=3/8
如果 v
包含 NaN
或 missing
值,则会抛出 ArgumentError
。使用 skipmissing
函数省略 missing
项并计算非 missing
值的分位数。
参考文献
Hyndman,R.J 和 Fan,Y. (1996) "统计软件包中的样本分位数",美国统计学家,第 50 卷,第 4 期,第 361-365 页
维基百科上的分位数 详细介绍了不同的分位数定义
示例
julia> using Statistics
julia> quantile(0:20, 0.5)
10.0
julia> quantile(0:20, [0.1, 0.5, 0.9])
3-element Vector{Float64}:
2.0
10.0
18.000000000000004
julia> quantile(skipmissing([1, 10, missing]), 0.5)
5.5