2017-01-05 17 views
0

Я хотел бы попробовать большой набор данных, основанный на распределении меньшего набора данных в R. Я искал решение в течение некоторого времени без успеха. Я относительно новичок в R, поэтому прошу прощения, если это просто. Тем не менее, я пробовал несколько solutions.Как пробовать данные, основанные на распределении другого набора данных в R

Вот несколько примеров данных. Я буду называть это наблюдается и модель:

# Set seed 
set.seed(2) 

# Create smaller observed data 
Obs <- rnorm(1000, 5, 2.5) 

# Create larger modeled data 
set.seed(2) 
Model <- rnorm(10000, 8, 1.5) 

Распределение двух наборов данных заключаются в следующем: enter image description here

Цель: Я хотел бы попробовать большой «модель» набор данные, чтобы соответствовать тем меньше " наблюдаемый". Я понимаю, что есть разные точки данных, поэтому это не будет прямым совпадением.

Я читал вверх на density() и sample() где я следующее:

# Obtain the density of the observed at the length of the model. 
# Note: info on the sample() function stated the prob argument in the sample() function 
# must be the same length as what's being sampled. Thus, n=length(Model) below. 

dens.obs <- density(Obs, n=length(Model)) 

# Sample the Model data the length(Obs) at the probability of density of the observed 
set.seed(22) 
SampleMod <- sample(Model, length(Obs), replace=FALSE, prob=dens.obs$y) 

Это дает мне новый сюжет, который очень похож на старый (за хвостами исключением): enter image description here

Я надеялся на лучшее совпадение. Поэтому я начал изучать, используя функцию плотности на данных модели. Смотрите ниже:

# Density function on model, length of model 
dens.mod <- density(Model, n=length(Model)) 

# Sample the density of the model $x at the density of the observed $ y 
set.seed(22) 
SampleMod3 <- sample(dens.mod$x, length(Obs), replace=FALSE, prob=dens.obs$y) 

Вот два участка, первый же, как и первый образец, и второе является второй выборки: enter image description here

Существует более желательны сдвиг в правильном участке, который представляет собой выборочную плотность моделируемого по плотности наблюдаемого. Однако данные не совпадают. То есть, я НЕ пробовал моделированные данные. Смотрите ниже:

summary(SampleMod3 %in% Model) 

производит:

Mode FALSE NA's 
logical 1000  0 

Указав, что я не образец смоделированные данные, а плотность смоделированных данных. Можно ли пробовать набор данных на основе распределения другого набора данных? Заранее спасибо.

EDIT:

Спасибо за помощь, ребята! Вот мой сюжет с использованием функции approxfun(), предлагаемой от danielson и поддерживаемой bethanyp.

enter image description here

Любая помощь с пониманием, почему фанки новое распределение?

ответ

1

Интересный вопрос. Я думаю, это поможет. Во-первых, он аппроксимирует функцию плотности. Затем он отображает из точек модели с вероятностями установленной плотности.

predict_density = approxfun(dens.obs) #function that approximates dens.obs 
#sample points from Model with probability distr. of dens.obs 
SampleMod3 <- sample(Model, length(Obs), replace=FALSE, prob=predict_density(Model)) 
summary(SampleMod3 %in% Model) 
    Mode TRUE NA's 
logical 1000  0 
+1

Похоже, мы писали один и тот же ответ двумя разными способами одновременно. Я пошел на объяснение, вы пошли для того, чтобы использовать ... отличный звонок! Всегда хорошо знать, что я на правильном пути! – sconfluentus

+0

Спасибо вам обоим. Я использовал описанное выше «практическое» решение и получил распространение в отредактированном разделе моего вопроса (см. Выше). Любая помощь для понимания фанк нового дистрибутива? – Phil

1

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

Таким образом, вы должны использовать взвешенные вероятности при выборе меньшего суб-выборки из оригинала.

Пример все население {1,2,1,3,4,1,3}, где вероятности для каждого числа втягивания (помните сумму должно быть равно 1): 1: 0,4285 2: 0,1429 3: 0,2857 4: .1429

, если вы используете эти весовые вероятности в prob= my_freqs части

sample(x, size, replace = FALSE, prob = my_freqs) 

вы, вероятно, получить вероятность больше инлайн с тем, что вы ожидали. Но я не уверен на 100%, если это то, что вам нужно.

В случайных данных попробуйте set.seed(2) и посмотрите, не говорит ли R, чтобы использовать семя, используемое для генерации этих частот в исходном создании набора, приближает вас к вашей цели.

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

 Смежные вопросы

  • Нет связанных вопросов^_^