R 如何生成混合数据并保持每列之间的关系或相关性?

R 如何生成混合数据并保持每列之间的关系或相关性?,r,random,generated-code,R,Random,Generated Code,我正在研究混合数据的集群。为了测试我的算法,我需要使用生成的数据进行一些模拟。我知道如何使用rnorm生成数字属性,对于分类属性,是否可以使用字母样本? 但问题是如何建立一个列与另一个列之间的关系(数字属性和分类属性)。 我不能只做随机值和属性,没有任何关系。这种关系必须有意义。例如,如果我只是生成随机值,假设我有产品变量和价格 product price pen $500 这没有意义,对吧,关系会一团糟。有什么建议吗 我做了这个代码,但似乎不够好 n <- 500 pr

我正在研究混合数据的集群。为了测试我的算法,我需要使用生成的数据进行一些模拟。我知道如何使用rnorm生成数字属性,对于分类属性,是否可以使用字母样本? 但问题是如何建立一个列与另一个列之间的关系(数字属性和分类属性)。 我不能只做随机值和属性,没有任何关系。这种关系必须有意义。例如,如果我只是生成随机值,假设我有产品变量和价格

product  price
pen      $500
这没有意义,对吧,关系会一团糟。有什么建议吗

我做了这个代码,但似乎不够好

n   <- 500
prb <- 0.90
c1 = sample(2:5, 1)
c2 = sample(7:10, 1)
c3 = sample(12:15, 1)

x1 <- sample(c("A","B"), 1.5*n, replace = TRUE, prob = c(prb, 1-prb))
x1 <- c(x1, sample(c("A","B"), 1.5*n, replace = TRUE, prob = c(1-prb, prb)))
x1 <- as.factor(x1)

x2 <- sample(c("C","D","E"), n, replace = TRUE, prob = c(0.90, 0.05, 0.05))
x2 <- c(x2, sample(c("C","D","E"), n, replace = TRUE, prob = c(0.05, 0.9, 0.05)))
x2 <- c(x2, sample(c("C","D","E"), n, replace = TRUE, prob = c(0.05, 0.05, 0.9)))
x2 <- as.factor(x2)

x3 <- sample(c("X","Y"), 1.5*n, replace = TRUE, prob = c(0.6, 0.4))
x3 <- c(x3, sample(c("X","Y"), 1.5*n, replace = TRUE, prob = c(0.4, 0.6)))
x3 <- as.factor(x3)

x4 <- c(rnorm(n, mean = c1), rnorm(n, mean = c2), rnorm(n, mean = c3))
x5 <- c(rnorm(n, mean = c1+20), rnorm(n, mean = c2+30), rnorm(n, mean = c3+40))


x <- data.frame(x1,x2,x3,x4,x5)

n你的问题提到了两个变量,产品和价格。上面的代码创建了一个包含5个变量的data.frame。我不是100%确定你想要什么,但我认为你需要这样的东西

对于每个产品,您可以生成平均值和标准偏差。您可以随机挑选产品,然后使用适当的平均值和标准偏差从该产品的分布中生成值

您没有提供任何数据,因此我将演示如何使用iris数据。想想种类=产品和花瓣,长度=价格

## First collect statistics from the original data
MEANS = aggregate(iris$Petal.Length, list(iris$Species), mean)
SD = aggregate(iris$Petal.Length, list(iris$Species), sd)
NumSpecies = length(levels(iris$Species))
现在我们可以随机生成一个物种,并根据该物种的分布生成一个花瓣

NumNew = 10
RS = sample(NumSpecies, NumNew, replace=TRUE)
NewSpecies     = levels(iris$Species)[RS]
NewPetalLength = rnorm(NumNew, MEANS$x[RS], SD$x[RS])
NewData = data.frame(NewSpecies, NewPetalLength)
NewData
   NewSpecies NewPetalLength
1   virginica       5.826106
2  versicolor       3.711405
3   virginica       5.136330
4  versicolor       3.979712
5  versicolor       3.379810
6  versicolor       4.017866
7  versicolor       4.141408
8   virginica       5.817107
9      setosa       1.563924
10  virginica       5.456761

我提到两个变量只是为了举例说明随机效应。但您已经很好地解释了,使用旧数据的分布来生成新数据。但在我的例子中,可能有两个以上的变量,而且我没有旧数据,所以我无法进行分布来构建新数据。所以,在我的例子中,它就像你制作一个虚构的数据,或者使用R函数生成数据。问题是如何保持每列之间的相关性,这样即使数据只是一个虚构的数据,也仍然有意义。。。(如果有两个以上的变量)