균일하게 분포되고 상관 된 난수 쌍 생성


14

특정 상관 관계로 임의의 숫자 쌍을 생성하고 싶습니다. 그러나 균일 변수의 선형 조합이 더 이상 균일하게 분포 된 변수가 아니기 때문에 두 정규 변수의 선형 조합을 사용하는 일반적인 방법은 여기서 유효하지 않습니다. 두 변수가 균일해야합니다.

주어진 상관 관계로 균일 한 변수 쌍을 생성하는 방법에 대한 아이디어가 있습니까?


6
밀접한 관련 : stats.stackexchange.com/questions/30526 . 또한 copula 태그 를 확인하려면 여기 링크를 클릭하십시오. 빠르고 더러운 기법은 및 때 가 균일하게 이고 가되도록하는 것 입니다. 상관 관계는 \ rho = 2 (\ alpha-1) ^ 3 + 1 이며, \ alpha = 1-((1- \ rho) / 2) ^ {1/3} 은 트릭을 수행합니다. 그러나 copulas는 당신에게 더 많은 통제권을 줄 것입니다 .... X[0,1]Y=XXαρ = 2 ( α - 1 ) 3 + 1 α = 1 - ( ( 1 - ρ ) / 2 ) 1 / 3Y=1+αXρ=2(α1)3+1α=1((1ρ)/2)1/3
whuber

의견을 주셔서 감사합니다,하지만 예, 나는이 방법이 정말 "더러운"것이라고 생각합니다
Onturenio

1
이 접근법을 볼 때 난수 쌍의 속성에 관한 추가 기준을 제공 할 수 있고 인식해야한다는 것을 알기를 바랍니다. 이것이 "더러운"경우 솔루션에 어떤 문제가 있습니까? 귀하의 상황에보다 적합한 답변을 제공 할 수 있도록 알려주십시오.
whuber

이 질문은 선형 회귀 관계로 RV 쌍을 생성하는 방법과 밀접한 관련이있는 질문에 대한 응답으로 우연히 답변되었습니다. 선형 회귀의 기울기는 상관 계수와 쉽게 계산되는 방식으로 관련되어 있으며 가능한 모든 기울기가 생성 될 수 있기 때문에 원하는 것을 정확하게 생성 할 수 있습니다. stats.stackexchange.com/questions/257779/…를 참조하십시오 .
whuber

1
또한 stats.stackexchange.com/questions/31771 을 참조하십시오.이 규칙 은 일반화에 임의의 3 개의 유니폼을 제공합니다.
whuber

답변:


16

주어진 한계 분포와 상관 랜덤 변수를 생성하는 보편적 인 방법을 알지 못합니다. 따라서 주어진 (피어슨) 상관 관계로 균일하게 분포 된 랜덤 변수 쌍을 생성하는 임시 방법을 제안합니다. 일반성을 잃지 않으면 서 원하는 한계 분포가 표준 균일하다고 가정합니다 (즉,지지는 ).[0,1]

제안 된 방법은 다음에 의존한다 :
a) 표준 균일 랜덤 변수의 및 각 분포 함수와 및 , 우리가 들어, . 따라서 Spearman의 rho 는 따라서 Spearman의 rho와 Pearson의 상관 계수는 동일합니다 (샘플 버전은 다를 수 있음).U 2 F 1 F 2 F i ( U i ) = U i i = 1 , 2 ρ S ( U 1 , U 2 ) = c o r r ( F 1 ( U 1 ) , F 2 ( U 2 ) ) = c o r r ( U 1 , UU1U2F1F2Fi(Ui)=Uii=1,2

ρS(U1,U2)=corr(F1(U1),F2(U2))=corr(U1,U2).

b) 가 연속 마진을 갖는 랜덤 변수이고 (Pearson) 상관 계수가 인 가우스 copula 인 경우 Spearman의 rho는 이를 통해 원하는 Spearman 's rho 값을 갖는 랜덤 변수를 쉽게 생성 할 수 있습니다. ρ ρ S ( X 1 , X 2 ) = 6X1,X2ρ

ρ에스(엑스1,엑스2)=6π아크 신(ρ2).

이 방법은 Spearman 's rho가 균일 한 랜덤 변수에 대한 원하는 상관 관계에 일치하도록 적절한 상관 계수 Gaussian copula에서 데이터를 생성 하는 것입니다.ρ

시뮬레이션 알고리즘
하자는 상관도의 원하는 레벨을 나타내며, 쌍의 수를 생성한다. 알고리즘은 다음과 같습니다.n아르 자형

  1. 계산 .ρ=2(아르 자형π/6)
  2. Gaussian copula에서 무작위 변수 쌍을 생성합니다 (예 : 이 방법으로 )
  3. 2 단계를 반복하십시오 .

예제
다음 코드는 대상 상관 관계가 이고 쌍인 R을 사용하여이 알고리즘을 구현 한 예입니다 .n = 500아르 자형=0.6=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))})

