奇异高斯分布是低维空间中非奇异分布的前推。在几何上,您可以采用标准正态分布,对其重新缩放、旋转并将其等距嵌入到更高维空间的仿射子空间中。在代数上,这是通过奇异值分解 (SVD) 或其等价物来完成的。
让Σ是协方差矩阵和μ中的平均值Rn. 因为Σ是非负定和对称的,SVD 将采用形式
Σ=UΛ2U′
对于正交矩阵U∈O(n)和一个对角矩阵Λ. Λ会有m非零条目,0≤m≤n.
让X有一个标准的正态分布Rm: 也就是说,它的每一个mcomponents 是具有零均值和单位方差的标准正态分布。稍微滥用符号,扩展组件X和n−m零使其成为n-向量。然后UΛX在Rn我们可以计算
Cov(UΛX)=UΛCov(X)Λ′U′=UΛ2U′=Σ.
最后
Y=μ+UΛX
具有预期的高斯分布Rn.
有趣的是,当n=m:也就是说,这是一种(标准)方法,可以为任何给定的平均值生成任何维度的多元法线向量μ和协方差Σ通过使用标准正态值的单变量生成器。
例如,这里是一千个模拟点的两个视图n=3和m=2:
第二种观点,从侧面看,展示了分布的奇异性。产生这些数字的R
代码遵循前面的数学说明。
#
# Specify a Normal distribution.
#
mu <- c(5, 5, 5)
Sigma <- matrix(c(1, 2, 1,
2, 3, 1,
1, 1, 0), 3)
#
# Analyze the covariance.
#
n <- dim(Sigma)[1]
s <- svd((Sigma + t(Sigma))/2) # Guarantee symmetry
s$d <- abs(zapsmall(s$d))
m <- sum(s$d > 0)
#$
# Generate a standard Normal `x` in R^m.
#
n.sample <- 1e3 # Number of points to generate
x <- matrix(rnorm(m*n.sample), nrow=m)
#
# Embed `x` in R^n and apply the square root of Sigma obtained from its SVD.
#
x <- rbind(x, matrix(0, nrow=n-m, ncol=n.sample))
y <- s$u %*% diag(sqrt(s$d)) %*% x + mu
#
# Plot the results (presuming n==3).
#
library(rgl)
plot3d(t(y), type="s", size=1, aspect=TRUE,
xlab="Y1", ylab="Y2", zlab="Y3", box=FALSE,
col="Orange")