我想生成400個滿足條件的組合資料,然后將它們組合在一起。用于生成資料的三個變數之間的均值和方差相關性是:
mu <- c(45.2, 15.4, 15.4) # means
names (mu) <- c("P", "S", "Fa") # names of the three variances
sted <- c(4.830935, 3.222764, 3.222764) # standard deviations
names (sted) <- c("P", "S", "Fa") # names of the three variances
# covariance matrix:
corMat <- matrix (c(23.337931, -7.737931, -7.737931,
-7.737931, 10.386207, -5.131034,
-7.737931, -5.131034, 10.386207),
ncol = 3, byrow = T)
dimnames (corMat) <- list (row_names = c("P", "S", "Fa"),
col_names = c("P", "S", "Fa"))
生成受激資料的程序包括以下兩個步驟:
第 1 步:生成一個基于正態分布的資料,基于三個變數之間的均值和方差相關性:
set.seed(1)
library(MASS)
dat1 <- mvrnorm(n = 1, mu = mu, Sigma = corMat, empirical = F)
步驟2:檢查是否dat1有:P在范圍內45 <= P <= 55;S內12 <= S <= 22;并Fa在12 <= S <= 22. 如果dat1滿足P、S和的三個條件Fa,則接受dat1。重復步驟 1 和 2,直到獲得400可接受的資料并將rbind它們放在一起。
我發現一些相關的問題,repeat break比如這個,但我仍然停留在重復步驟1和2,直到獲取400資料和資料系結在一起。請問有人可以幫忙嗎?非常感謝。
uj5u.com熱心網友回復:
下面解決你的問題。但是,生成的dat1似乎永遠不會滿足您要強加的條件。不dat1應該除以100嗎?
nSets <- 0
data <- matrix(ncol=3)
while (nSets < 400)
{
dat1 <- mvrnorm(n = 1, mu = mu, Sigma = corMat, empirical = F)
# dat1 <- dat1/100 <-- maybe this is necessary?
if (dat1["P"] >= 0.45 & dat1["P"] <= 0.55 &
dat1["S"] >= 0.12 & dat1["S"] <= 0.22 &
dat1["Fa"] >= 0.12 & dat1["Fa"] <= 0.22)
{
nSets <- nSets 1
data <- rbind(data,dat1)
}
}
data <- data[-1,]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343069.html
上一篇:如何列印完整金字塔的金字塔?
