Statistics
统计标准库模块包含基本的统计功能。
Statistics.std
— Functionstd(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
条目并计算非缺失值的标准差。
Statistics.stdm
— Functionstdm(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
条目并计算非缺失值的标准差。
Statistics.var
— Functionvar(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
条目并计算非缺失值的方差。
Statistics.varm
— Functionvarm(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
条目并计算非缺失值的方差。
Statistics.cor
— Functioncor(x::AbstractVector)
返回数字一。
cor(X::AbstractMatrix; dims::Int=1)
计算矩阵 X
在维度 dims
上的皮尔逊相关矩阵。
cor(x::AbstractVector, y::AbstractVector)
计算向量 x
和 y
之间的皮尔逊相关性。
cor(X::AbstractVecOrMat, Y::AbstractVecOrMat; dims=1)
计算向量或矩阵 X
和 Y
在维度 dims
上的皮尔逊相关系数。
Statistics.cov
— Functioncov(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!
— Functionmean!(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
— Functionmean(itr)
计算集合中所有元素的平均值。
如果 itr
包含 NaN
或 missing
值,结果也将是 NaN
或 missing
(如果数组同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 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!
— Functionmedian!(v)
类似于 median
,但可能会覆盖输入向量。
Statistics.median
— Functionmedian(itr)
计算集合中所有元素的中位数。对于偶数个元素,不存在确切的中位数元素,因此结果相当于计算两个中位数元素的平均值。
如果 itr
包含 NaN
或 missing
值,结果也将是 NaN
或 missing
(如果 itr
同时包含两者,则 missing
优先)。使用 skipmissing
函数来省略 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
— Functionmiddle(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!
— Functionquantile!([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
(MATLAB 默认) - 定义 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
— Functionquantile(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
(MATLAB 默认) - 定义 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
条目并计算非缺失值的分位数。
参考文献
- 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