2016-08-25 2 views
0

У меня есть 2 набора данных, один из смоделированных (искусственных) данных и другой с наблюдаемыми данными. Они имеют несколько разные статистические распределения, и я хочу заставить моделированные данные соответствовать наблюдаемому распределению данных в распространении данных. Другими словами, мне нужны смоделированные данные, чтобы лучше представлять хвосты наблюдаемых данных. Вот пример.Изменение распределения одного набора данных в соответствии с другим набором данных

model <- c(37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00, 
38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40, 
42.26,41.89,38.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40, 
49.81,38.87,40.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60, 
45.34,43.37,54.15,42.77,42.88,44.26,27.14,39.31,24.80,16.62,30.30, 
36.39,28.60,28.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00, 
38.65,34.54,37.70,38.11,43.05,29.95,32.48,24.63,35.33,41.34) 

observed <- c(39.50,44.79,58.28,56.04,53.40,59.25,48.49,54.51,35.38,39.98,28.00, 
28.49,27.74,51.92,42.53,44.91,44.91,40.00,41.51,47.92,36.98,53.40, 
42.26,42.89,43.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40, 
52.81,36.87,47.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60, 
51.34,43.37,51.15,42.77,42.88,44.26,27.14,39.31,24.80,12.62,30.30, 
34.39,25.60,38.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00, 
34.65,39.54,47.70,38.11,43.05,29.95,22.48,24.63,35.33,41.34) 

summary(model) 
Min. 1st Qu. Median Mean 3rd Qu. Max. 
16.62 36.98 40.38 40.28 44.91 54.15 

summary(observed) 
Min. 1st Qu. Median Mean 3rd Qu. Max. 
12.62 35.54 42.58 41.10 47.76 59.2 

Как я могу заставить данные модели иметь изменчивость, которую наблюдаемый имеет в R?

+0

Это больше похоже на математическое обсуждение, а затем на программирование. Возможно, это было бы хорошо на [Cross Validated] (http://stats.stackexchange.com)? (Кроме того, «более высокая частота» не имеет контекста с текущими данными. Возможно, вам придется изменить свой образец, чтобы правильно отразить характер временных рядов.) – r2evans

+0

Кроме того, вы должны указать тип распространения и параметры дистрибутива 'model', если это не просто другое эмпирическое распределение, и в этом случае вам нужно четко указать, что у вас есть два эмпирических распределения. – r2evans

+0

@ r2evans Хороший момент, я избавился от лишнего вопроса.Я не уверен, что тип распределения и параметры для дистрибутива 'model', но это смоделированные данные. –

ответ

0

Вы просто моделируете распределение observed? Если это так, вы можете сгенерировать оценку плотности ядра из наблюдений, а затем выполнить повторную выборку из этого модельного распределения плотности. Например:

library(ggplot2) 

Сначала мы создаем оценку плотности по наблюдаемым значениям. Это наша модель распределения наблюдаемых значений. adjust - это параметр, определяющий полосу пропускания. Значение по умолчанию равно 1. Меньшие значения приводят к меньшему сглаживанию (то есть, оценка плотности, которые более близко следует мелкомасштабной структуре в данных):

dens.obs = density(observed, adjust=0.8) 

Теперь, частота дискретизации из оценки плотности, чтобы получить смоделированные значения , Мы установили prob=dens.obs$y, так что вероятность того, что значение в dens.obs$x будет выбрано, пропорционально его смоделированной плотности.

set.seed(439) 
resample.obs = sample(dens.obs$x, 1000, replace=TRUE, prob=dens.obs$y) 

путы наблюдаются и по образцу значения в кадре данных в рамках подготовки к черчению:

dat = data.frame(value=c(observed,resample.obs), 
       group=rep(c("Observed","Modeled"), c(length(observed),length(resample.obs)))) 

ECDF (эмпирическая функция распределения) график ниже показывает, что отбор пробы из оценки плотности ядра дает образцы с распределение аналогичны наблюдаемые данные:

ggplot(dat, aes(value, fill=group, colour=group)) + 
    stat_ecdf(geom="step") + 
    theme_bw() 

enter image description here

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

ggplot(dat, aes(value, fill=group, colour=group)) + 
    geom_density(alpha=0.4, adjust=0.8) + 
    theme_bw() 

enter image description here

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