这是使用data.table
,ggplot2
和nls
的方法。
首先,让我们将日期固定为标准格式并转换为整数,以便进行一些计算。
library(data.table)
library(ggplot2)
setDT(data)
data[,Day:= as.Date(Day,"%d/%b")]
data[,Int := as.integer(Day)-min(as.integer(Day))]
然后,我们使用nls
将模型拟合到数据中。我们将使用公式y = a * x ^ b
。
nls(formula = Contaminated ~ a * Int ^ b,data,start=list(a=1,b=1))
# Nonlinear regression model
# model: Contaminated ~ a * Int^b
# data: data
# a b
#2.272e-05 5.571e+00
# residual sum-of-squares: 123279
#
#Number of iterations to convergence: 48
#Achieved convergence tolerance: 7.832e-07
现在,我们可以使用ggplot
查看结果。
ggplot(data,aes(x=Int,y=Contaminated)) +
geom_point() +
scale_x_continuous(breaks = c(0,10,20),labels = data$Day[data$Int %in% c(0,20)]) + xlab("Date") +
geom_smooth(method="nls",formula = y ~ a * x ^ b,method.args = list(start = c(a=1,b=1)),se=FALSE,linetype = 1)
数据
data <- structure(list(Day = c("26/feb","29/feb","04/mar","05/mar","06/mar","07/mar","08/mar","10/mar","11/mar","12/mar","13/mar","14/mar","15/mar","16/mar","17/mar","18/mar","19/mar","20/mar","21/mar","22/mar","23/mar","24/mar","25/mar"),Contaminated = c(1L,2L,3L,8L,13L,19L,25L,34L,52L,81L,98L,121L,176L,234L,291L,428L,621L,904L,1128L,1546L,1891L,2201L,2433L)),class = "data.frame",row.names = c(NA,-23L))
本文链接:https://www.f2er.com/2572890.html