高斯拟合R的拟合和误差线

时间:2020-03-30 15:27:55

标签: r curve-fitting gaussian

我正在尝试在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,我以covid数据为例)

非常适合数据...但是有办法

a)而不是通过使用ggplot2软件包来使用plot函数,该软件包允许对图形进行更多自定义,并且 b)我想对此处未显示的数据进行拟合(即,将高斯曲线扩展到第35天之后),可能会添加一个误差线,以显示随时间推移拟合的不确定性...我试图在线查找但是我发现的所有文章都假定读者具有很强的统计背景……我没有。

2 个答案:

答案 0 :(得分:0)

要使用ggplot,您可以执行以下操作:

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

然后根据需要进行自定义。

enter image description here

答案 1 :(得分:0)

您可以将拟合添加到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,它适合样条曲线,其误差是根据拟合误差估算的,您可以查看有关{{ 3}}。

相关问题