首页 > 解决方案 > 如何生成混合数据并保持每列的关系或相关性?

问题描述

我正在研究混合数据的聚类。为了测试我的算法,我需要使用生成的数据进行一些模拟。我知道使用 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)

标签: rrandomgenerated-code

解决方案


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

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

您没有提供任何数据,所以我将使用 iris 数据进行说明。认为 Species = 产品和 Petal.Length = 价格。

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

现在我们可以随机生成一个 Species 并从该 Species 的分布中生成一个 Petal.Length。

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

推荐阅读