아래 그림에서 대각선 도표는 변수 및 히스토그램을 보여주고 대각선 도표는 및 의 산점도를 보여줍니다 . U 2 U 1 U 21212여기에 이미지 설명을 입력하십시오

구성에 의해 랜덤 변수는 균일 한 마진과 상관 계수 가깝습니다 . 그러나 샘플링의 효과로 인해 시뮬레이션 된 데이터의 상관 계수가 과 정확히 같지 않습니다 .r아르 자형아르 자형

cor(U)[1, 2]
# [1] 0.5337697

gen.gauss.cop함수는 단순히 더 큰 상관 관계 행렬을 지정하여 둘 이상의 변수 에서 작동해야합니다.

시뮬레이션 연구
대상 상관 관계 대해 반복 된 다음 시뮬레이션 연구 는 표본 크기 증가함에 따라 상관 계수의 분포가 원하는 상관 관계로 수렴됨을 제안합니다 .N아르 자형=0.5,0.1,0.6

## 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")

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


3
주어진 한계 분포와 상관 된 다변량 분포를 생성하는 일반적인 방법을 copula 라고합니다 .
whuber

@ whuber에서 copula를 사용하면 임의 변수 사이의 의존성 구조를 지정할 수 있습니다. 문제는 (개인) 상관 관계가 의존성 구조와 마진에 의해 영향을 받는다는 것입니다. 따라서, 여백의 각 선택은 주어진 여백에 대해 단순히 일부 수준의 상관 관계를 달성 할 수 없다는 것을 언급하지 않고, copula 매개 변수의 해당 선택을 필요로합니다 (예 : 여기 참조 ). 여백 선택에 대한 상관 수준을 '제어'할 수있는 방법을 알고 있다면 그것에 대해 알고 싶습니다.
QuantIbex

감사합니다 @QuantIbex. 그러나 나는 왜 "a) 표준 균일 한 마진을 갖는 랜덤 변수에 대한 스피어 맨의 rho와 (Pearson 's) 상관 계수가 큰 표본에서 대략 동일하다는 것을
알 수 없다

2
Quantlbex, 필요한 것은 Frechet-Hoeffding 하한에서 상한까지 연속적인 copulas 경로를 만드는 것입니다. 동일한 한계 값에 대해 상관 계수는 해당 경로에서 간격 까지의 연속 함수입니다 . 질문에 대한 주석에서 나의 "빠르고 더러운"예제는 그러한 길 중 하나이지만 분명히 다른 많은 것들이 있습니다. copulas는 그러한 길을 만들고 설명하는 가장 포괄적이고 가장 일반적인 방법을 제공합니다. 이것이 보여주는 것은 원래의 질문이 (총체적으로) 결정되었다는 것입니다. 솔루션에 대한 추가 기준을 규정해야합니다. [1,1]
whuber

1
@Quantibex 나는 gen.gauss.cop함수가 (사소한) 미세 조정으로 두 개 이상의 변수에서 작동 할 것이라고 지적하는 문장을 추가 할 자유를 얻었습니다 . 추가가 마음에 들지 않거나 다르게 넣으려면 필요에 따라 되돌 리거나 변경하십시오.
Glen_b-복지 모니카

0

직관적 인 때문에 동일 [이고 ] 경우, 및 동일 [이고 경우] 하므로 인 어느 경우에. 와 동일합니다 . 상관 관계에 관해서는 :1(0,1)11(0,1)나는=112(0,1)나는=01(0,1)2

이자형(12)=이자형[나는1+(1나는)2][나는1+(1나는)]

이것을 확장하면, 항상 항상 또는 이기 때문에 , 및 입니다. 또한 독립적이며, 또한 서로 독립적입니다. 그래서:나는(나는1)=0나는2=나는(1나는)2=(1나는)나는01나는

이자형(12)=이자형(나는)이자형(12)+이자형(1나는)이자형(2)이자형() =이자형(12)+(1)/4

사실에서 우리 얻을 이므로 이다 : . 이후 , 우리는 마침내 얻을 .V(1)=1/12이자형(12)=1/이자형(12)=/12+1/4영형V(12)=/12V(1)=V(2)=1/12영형아르 자형(1,2)=


0

여기에 양의 상관 관계에 대한 쉬운 하나의 방법은 다음과 같습니다하자 , 및 독립적 인 와 베르누이 인 ( ). 과 는 상관 관계 와 함께 분포 를 갖습니다 . 이는 복합 대칭 분산 행렬을 사용하여 유니폼의 튜플 까지 즉시 확장됩니다 .(1,2)=나는1+(1나는)(2,)1,2,(0,1)나는12(0,1)케이

음의 상관 관계를 갖는 쌍을 원하면 을 사용하면 상관 관계는 입니다.(1,2)=나는(1,11)+(1나는)(2,)


이것이 왜 효과가 있는지에 대한 간단한 증거를 추가 할 수 있습니까?
Laconic

계산 효율성을 도 동일한 상관 관계를 생성합니다 (긍정적 및 부정적 경우 모두)1=1
Anvit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.