Poniżej funkcji jest funkcją, która wykorzystuje dystrybucję, aby wypełnić matrycę z wartościami.

library(tidyverse)

occ_simulation <- function(nyears, lambda, alpha, beta){
  
  data_matrix <- matrix(, nrow = nyears, ncol = 6)
  
  for (z in 1:nyears){
    data_matrix[z][1] <- z
  }
  
  for (yr in 1:nyears){
    
    poisson_sim = rpois(1, lambda)
    
    for (number_of_events in poisson_sim){
      
      if (number_of_events == 1){
        
        beta_sim = rbeta(1, alpha, beta)
        data_matrix[yr, 2] <- beta_sim
        
      } else if (number_of_events == 2){
        
          for (i in 2:3){
            
            beta_sim = rbeta(1, alpha, beta)
            data_matrix[yr, i] <- beta_sim
            
          }
        
      } else if (number_of_events == 3){
          
          for (i in 2:4){
            
            beta_sim = rbeta(1, alpha, beta)
            data_matrix[yr, i] <- beta_sim
        
          }
        
      } else if (number_of_events == 4){
        
          for (i in 2:5){
            
            beta_sim = rbeta(1, alpha, beta)
            data_matrix[yr, i] <- beta_sim
        
          }
          
      } else{
        
          for (i in 2:6){
            
            beta_sim = rbeta(1, alpha, beta)
            data_matrix[yr, i] <- beta_sim
        }
    
      }
      
    }
    
  }
  
  sorted_matrix <- cbind(data_matrix[,1],t(apply(data_matrix[,2:6],1,function(x) sort(x))))
  print(sorted_matrix)
  
}


manual = occ_simulation(10, 10, 2, 20)

Na przykład matryca wyjściowa tej funkcji jest:

      [,1]        [,2]       [,3]       [,4]       [,5]       [,6]
 [1,]    1 0.083134569 0.08617405 0.09887510 0.11772536 0.22531132
 [2,]    2 0.031942297 0.05572298 0.13227172 0.13373033 0.18225673
 [3,]    3 0.034385791 0.05340521 0.06165728 0.08298166 0.09168579
 [4,]    4 0.051670957 0.08783456 0.10290313 0.11267966 0.14254834
 [5,]    5 0.005269822 0.01229135 0.03251302 0.03560609 0.12144208
 [6,]    6 0.059678131 0.06291472 0.07521237 0.08371512 0.17253282
 [7,]    7 0.020974306 0.03211666 0.03951780 0.12363214 0.12707027
 [8,]    8 0.066050034 0.09113262 0.11433074 0.11642412 0.19931177
 [9,]    9 0.042327058 0.08072802 0.15232605 0.17718338 0.19237172
[10,]   10 0.034537165 0.07571227 0.09081958 0.11202394 0.11799924

Zastanawiałem się, w jaki sposób będę w stanie również wdrożyć kreśleć do mojej funkcji, dzięki czemu otrzymuję pierwszą kolumnę matrycy jako wartości osi X, a następnie wiersz punktów wykreślonych zgodnie z ich wartością X oś Y.

Na przykład w przypadku wartości x 1, będę miał 5 punktów wykreślonych bezpośrednio nad nim, te 5 punktów będących tymi w pierwszym rzędzie: 0.083134569, 0.08617405, 0.09887510, 0.11772536, 0.22531132. Dzięki!

0
Nhyi 11 październik 2020, 20:08

1 odpowiedź

Najlepsza odpowiedź

Spróbuj tego podejścia. Conatenate szkic wykresu przy użyciu tidyverse na końcu funkcji. Po zastosowaniu jej parametrów, działka zostanie zapisana w obiekcie manual. Tutaj kod:

library(tidyverse)
#Function
occ_simulation <- function(nyears, lambda, alpha, beta){
  
  data_matrix <- matrix(, nrow = nyears, ncol = 6)
  
  for (z in 1:nyears){
    data_matrix[z][1] <- z
  }
  
  for (yr in 1:nyears){
    
    poisson_sim = rpois(1, lambda)
    
    for (number_of_events in poisson_sim){
      
      if (number_of_events == 1){
        
        beta_sim = rbeta(1, alpha, beta)
        data_matrix[yr, 2] <- beta_sim
        
      } else if (number_of_events == 2){
        
        for (i in 2:3){
          
          beta_sim = rbeta(1, alpha, beta)
          data_matrix[yr, i] <- beta_sim
          
        }
        
      } else if (number_of_events == 3){
        
        for (i in 2:4){
          
          beta_sim = rbeta(1, alpha, beta)
          data_matrix[yr, i] <- beta_sim
          
        }
        
      } else if (number_of_events == 4){
        
        for (i in 2:5){
          
          beta_sim = rbeta(1, alpha, beta)
          data_matrix[yr, i] <- beta_sim
          
        }
        
      } else{
        
        for (i in 2:6){
          
          beta_sim = rbeta(1, alpha, beta)
          data_matrix[yr, i] <- beta_sim
        }
        
      }
      
    }
    
  }
  
  sorted_matrix <- cbind(data_matrix[,1],t(apply(data_matrix[,2:6],1,function(x) sort(x))))
  #Plot
  G <- sorted_matrix %>% as.data.frame %>%
    pivot_longer(-V1) %>%
    ggplot(aes(x=factor(V1),y=value,color=name,group=name))+
    geom_point()+
    labs(color='Column',x='V1')+
    theme_bw()
  return(G)
}
#Apply
manual = occ_simulation(10, 10, 2, 20)
manual

Wynik:

enter image description here

2
Duck 11 październik 2020, 17:13