2017-10-21 67 views
1

Je suis actuellement en train d'exécuter une simulation en utilisant une distribution normale, il simule les temps entre les événements et est basé sur une analyse des données fournies (non pertinentes pour le problème). La simulation est créée comme ceci:Tracer plusieurs essais aléatoires dans R en utilisant ggplot2

SimProcess <- function(mu, sigma, T) { 

    ctimes <- c() # Array of arrival times, initially empty 
    t <- rnorm(1,mu, sqrt(sigma)) # Time of next arrival 
    while(t < T) { 
    ctimes <- c(ctimes, t) 
    dt = rnorm(1, mu, sqrt(sigma)) 
    if (dt<0){dt = 0} 
    t <- t + dt # sampling from the dataset 
    } 
    return(ctimes) 
} 

# Create a sample path of one run 
T <- 10 
# arrival times 
arrivals <- SimProcess(mu_t, var_t, T) 

Maintenant, je voudrais faire plusieurs de ces essais au hasard, puis les tracer dans une figure afin que nous puissions le comparer aux données fournies. 10 de ces essais seraient idéaux. J'ai essayé de le tracer comme ça mais malheureusement ça ne marche pas. J'ai peur de devoir utiliser reshape2 pour fondre les données des 10 essais car la longueur de ces vecteurs n'est pas la même. J'utilise ceci pour essayer de tracer toutes les lignes, cela ne marche pas comme il se doit.

x <- c(0, arrivals, T,rep(0,500-length(arrivals))) 
y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals))) 
plotdataNT = data.frame(x,y) 
p = ggplot(plotdataNT,aes(x,y)) 
plot(x,y,type = 's') 
j = 1 
for (j in 10){ 
    arrivals <- SimProcess(mu_t,var_t,T) 
    x <- c(0, arrivals, T,rep(0,500-length(arrivals))) 
    y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals))) 
    p = p + geom_step(mapping = aes (x,y)) 
} 

Edit: En fin de compte, je figuered dehors, parce que j'utilisé 10 au lieu de 01h10 il ne fonctionne pas correctement et j'ai eu aussi des erreurs les plus minuscules. Ceci a fini par être la solution:

arrivals <- SimProcess(mu_t,var_t,T) 
NT <- length(arrivals) 
x <- c(0, arrivals, T,rep(0,correction-length(arrivals))) 
y <- c(0:length(arrivals), length(arrivals),rep(0,correction-length(arrivals))) 
plotdataNT = data.frame(x,y) 
p = ggplot(plotdataNT,aes(x,y)) + geom_step(mapping = aes (x,y)) 
jk = 1 
runs = 25 
colourvec = rainbow(runs) 
for (jk in 1:runs){ 
    arrivals <- SimProcess(mu_t,var_t,T) 
    x <- c(0, arrivals, T,rep(0,correction-length(arrivals))) 
    y <- c(0:length(arrivals), length(arrivals),rep(0,correction-length(arrivals))) 
    newdata = data.frame(x,y) 
    p = p + geom_step(mapping = aes (x,y),newdata,colour = colourvec[jk]) 
} 
p = p + scale_x_continuous(name = "Time in days") + scale_y_continuous(name = "Amount of claims") 
p 

Il en résulte des 26 échantillons aléatoires tracés dans un diagramme en plusieurs couleurs, il représente un procédé avec les étapes de temps aléatoires selon la gamma, la distribution normale ou lognormale. La réponse ci-dessous est un exemple plus clair de ce que je voulais dire. Si quelqu'un sait comment faire cela avec reshape2 d'une manière plus efficace, je serais également heureux de le savoir.

+0

"ne fonctionne pas" - qu'est-ce que cela signifie? S'il vous plaît lire: https://stackoverflow.com/help/mcve –

+0

Quelle est votre sortie attendue? –

Répondre

0

Deux solutions:

for (j in 1:10) { 
    arrivals <- SimProcess(mu_t,var_t,T) 
    x <- c(0, arrivals, T,rep(0,500-length(arrivals))) 
    y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals))) 
    xy <- data.frame(x,y) 
    p = p + geom_step(data=xy, mapping=aes(x,y)) 
} 
print(p) 

enter image description here

for (j in 1:10) { 
    arrivals <- SimProcess(mu_t,var_t,T) 
    x <- c(0, arrivals, T,rep(0,500-length(arrivals))) 
    y <- c(0:length(arrivals), length(arrivals),rep(0,500-length(arrivals))) 
    xy <- data.frame(x,y) 
    p = p + geom_step(mapping=aes_string(x,y)) 
} 
print(p) 
+0

Merci beaucoup, à la fin je l'ai mis en œuvre comme ça et ça a bien fonctionné! – Gijsv