【问题标题】:How to generated mixed data and keep the relation or correlation each column?如何生成混合数据并保持每列的关系或相关性?
【发布时间】:2018-05-05 01:05:06
【问题描述】:

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

【问题讨论】:

    标签: r random generated-code


    【解决方案1】:

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

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

    您没有提供任何数据,因此我将使用虹膜数据进行说明。认为 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
    

    【讨论】:

    • 我提到两个变量只是为了展示随机效应。但是您已经很好地解释了它,使用旧数据的分布来制作新数据。但就我而言,它可能超过 2 个变量,而且我没有旧数据,所以我无法进行分布以构建新数据。因此,就我而言,这就像您制作虚构数据或使用 R 函数生成数据一样。问题是如何保持每一列的相关性,所以数据仍然有意义,即使它只是一个虚构的数据......(如果有两个以上的变量)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多