ฉันไม่ได้ตระหนักถึงวิธีสากลในการสร้างตัวแปรสุ่มที่มีความสัมพันธ์กับการแจกแจงที่กำหนดใด ๆ ดังนั้นฉันจะเสนอวิธีการเฉพาะกิจเพื่อสร้างคู่ของตัวแปรสุ่มแบบกระจายที่มีความสัมพันธ์ (Pearson) ที่กำหนด โดยไม่สูญเสียความสามารถทั่วไปฉันคิดว่าการกระจายส่วนต่างที่ต้องการคือชุดมาตรฐาน (เช่นการสนับสนุนคือ )[ 0 , 1 ]
วิธีการเสนออาศัยดังต่อไปนี้:
a) สำหรับตัวแปรสุ่มเครื่องแบบมาตรฐานและU 2ที่มีฟังก์ชั่นการจัดจำหน่ายนั้นF 1และF 2เรามีF ฉัน ( U ฉัน ) = U ฉันสำหรับฉัน= 1 , 2 ดังนั้นตามคำจำกัดความของสเปียร์แมน rhoคือ
ρ S ( U 1 , U 2 ) = c o r r ( Fยู1ยู2F1F2Fผม( ยูผม) = Uผมi = 1 , 2
ดังนั้นค่าสัมประสิทธิ์สหสัมพันธ์ของสเปียร์แมนและค่าสัมประสิทธิ์สหสัมพันธ์ของเพียร์สันมีค่าเท่ากัน (เวอร์ชั่นตัวอย่างอาจแตกต่างกัน)
ρS( ยู1, U2) = c o r r ( F1( ยู1) , F2( ยู2) ) = c o r r ( U1, U2) .
b) ถ้าเป็นตัวแปรสุ่มที่มีระยะขอบอย่างต่อเนื่องและGaussian copula ที่มีสัมประสิทธิ์สหสัมพันธ์ (Pearson) ρดังนั้น Rho ของ Spearman คือ
ρ S ( X 1 , X 2 ) = 6X1, X2ρ
สิ่งนี้ทำให้ง่ายต่อการสร้างตัวแปรสุ่มที่มีค่า Rho ของ Spearman ที่ต้องการ
ρS(X1,X2)=6πarcsin(ρ2).
วิธีการคือการสร้างข้อมูลจากการเชื่อมเกาส์ที่มีค่าสัมประสิทธิ์สหสัมพันธ์ที่เหมาะสมดังกล่าวที่สเปียร์แมนสอดคล้องโรเพื่อความสัมพันธ์ที่ต้องการสำหรับตัวแปรสุ่มเครื่องแบบρ
การจำลองขั้นตอนวิธี
Let หมายถึงระดับที่ต้องการความสัมพันธ์และnจำนวนคู่ที่จะสร้าง อัลกอริทึมคือ:rn
- Compute )ρ=2sin(rπ/6)
- สร้างคู่ของตัวแปรสุ่มจากเกาส์เกา (เช่นด้วยวิธีนี้ )
- ทำซ้ำขั้นตอนที่ 2 ครั้งn
ตัวอย่าง
โค้ดต่อไปนี้เป็นตัวอย่างของการใช้อัลกอริทึมนี้โดยใช้ R โดยมีความสัมพันธ์เป้าหมายและn = 500คู่r=0.6n=500
## Initialization and parameters
set.seed(123)
r <- 0.6 # Target (Spearman) correlation
n <- 500 # Number of samples
## Functions
gen.gauss.cop <- function(r, n){
rho <- 2 * sin(r * pi/6) # Pearson correlation
P <- toeplitz(c(1, rho)) # Correlation matrix
d <- nrow(P) # Dimension
## Generate sample
U <- pnorm(matrix(rnorm(n*d), ncol = d) %*% chol(P))
return(U)
}
## Data generation and visualization
U <- gen.gauss.cop(r = r, n = n)
pairs(U, diag.panel = function(x){
h <- hist(x, plot = FALSE)
rect(head(h$breaks, -1), 0, tail(h$breaks, -1), h$counts/max(h$counts))})
ในภาพด้านล่างพล็อตแนวทแยงแสดงฮิสโทแกรมของตัวแปรและU1และแผนการปิดเส้นทแยงมุมแสดงแผนการกระจาย U 1และ U 2
U2U1U2
โดย constuction ตัวแปรสุ่มมีอัตรากำไรที่สม่ำเสมอและค่าสัมประสิทธิ์สหสัมพันธ์ (ใกล้) Rแต่เนื่องจากผลกระทบของการสุ่มตัวอย่างที่ค่าสัมประสิทธิ์สหสัมพันธ์ของข้อมูลจำลองไม่ว่าเท่ากับRrr
cor(U)[1, 2]
# [1] 0.5337697
โปรดทราบว่าgen.gauss.cop
ฟังก์ชั่นควรทำงานกับตัวแปรมากกว่าสองตัวแปรเพียงแค่ระบุเมทริกซ์สหสัมพันธ์ที่ใหญ่ขึ้น
การศึกษา
แบบจำลองการศึกษาแบบจำลองต่อไปนี้ซ้ำสำหรับความสัมพันธ์เป้าหมายr=−0.5,0.1,0.6แสดงให้เห็นว่าการกระจายของสัมประสิทธิ์สหสัมพันธ์แปรเปลี่ยนเป็นความสัมพันธ์ที่ต้องการเมื่อขนาดตัวอย่างเพิ่มขึ้นn
## Simulation
set.seed(921)
r <- 0.6 # Target correlation
n <- c(10, 50, 100, 500, 1000, 5000); names(n) <- n # Number of samples
S <- 1000 # Number of simulations
res <- sapply(n,
function(n, r, S){
replicate(S, cor(gen.gauss.cop(r, n))[1, 2])
},
r = r, S = S)
boxplot(res, xlab = "Sample size", ylab = "Correlation")
abline(h = r, col = "red")