สมมติว่าฉันมีการแจกแจงมาร์จิ้นที่ไม่แปรผันสองค่ากล่าวว่าและซึ่งฉันสามารถจำลองได้ ตอนนี้สร้างร่วมกันจำหน่ายของตนโดยใช้เชื่อม Gaussianชี้แนะ ) ทราบพารามิเตอร์ทั้งหมด
มีวิธีการที่ไม่ใช่ MCMC สำหรับการจำลองจาก copula นี้หรือไม่?
สมมติว่าฉันมีการแจกแจงมาร์จิ้นที่ไม่แปรผันสองค่ากล่าวว่าและซึ่งฉันสามารถจำลองได้ ตอนนี้สร้างร่วมกันจำหน่ายของตนโดยใช้เชื่อม Gaussianชี้แนะ ) ทราบพารามิเตอร์ทั้งหมด
มีวิธีการที่ไม่ใช่ MCMC สำหรับการจำลองจาก copula นี้หรือไม่?
คำตอบ:
มีวิธีง่าย ๆ ในการจำลองจากแบบเกาส์เกาส์ซึ่งมีพื้นฐานมาจากคำจำกัดความของการแจกแจงแบบหลายตัวแปรแบบธรรมดาและแบบเกาส์
ฉันจะเริ่มต้นด้วยการให้คำจำกัดความที่จำเป็นและคุณสมบัติของการแจกแจงแบบหลายตัวแปรปกติตามด้วย copula Gaussian จากนั้นฉันจะให้อัลกอริทึมในการจำลองจาก Copula Gauss
การแจกแจงปกติหลายตัวแปร
เวกเตอร์สุ่มมีการแจกแจงปกติหลายตัวแปรถ้า
X d = μ + A Z โดย
ที่Zเป็นเวกเตอร์มิติk ของมิติอิสระอิสระของตัวแปรสุ่มมาตรฐานμคือd-มิติเวกเตอร์ของค่าคงที่และAคือเมทริกซ์d × kของค่าคงที่ สัญกรณ์d =
Gauss เชื่อมGauss เชื่อมถูกกำหนด implicitely จากการกระจายปกติหลายตัวแปรที่เป็นเชื่อมเกาส์เป็นตัวเชื่อมที่เกี่ยวข้องกับการกระจายปกติหลายตัวแปร โดยเฉพาะจากทฤษฎีบทของ Sklar สโคคูลเกาส์คือ
C P ( u 1 , … , u d ) = Φ P ( Φ - 1 ( u 1 ) , … , Φ - 1 ( u d ) ) โดย
ที่Φ
อัลกอริธึมการจำลอง
ในมุมมองข้างต้นวิธีธรรมชาติในการจำลองจากขั้วเกาส์คือการจำลองจากการแจกแจงปกติแบบหลายตัวแปรมาตรฐานด้วยเมทริกซ์สหสัมพันธ์ที่เหมาะสมและการแปลงแต่ละระยะขอบโดยใช้การแปลงความน่าจะเป็นอินทิกรัล ในขณะที่การจำลองจากการแจกแจงปกติหลายตัวแปรด้วยความแปรปรวนร่วมเมทริกซ์Σเป็นหลักลงไปทำผลรวมถ่วงน้ำหนักของตัวแปรสุ่มมาตรฐานที่เป็นอิสระมาตรฐานซึ่งเมทริกซ์ "น้ำหนัก" Aสามารถรับได้โดยการสลายตัว Choleskyของเมทริกซ์แปรปรวนร่วมΣ Σ
ดังนั้นอัลกอริทึมในการจำลองตัวอย่างจากโคอาซ์เกาส์ที่มีเมทริกซ์สหสัมพันธ์Pคือ:
รหัสต่อไปนี้ในตัวอย่างการใช้อัลกอริทึมนี้โดยใช้ R:
## Initialization and parameters
set.seed(123)
P <- matrix(c(1, 0.1, 0.8, # Correlation matrix
0.1, 1, 0.4,
0.8, 0.4, 1), nrow = 3)
d <- nrow(P) # Dimension
n <- 200 # Number of samples
## Simulation (non-vectorized version)
A <- t(chol(P))
U <- matrix(nrow = n, ncol = d)
for (i in 1:n){
Z <- rnorm(d)
X <- A%*%Z
U[i, ] <- pnorm(X)
}
## Simulation (compact vectorized version)
U <- pnorm(matrix(rnorm(n*d), ncol = d) %*% chol(P))
## Visualization
pairs(U, pch = 16,
labels = sapply(1:d, function(i){as.expression(substitute(U[k], list(k = i)))}))
แผนภูมิต่อไปนี้แสดงข้อมูลที่เป็นผลมาจากรหัส R ด้านบน