簡體   English   中英

如何在 R 中生成多元正態數據?

[英]How to generate multivariate normal data in R?

我正在完成一項作業,其中我必須從雙變量法線生成樣本 X = (X1, X2),其中每個邊際為 N(0,1),X1 和 X2 之間的相關性為 0.5。

我認為解決這個問題的方法是使用 mvrnorm 函數,但我不太確定之后如何進行。 有什么建議嗎? 提前致謝!

事實上,MASS 包中的mvrnorm函數可能是你最好的選擇。 該函數可以從多元正態分布生成偽隨機數據。

檢查此函數 ( ??mvrnorm ) 的幫助頁面表明,您需要三個關鍵參數來模擬基於給定參數的數據,即:

  • n - 所需樣本數(整數);
  • mu - 給出變量均值的向量 - 在這里,您的分布是標准正態分布,因此它將是一個零向量;
  • Sigma - 一個正定對稱矩陣,指定變量的協方差矩陣 - 即,在您的情況下,一個矩陣的對角線上的方差和非對角線上的協方差為 0.5。

看看這個幫助頁面中的例子,它應該可以幫助你把這些想法放在一起!

以下是一些選項:

  1. mvtnorm::rmvnormMASS::mvrnorm的工作方式相同,盡管mvtnorm::rmvnorm函數不需要您指定均值(即默認值為 0)。 mu向量命名將指定模擬變量的名稱。
n <- 100
R <- matrix(c(1, 0.5,
              0.5, 1), 
            nrow = 2, ncol = 2, byrow = TRUE)
            
mu <- c(X = 0, Y = 0)
mvtnorm::rmvnorm(n, mean = mu, sigma = R)
MASS::mvrnorm(n, mu = mu, Sigma = R)
  1. simstandard::sim_standardized將只生成標准化數據,但輸入更少:
simstandard::sim_standardized("X ~~ 0.5 * Y", n = 100)

使用基本 R(不需要包)和一些統計數據:

Sigma = matrix(c(1,0.5,0.5,1), ncol=2)
R = chol(Sigma) # Sigma == t(R)%*%  R
n = 1000
X = t(R) %*% matrix(rnorm(n*2), 2)

X %*% t(X)/n # test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM