Normal-Distribution
從奇異高斯分佈生成樣本
讓隨機向量遵循具有均值的多元正態分佈和協方差矩陣. 如果是對稱且正定的(這是通常的情況),那麼可以從通過第一次獨立採樣從標準正常,然後使用公式, 在哪裡是 Cholesky 下因子,因此和.
如果一個人想要來自奇異高斯的樣本怎麼辦,即仍然是對稱的,但不是更正定(只有半正定)。我們還可以假設方差(的對角元素) 是嚴格積極的。然後是一些元素必須具有線性關係,並且分佈實際上位於具有維度的低維空間, 對?
很明顯,如果例如然後可以生成並設置因為它們是完全相關的。但是,有沒有什麼好的方法可以為一般情況生成樣本? 我想首先需要能夠識別低維子空間,然後移動到具有有效協方差矩陣的空間,然後從中採樣,最後從這個低維樣本中推斷出線性因變量的值。但是在實踐中最好的方法是什麼?有人可以指點我有關該主題的書籍或文章嗎?我找不到一個。
奇異高斯分佈是低維空間中非奇異分佈的前推。在幾何上,您可以採用標準正態分佈,對其重新縮放、旋轉並將其等距嵌入到更高維空間的仿射子空間中。在代數上,這是通過奇異值分解 (SVD) 或其等價物來完成的。
讓是協方差矩陣和中的平均值. 因為是非負定和對稱的,SVD 將採用形式
對於正交矩陣和一個對角矩陣. 會有非零條目,.
讓有一個標準的正態分佈: 也就是說,它的每一個components 是具有零均值和單位方差的標準正態分佈。稍微濫用符號,擴展組件和零使其成為-向量。然後在我們可以計算
最後
具有預期的高斯分佈.
有趣的是,當:也就是說,這是一種(標準)方法,可以為任何給定的平均值生成任何維度的多元法線向量和協方差通過使用標準正態值的單變量生成器。
例如,這裡是一千個模擬點的兩個視圖和:
第二種觀點,從側面看,展示了分佈的奇異性。產生這些數字的
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")