在这里,我对流行病进行了建模,我正试图对其参数进行优化,以便用新冠病毒-19数据拟合模型。这里的问题是,我不能得到优化的参数,而是得到相同的参数。我应该在这里修复什么并为我的模型获得优化的参数?请帮我更正代码
library(deSolve)
library(reshape2)
library(ggplot2)
library(ggpubr)
# Model Input
N <- 1380004385
p <- .87 #0.88689
initial_state_values <- c(S = N - 1, E = 0, A = 0, I = 1, T = 0, F = 0, R = 0)
parameters <- c(pie = .6782, mu = 0.0000391, beta =.89768, alpha = 0.24757, phi = 0.08,
h = 1.08, mu_I = 0.06891, mu_T = 0.06891, gamma_I = 0.05090,
gamma_T = 0.07048) #67446.82054)
time <- seq(1, 164, .1)
# Input function: Differential equation
SEAITFR_fn <- function(time, initial_state_values, parameters) {
with(as.list(c(initial_state_values, parameters)), {
N <- S+E+A+I+T+F+R
lamda <- beta/N * (A + I)
dS <- pie - (lamda + mu) * S
dE <- lamda * S - (alpha + mu) * E
dA <- alpha * (1-p) * E - (mu + phi) * A
dI <- alpha * p * E + phi * A -(h + gamma_I + mu_I + mu) * I
dT <- h * I - (gamma_T + mu_T) * T
dF <- mu_I * I + mu_T * T
dR <- gamma_I * I + gamma_T * T - mu * R
return(list(c(dS, dE, dA, dI, dT, dF, dR)))
})
}
output <- as.data.frame(ode(y = initial_state_values,
times = time,
func = SEAITFR_fn,
parms = parameters)
)
#output
output$total_prevalence <- output$I + output$T
#output$total_prevalence
# Distance Function
SEAITFR_SSQ <- function(parameters, data) {
output <- as.data.frame(ode(y = initial_state_values, # vector of initial state
times = time, # vector of times
func = SEAITFR_fn,
parms = parameters)
)
data <- na.omit(data)
deltas_square <- (output$total_prevalence[output$time %in% data$time] -
data$new_cases)^2
SSQ <- sum(deltas_square)
return(SSQ)
}
# Real world data
covid_19_data <- read_excel("covid.xlsx")
covid_19_data
#Optimization
optimised <- optim(par = c(pie =.6782, mu = 0.0000391, beta = 0.88689, alpha = 0.24757, phi = 0.08,
h = 1.08, mu_I = 0.06891, mu_T = 0.06891, gamma_I = 0.05090,
gamma_T = 0.07048), # these are the starting beta
# and gamma that will be fed
# first, into SSQ_fn
fn = SEAITFR_SSQ,
data = covid_19_data # this argument comes under "..."
# "Further arguments to be passed to fn a
)
optimised
optimised_model <- as.data.frame(ode(y = initial_state_values,
times = time, func = SEAITFR_fn, parms = optimised$par))
# Optimised_model
optimised_model$prevalence <- optimised_model$I + optimised_model$T
#optimised_model$prevalence
# Plotting
plot2 <- ggplot() + geom_line(data = optimised_model,
aes(x = time, y = prevalence)) +
geom_point(data = covid_19_data, aes(x = time, y = new_cases), colour = "red" ) +
xlab("Times(days)") + ylab("No. of infection") + labs(title =
paste("Calibration of SIR model with optimised value ")) + ylim(0,30000)
plot2
我能够根据输出让您的模型运行
different parameters
。此外,我还使用了maximum likelihood estimation
,并且它与covid data
配合得很好美元价值 [1] 25002879441
美元计数 函数梯度 81纳
$convergence [1] 0
$message 空的
相关问题 更多 >
编程相关推荐