0

мне нужно сделать плотность вероятности Предсказания следующих данных в R:функции плотности вероятности в R для прогнозирования следующего значения инцидентов

year = c(1971, 1984, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
2007, 2008, 2009, 2010, 2011, 2012, 2013) 
incidents = c(1, 1, 1, 1, 3, 1, 6, 6, 9, 11, 21, 37, 38, 275, 226, 774, 1064) 

Является data.frame в R нравится:

dat <- data.frame(year,incidents) 

Цель и идея - сделать прогнозы на основе нескольких лет и «предсказать» за последний год доступных данных.

Я новичок в R, поэтому любые предложения, рекомендации и т. Д. Приветствуются. Спасибо заранее.

+0

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

+0

Существует ли какой-либо известный теоретический способ увеличения числа инцидентов за эти годы? Экспоненциальный? Логарифмические? Я думаю, вам, вероятно, нужно подумать о том, чего вы хотите от анализа. Вы можете запустить «предсказать» данные и получить абсолютно бессмысленные результаты, иначе вы не смогли бы. – thelatemail

+0

Проблема в том, что данные не завершены, это не смещение. Тем не менее, процесс по-прежнему находится под продолжительностью, но мне нужно будет иметь некоторые результаты. В дополнение к вышеуказанной проблеме, я принимаю во внимание, чтобы рассчитать остаточный анализ и, пожалуйста, взгляните на гистограмму ниже и дайте мне знать, если я на правильном пути! ! [Остаточная гистограмма] (https://www.dropbox.com/s/wohq5s1bip7eog7/ResidualsHistogram.png). – user3251330

ответ

1

В целом, двумя основными подходами к моделированию являются так называемые «механистические» и «эмпирические» подходы. Оба имеют своих сторонников (и их хулителей). Механистический подход утверждает, что моделирование должно исходить из понимания основных явлений (механизма), которое затем переводится на некоторый тип математических уравнений (уравнений), которые затем подгоняются к данным (для проверки механизма). Эмпирический подход собирает (обычно длинный) список моделей (уравнений) и стремится найти тот, который «подходит лучше всего». Эмпирическое моделирование привлекательно, но опасно, потому что оценка, когда у вас есть «хорошая подгонка», не является тривиальной - хотя ее часто трактуют именно так.

Вы не дали нам почти достаточно информации, чтобы сформулировать механистическую модель, так вот иллюстрация пару эмпирических моделей, как поучительная история:

Finite-time singularity models популярны с типом данных. Среди прочего, эти модели используются для «прогнозирования» stock market bubbles (модель LPPL). Основная идея заключается в том, что наступает катастрофа (сингулярность), и мы хотим предсказать, когда. Таким образом, мы используем функцию вида:

у = а × (с-х) б

С Ь < 0, у приблизившегося особенность при х -> с.

В R коде, мы можем подобрать модель, как это выглядит следующим образом:

# Finite-Time Singularity Model 
library(minpack.lm) 
f <- function(par,x) { 
    a <- par[1] 
    b <- par[2] 
    c <- par[3] 
    a * (c - x)^b 
} 
resid <- function(par,obs,xx) {obs-f(par,xx)} 
start <- c(a=1, b=-1, c=2100) 
nls.out <- nls.lm(par=start, fn=resid, obs =dat$incidents, xx=dat$year, 
        control = nls.lm.control(maxiter=500)) 
coef(nls.out) 
with(dat, plot(incidents~year, main="Finite-Time Singularity Model")) 
lines(dat$year,f(coef(nls.out),year), col=2, lwd=2) 

Это дает то, что, как представляется, "очень хорошо подходит":

В самом деле, модель завышает инциденты на раннем этапе и, как правило, занижает их позже (что ужасно, потому что мы хотим предсказать будущее). На рисунке остатков это ясно видно.

with(dat,plot(year,resid(coef(nls.out),incidents,year), 
       main="Residuals Plot", ylab="residuals")) 

Другой подход отмечает, что ваши данные "рассчитывает" (например, количество инцидентов в год). Это предполагает обобщенную линейную модель в семействе пуассоновского:

# generalized liner model, poisson family 
fit.glm <- glm(incidents ~year,data=dat,family=poisson) 
with(dat,plot(incidents~year)) 
lines(dat$year,predict(fit.glm,type="response"), col=2, lwd=2) 
par(mfrow=c(2,2)) 
plot(fit.glm) 

Это подходит лучше, но все еще не очень хорошо, как показывают диагностические участки. Остатки следуют тенденции, они обычно не распределяются, а некоторые из точек данных имеют неприемлемо высокое плечо.

+0

Большое спасибо за такой отличный ответ и усилие. Мы находимся на одной странице относительно остаточного анализа, что точки данных имеют неприемлемо высокий уровень кредитного плеча. С другой стороны, сюжет семьи Пуассона дает обобщенную линейную модель, и, конечно же, мне нужно будет рассмотреть это как соображение. Также большое спасибо за соответствующую работу. – user3251330

+0

Не могли бы вы поделиться кодом из вышеуказанных четырех графиков (остатков). Заранее спасибо! – user3251330

+0

Это уже есть две последние строки кода. – jlhoward

0
dat <- data.frame(year,incidents) 
with(dat, plot(incidents~year)) 

enter image description here

Так что что-то изменилось ... но то, что вызывает резкое увеличение числа инцидентов, если? Ключ только у вас, ученого. Вероятно, вы можете предсказать, что в следующем году-два произойдет некоторое увеличение, но будет ли это увеличение соответствовать экспоненциальному или логическому шаблону, определяется базовым областью исследования. Логистическая модель не была бы ужасно точна, если вы находитесь в том, что обычно называется «фазой журнала» роста, потому что верхний предел инцидентов в год неизвестен.

+0

Спасибо за это, я посмотрю. – user3251330

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