Как генерировать смешанные данные и сохранять связь или корреляцию каждого столбца? - PullRequest
0 голосов
/ 04 мая 2018

Я работаю над кластеризацией для смешанных данных. Чтобы проверить мой алгоритм, мне нужно провести симуляцию с использованием сгенерированных данных. я знаю, чтобы сгенерировать числовой атрибут, используя 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)

1 Ответ

0 голосов
/ 04 мая 2018

Ваш вопрос упоминает две переменные, продукт и цену. Ваш код выше создает data.frame с 5 переменными. Я не на 100% уверен, что вы ищете, но я думаю, что вам нужно что-то подобное.

Для каждого продукта вы можете сгенерировать среднее и стандартное отклонение. Вы можете выбрать товары случайным образом, а затем использовать соответствующее среднее значение и стандартное отклонение, чтобы сгенерировать значение из распределения для этого продукта.

Вы не предоставляете никаких данных, поэтому я проиллюстрирую это с помощью данных радужной оболочки. Подумайте Вид = продукт и Лепесток. Длина = цена.

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

Теперь мы можем случайным образом сгенерировать вид и сгенерировать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...