Создание матрицы со случайными записями с заданными вероятностями в R

#r #matrix #statistics #probability

#r #матрица #Статистика #вероятность

Вопрос:

Я хочу создать матрицу 100×100 A с записью a_ij, которая выбирается случайным образом из набора {0,1} с P(a_ij = 1) = 0,2 и P (a_ij = 0) = 0,8.

Это то, что я пробовал до сих пор:

 n<-100
matrix<-matrix(0,100,100)
mynumbers<-c(1,0)
myprobs<-c(0.2,0.8)
for(i in 1:100){
  for (j in 1:100){
    matrix[i,j]<-sample(mynumbers, 1, replace=TRUE, prob=myprobs)
  }
}
matrix
  

Я не уверен, что размер выборки равен 1, но этот способ работает только в том случае, если я выбираю size = 1… Это правильный способ сделать это? Заранее благодарю вас!

Комментарии:

1. sample векторизовано. для этого вам не нужен цикл или выполните matrix[] <- rbinom(n, mynumbers, prob = myprobs)

Ответ №1:

Как отметил @akrun, есть гораздо более простые способы. Матрица 100 x 100 означает 10000 записей. prob = .2 говорит, что успех = 1 = P (a_ij = 1) = 0,2, size в данном случае означает одно испытание за раз. matrix Параметры должны быть довольно очевидными.

 set.seed(2020)
trials <- rbinom(n = 10000, size = 1, prob = .2)
my.matrix <- matrix(trials, nrow = 100, ncol = 100)
  

или для более точного соответствия вашему коду

 n <- 10000
mynumbers<-c(1,0)
myprobs<-c(0.2,0.8)
trials2 <- sample(x = mynumbers, 
                  size = n, 
                  replace = TRUE, 
                  prob = myprobs)
my.matrix2 <- matrix(trials2, nrow = 100, ncol = 100)
  

Комментарии:

1. Спасибо! В чем именно разница между моим способом и вашим вторым методом?

2. Наиболее важным отличием является удаление ненужного цикла for .