Фитинги и погрешности с гауссовым фитингом R - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь вписать некоторые данные в R, и до сих пор я думаю, что делаю хорошо. Мой набор данных выглядит следующим образом (источник:

x<-c(1:35)
y<-c(221,88,76,203,233,228,288,498,428,443,570,640,1145,1326,1598,
529,2076,2249,2116,2795,2853,2470,2989,2648,4480,4670,4821,
3957,3780,3612,3491,4492,4401,3651,3815)

data<-data.frame(x,y)
fitG =
   function(x,y,mu,sig,scale){
                f = function(p){
                  d = p[3]*dnorm(x,mean=p[1],sd=p[2])
                  sum((d-y)^2)
                  }
                 optim(c(mu,sig,scale),f)
   }

fitP=fitG(data$x, data$y, 35, 1, 6000)

plot(data$x, data$y)
p =fitP$par
lines(data$x, p[3]*dnorm(data$x, p[1], p[2]))

(источник, http://www.protezionecivile.gov.it, я использую данные в качестве примера)

, которые соответствуют данные довольно хорошо ... но есть ли способ

а) вместо использования функции plot с использованием пакета ggplot2, который позволяет более настраивать график и б) я хочу сделать примерку для данных здесь не показано (т. е. расширить гауссову кривую за 35-й день), возможно, добавив панель ошибок, которая показывает неопределенность в зависимости от времени ... Я пытался найти в Интернете, но все статьи, которые я нашел, предполагают, что читатель имеет сильный статистический опыт ... чего я не имею.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Вы можете добавить подгонку на data.frame и график:

library(ggplot2)
data$fitted = p[3]*dnorm(data$x, p[1], p[2])
ggplot(data,aes(x=x,y=y)) + 
geom_point() + 
geom_line(aes(y=fitted),col="blue")

enter image description here

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

Что именно вы подразумеваете под «возможно добавлением панели ошибок, которая показывает неопределенность по времени подгонки»? Хотя это много статистики, ее можно упростить до этой, какую ошибку вы хотите показать?

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

0 голосов
/ 30 марта 2020

Чтобы использовать ggplot, вы можете сделать:

  data %>% 
  ggplot(aes(x=x, y=y))+
  geom_point()+
  geom_smooth()

, а затем настроить, как вы будете sh.

enter image description here

...