2017-02-02 2 views
0

Ich versuche herauszufinden, wie Simulationen mit variierenden Parameterwerten während der Verwendung von deSolve ausgeführt werden können. Ich bin sehr neu in R und habe Schwierigkeiten, die Fehler zu beheben, die ich bekomme. Ich habe einen sehr einfachen Satz von Differentialgleichungen erstellt und versuche eine For-Schleife aus einer gleichmäßigen Verteilung meiner Parameter zu ziehen.Laufende Simulationen variierende Parameterwerte in deSolve

My Model:

sir <- function(time, state, parameters) { 

with(as.list(c(state, parameters)), { 

dS <- -beta1 * (S * I)/N 
dI <- beta1 * (S * I)/N - gamma1 * I 
dR <-     gamma1 * I 

return(list(c(dS, dI, dR))) 
}) 
} 
init  <- c(S = 99999, I = 1, R = 0) 

Versuch for-Schleife:

outlist <- list() 
plist <- cbind(beta1 = runif(30, min = .1, max = .9), 
      gamma1 = runif(30, min = .1, max = .9)) 
for(i in 1:nrow(plist)) 
outlist[[i]] <- ode(y = init, times = times, func = sir, parms = plist[i]) 
plot(out, outlist) 

ich die folgende Störung erhalte:

Error in eval(expr, envir, enclos) : object 'beta1' not found

ich Hilfe sehr schätzen Sie bereitstellen können,

+1

Sie zeigen nicht Ihren gesamten Code. Sie haben dem Parameter "beta1" in Ihrer Funktion keinen Wert zugewiesen, wie die Fehlermeldung impliziert. Sie sollten eine Zeile als 'beta1 <- Parameter [1]' in die Funktion vor dem 'with' einfügen. Ähnlich für 'gamma1' und' N'. Und wo sind die Objekte 'mal' und' N'? Und Sie brauchen '{' und '}' um den Körper der For-Schleife. Auch fehlt "out". Und jetzt gebe ich auf. – Bhas

Antwort

0

Ihr Code weist alle möglichen Fehler auf. Mehr noch, dass ich in meinen Kommentaren notiert habe. Ein sehr typischer Fehler im R-Code: Sie verwenden plist[i], um die Zeile i von plist zu verwenden. Sie sollten plist[i,] verwenden.

Mit einem Sprung auf Ihre Sachen:

library(deSolve) 

sir <- function(time, state, parameters) { 

    beta1 <- parameters[1] 
    gamma1 <- parameters[2] 
    with(as.list(c(state, parameters)), { 

    dS <- -beta1 * (S * I)/N 
    dI <- beta1 * (S * I)/N - gamma1 * I 
    dR <-     gamma1 * I 
    return(list(c(dS, dI, dR))) 
    }) 
} 

init <- c(S = 99999, I = 1, R = 0) 
times <- seq(1,5,.5) # trial 
N <- 10000000 # having a guess 
outlist <- list() 
plist <- cbind(beta1 = runif(30, min = .1, max = .9), 
      gamma1 = runif(30, min = .1, max = .9)) 

plist[c(1,2)] 
for(i in 1:nrow(plist)) { 
    outlist[[i]] <- ode(y = init, times = times, func = sir, parms = plist[i,]) 
} 

# just display the first item 
outlist[[1]] 

Es liegt an Ihnen zu einer Variablen out zuweisen und fortzusetzen.