library(MASS)
# set seed and create data vectors
#set.seed(98989) <- for replicating results of betas in 1-2 1-3
sample_size <- 200
sample_meanvector <- c(3, 4)
sample_covariance_matrix <- matrix(c(2, 1, 1, 2),
ncol = 2)
# create bivariate normal distribution
sample_distribution <- mvrnorm(n = sample_size,
mu = sample_meanvector,
Sigma = sample_covariance_matrix)
#Convert the datatype
df_sample_distribution <- as.data.frame(sample_distribution)
Is there a way to put this entire chunk of code in a loop and regenerate it for 500 times? Would be even better if i can store them somewhere.
CodePudding user response:
You might use replicate()
library(MASS)
out <- replicate(3, simplify = FALSE, {sample_size <- 200
sample_meanvector <- c(3, 4)
sample_covariance_matrix <- matrix(c(2, 1, 1, 2),
ncol = 2)
# create bivariate normal distribution
sample_distribution <- mvrnorm(n = sample_size,
mu = sample_meanvector,
Sigma = sample_covariance_matrix)
#Convert the datatype
df_sample_distribution <- as.data.frame(sample_distribution)
head(df_sample_distribution) # for shorter output
})
out
#> [[1]]
#> V1 V2
#> 1 3.195478 4.393699
#> 2 2.553590 5.065685
#> 3 2.822811 2.389559
#> 4 2.267116 4.076016
#> 5 1.659459 3.830608
#> 6 1.377554 4.009023
#>
#> [[2]]
#> V1 V2
#> 1 2.8850139 3.107203
#> 2 3.0313680 5.163229
#> 3 3.8649482 4.594017
#> 4 3.2747060 4.085805
#> 5 -0.1640264 3.628542
#> 6 3.6504855 4.747372
#>
#> [[3]]
#> V1 V2
#> 1 1.3230817 4.075396
#> 2 3.6049470 6.293968
#> 3 6.1211276 7.673592
#> 4 5.2955379 6.736665
#> 5 0.9032304 2.606501
#> 6 3.6034566 3.880563
Created on 2022-12-04 with reprex v2.0.2
CodePudding user response:
Yes, you can put the code in a loop and generate the sample data 500 times. Here is an example of how you can do that:
# set the number of iterations
num_iterations <- 500
# create an empty list to store the generated data
generated_data <- list()
# loop through the number of iterations
for (i in 1:num_iterations) {
# set the seed
set.seed(i)
# create the sample data using the mvrnorm function
sample_distribution <- mvrnorm(n = sample_size,
mu = sample_meanvector,
Sigma = sample_covariance_matrix)
# convert the data to a data frame
df_sample_distribution <- as.data.frame(sample_distribution)
# store the generated data in the list
generated_data[[i]] <- df_sample_distribution
}
# you can access the generated data using the list index, for example:
generated_data[[1]] # will return the first generated data
You can also store the generated data in a data frame by using the rbind function to combine the data frames in the list into a single data frame. Here is an example of how you can do that:
# create an empty data frame to store the generated data
generated_data_df <- data.frame()
# loop through the generated data list
for (i in 1:num_iterations) {
# bind the data frame at the current index to the generated data data frame
generated_data_df <- rbind(generated_data_df, generated_data[[i]])
}
# generated_data_df will now contain all the generated data
Alternatively, you can use the do.call and rbind functions to combine the data frames in the list into a single data frame in a single step, like this:
# create the data frame using the do.call and rbind functions
generated_data_df <- do.call(rbind, generated_data)
CodePudding user response:
Yes, you can use a for loop to generate the data multiple times. Here is an example:
# set seed and create data vectors
set.seed(98989)
sample_size <- 200
sample_meanvector <- c(3, 4)
sample_covariance_matrix <- matrix(c(2, 1, 1, 2),
ncol = 2)
# create a list to store the data frames
df_list <- list()
# loop to generate the data
for (i in 1:500) {
# create bivariate normal distribution
sample_distribution <- mvrnorm(n = sample_size,
mu = sample_meanvector,
Sigma = sample_covariance_matrix)
# Convert the data type
df_sample_distribution <- as.data.frame(sample_distribution)
# add the data frame to the list
df_list[[i]] <- df_sample_distribution
}
This code will generate 500 data frames, each containing the bivariate normal distribution data. The data frames will be stored in the df_list list. You can access each data frame by indexing the list, for example df_list[[1]] will give you the first data frame.