一様に分布し相関した乱数のペアを生成します


14

特定の相関関係を持つ乱数のペアを生成したいと思います。ただし、2つの正規変数の線形結合を使用する通常のアプローチは、ここでは有効ではありません。これは、均一変数の線形結合はもはや均一分布変数ではないためです。2つの変数が均一である必要があります。

特定の相関関係を持つ均一変数のペアを生成する方法に関するアイデアはありますか?


6
密接に関連:stats.stackexchange.com/questions/30526を。また、コピュラタグをチェックアウトすることもできます。ここのリンクをクリックしてください。迅速かつ汚れた技術ができるようになる均一であると及びさもなければ。相関はであり、ここでがトリックを行います。ただし、コピュラを使用すると、より多くの制御が可能になります。[ 0 、1 ] Y = X X ≤ α Y = 1 + α - X ρ = 2 (α - 1 )3 + 1 α = 1 - (( 1 - ρ )/ 2 )1 / 3バツ[0、1]Y=バツバツ≤αY=1+α−バツρ=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

私は、与えられた周辺分布を持つ相関ランダム変数を生成する普遍的な方法を知りません。そこで、特定の(ピアソン)相関を持つ均一に分布したランダム変数のペアを生成するアドホックな方法を提案します。一般性を失うことなく、Iは所望の周辺分布は、標準均一であると仮定する(すなわち、支持体は、)。[0、1]

提案されたアプローチは、以下に依存している。
)標準一様確率変数の場合及びU 2それぞれの分布関数でF 1及びF 2、我々はF I(U 、I)= U Iをするため、私は= 1 、2。従って、定義によりスピアマンのrhoがある ρ S(U 1、U 2)= C O R R(Fはうん1うん2F1F2F私(うん私)=うん私私=1、2 したがって、スピアマンのローとピアソンの相関係数は等しくなります(ただし、サンプルバージョンは異なる場合があります)。

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

場合B)連続的なマージンとを有するランダム変数であるガウス・コピュラ(ピアソン)相関係数でρは、スピアマンのrhoは ρ S(X 1、X 2)= 6X1,X2ρ これにより、スピアマンのρの所望の値を持つランダム変数を簡単に生成できます。

ρS(X1,X2)=6πアークシン⁡(ρ2)。

アプローチは、スピアマンのrhoが均一なランダム変数の望ましい相関に対応するように、適切な相関係数持つガウスコピュラからデータを生成することです。ρ

シミュレーションアルゴリズム
のlet 相関の所望のレベルを示し、nはペアの数が生成されます。アルゴリズムは次のとおりです。rn

  1. 計算。ρ=2罪⁡(rπ/6)
  2. ガウスコピュラからランダム変数のペアを生成します(たとえば、このアプローチで)
  3. 手順2を回繰り返します。n

例
次のコードは、ターゲット相関およびn = 500のペアでRを使用したこのアルゴリズムの実装例です。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))})

以下の図では、対角線のプロットは変数とU 2のヒストグラムを示し、非対角線のプロットはU 1とU 2の散布図を示しています。 うん1うん2うん1うん2ここに画像の説明を入力してください

構築により、ランダム変数は均一なマージンと相関係数(に近い)持ちます。ただし、サンプリングの影響により、シミュレートされたデータの相関係数はrと正確には等しくありません。rr

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

gen.gauss.cop関数は、より大きな相関行列を指定するだけで、3つ以上の変数で機能することに注意してください。


r=−0.5、0.1、0.6n

## 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
与えられた周辺分布を持つ相関多変量分布を生成する一般的な方法は、コピュラと呼ばれます。
— whuber

@whuber、コピュラを使用すると、ランダム変数間の依存構造を指定できます。問題は、(個人)相関が依存構造とマージンの両方の影響を受けることです。そのため、マージンの各選択には、コピュラパラメーターの対応する選択が必要になります。もちろん、特定のマージンでは、ある程度の相関レベルを達成できないことは言うまでもありません(たとえば、こちらを参照)。マージンの選択に対して相関のレベルを「制御」できる方法を知っているなら、私はそれについて知りたいです。
— QuantIbex

@QuantIbexに感謝します。しかし、私は、なぜ得ることはありません「)スピアマンのrhoと標準均一なマージンを持つ確率変数のための(ピアソン)相関係数が約大きなサンプルに等しいことを意味し、」
— Onturenio

2
[−1、1]

1
@Quantibex私は、あなたのgen.gauss.cop関数が(些細な)微調整で3つ以上の変数に対して機能することを指摘する文を追加する自由を取りました 。追加が気に入らない場合や、別の方法で配置したい場合は、必要に応じて元に戻すか変更してください。
— -Glen_b

0

あなたは1うん(0、1)あなたは1w1うん(0、1)私=1あなたは1w2うん(0、1)私=0あなたは1うん(0、1)あなたは2

E(あなたは1あなたは2)=E[私w1+(1−私)w2][私w1+(1−私)w3]

私(私−1)=0私2=私(1−私)2=(1−私)私01私w

E(あなたは1あなたは2)=E(私)E(w12)+E(1−私)E(w2)E(w3) =pE(w12)+(1−p)/4

V(w1)=1/12E(w12)=1/3E(あなたは1あなたは2)=p/12+1/4cov(あなたは1あなたは2)=p/12V(あなたは1)=V(あなたは2)=1/12cor(あなたは1、あなたは2)=p


0

(あなたは1、あなたは2)=私w1+(1−私)(w2、w3)w1、w2、w3うん(0、1)私pあなたは1あなたは2うん(0、1)pk

(あなたは1、あなたは2)=私(w1、1−w1)+(1−私)(w2、w3)−p


これが機能する理由の簡単な証拠を追加できますか?
— 簡潔

あなたは1=w1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.