Поиск по сайту:

Как взять образцы с помощью sample() в R?


Давайте разберемся с одной из часто используемых функций, sample() в R. В анализе данных отбор образцов данных — наиболее распространенный процесс, выполняемый аналитиками. Чтобы изучить и понять данные, иногда лучше всего взять выборку, и это в основном верно в случае больших данных.

R предлагает стандартную функцию sample() для получения выборки из наборов данных. Многие проблемы бизнеса и анализа данных потребуют выборки из данных. Случайные данные генерируются в этом процессе с заменой или без нее, что показано в следующих разделах.

Заходим в тему!!!

Синтаксис sample() в R

sample(x, size, replace = FALSE, prob = NULL)

  • x – вектор или набор данных.
  • размер – размер выборки.
  • заменить — с заменой или без замены значений.
  • заменить — с заменой или без замены значений.
  • prob — веса вероятности

Взятие проб с заменой

Вы спросите, а что такое взятие проб с заменой?

Что ж, пока вы берете выборки из списка или данных, если вы укажете replace=TRUE или T, то функция разрешит повторение значений.

Следуйте приведенному ниже примеру, который ясно объясняет случай.

#sample range lies between 1 to 5
x<- sample(1:5)
#prints the samples
x
Output -> 3 2 1 5 4


#samples range is 1 to 5 and number of samples is 3
x<- sample(1:5, 3)
#prints the samples (3 samples)
x
Output -> 2 4 5


#sample range is 1 to 5 and the number of samples is 6
x<- sample(1:5, 6)
x
#shows error as the range should include only 5 numbers (1:5)
Error in sample.int(length(x), size, replace, prob) : 
  cannot take a sample larger than the population when 'replace = FALSE'

#specifing replace=TRUE or T will allow repetition of values so that the function will generate 6 samples in the range 1 to 5. Here 2 is repeated.
 
x<- sample(1:5, 6, replace=T)
Output -> 2 4 2 2 4 3

Образцы без замены в R

В этом случае мы будем брать образцы без замены. Вся концепция показана ниже.

В этом случае без замены используется функция replace=F, которая не допустит повторения значений.

#samples without replacement 
x<-sample(1:8, 7, replace=F)
x
Output -> 4 1 6 5 3 2 7
x<-sample(1:8, 9, replace=F)
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'


#here the size of the sample is equal to range 'x'. 
x<- sample(1:5, 5, replace=F)
x
Output -> 5 4 1 3 2

Отбор проб с помощью функции set.seed()

Как вы можете заметить, когда вы берете образцы, они будут случайными и каждый раз будут меняться. Чтобы избежать этого или если вам не нужны каждый раз разные образцы, вы можете использовать функцию set.seed().

set.seed() — функция set.seed выдаст ту же последовательность, когда вы ее запустите.

Этот случай проиллюстрирован ниже, выполните приведенный ниже код, чтобы каждый раз получать одни и те же случайные выборки.

#set the index 
set.seed(5)
#takes the random samples with replacement
sample(1:5, 4, replace=T)
2 3 1 3

set.seed(5)
sample(1:5, 4, replace=T)
2 3 1 3

set.seed(5)
sample(1:5, 4, replace=T)
2 3 1 3

Взять образец из набора данных

В этом разделе мы собираемся создать образцы из набора данных в Rstudio.

Этот код возьмет 10 строк в качестве образца из набора данных «ToothGrowth» и отобразит их. Таким образом, вы можете взять образцы необходимого размера из набора данных.

#reads the dataset 'Toothgrwoth' and take the 10 rows as sample
df<- sample(1:nrow(ToothGrowth), 10)
df
--> 53 12 16 26 37 27  9 22 28 10
#sample 10 rows
ToothGrowth[df,]

    len supp dose
53 22.4   OJ  2.0
12 16.5   VC  1.0
16 17.3   VC  1.0
26 32.5   VC  2.0
37  8.2   OJ  0.5
27 26.7   VC  2.0
9   5.2   VC  0.5
22 18.5   VC  2.0
28 21.5   VC  2.0
10  7.0   VC  0.5

Взятие образцов из набора данных с помощью функции set.seed()

В этом разделе мы собираемся использовать функцию set.seed() для получения образцов из набора данных.

Выполните приведенный ниже код, чтобы сгенерировать выборки из набора данных с помощью set.seed().

#set.seed function
set.seed(10)
#taking sample of 10 rows from the iris dataset. 
x<- sample(1:nrow(iris), 10)
x
--> 137  74 112  72  88  15 143 149  24  13
#displays the 10 rows
iris[x, ]
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
137          6.3         3.4          5.6         2.4  virginica
74           6.1         2.8          4.7         1.2 versicolor
112          6.4         2.7          5.3         1.9  virginica
72           6.1         2.8          4.0         1.3 versicolor
88           6.3         2.3          4.4         1.3 versicolor
15           5.8         4.0          1.2         0.2     setosa
143          5.8         2.7          5.1         1.9  virginica
149          6.2         3.4          5.4         2.3  virginica
24           5.1         3.3          1.7         0.5     setosa
13           4.8         3.0          1.4         0.1     setosa

Вы получите одни и те же строки при многократном выполнении кода. Значения не изменятся, так как мы использовали функцию set.seed().

Генерация случайной выборки с использованием sample() в R

Что ж, разберемся в этом понятии с помощью задачи.

Проблема: Сувенирный магазин решил преподнести сюрприз одному из своих покупателей. Для этого они собрали несколько имен. Суть в том, чтобы выбрать случайное имя из списка.

Подсказка: используйте функцию sample() для генерации случайных выборок.

Как вы можете видеть ниже, каждый раз, когда вы запускаете этот код, он генерирует случайную выборку имен участников.

#creates a list of names and generates one sample from this list
sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Rossie"
 sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Jolie"

sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "jack"

sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Edwards"

sample(c('jack','Rossie','Kyle','Edwards','Joseph','Paloma','Kelly','Alok','Jolie'),1)
--> "Kyle"

Отбор проб путем установки вероятностей

С помощью приведенных выше примеров и концепций вы поняли, как можно генерировать случайные выборки и извлекать определенные данные из набора данных.

Некоторые из вас могут расслабиться, если я скажу, что R позволяет вам устанавливать вероятности, поскольку это может решить многие проблемы. Давайте посмотрим, как это работает, на простом примере.

Давайте подумаем о компании, которая может произвести 10 часов. Из этих 10 часов 20% оказались бракованными. Давайте проиллюстрируем это с помощью приведенного ниже кода.

#creates a probability of 80% good watches an 20% effective watches.
 sample (c('Good','Defective'), size=10, replace=T, prob=c(.80,.20))
 
"Good"      "Good"      "Good"      "Defective" "Good"      "Good"     
"Good"      "Good"      "Defective" "Good"  

Вы также можете попробовать различные корректировки вероятности, как показано ниже.

 sample (c('Good','Defective'), size=10, replace=T, prob=c(.60,.40))
 
--> "Good"      "Defective" "Good"      "Defective" "Defective" "Good"     
 "Good"      "Good"      "Defective" "Good"

Подведение итогов

В этом руководстве вы узнали, как создать выборку из набора данных, списка с заменой или без нее. Функция set.seed() полезна, когда вы генерируете одну и ту же последовательность сэмплов.

Попробуйте взять образцы из различных наборов данных, доступных в R, а также вы можете импортировать некоторые файлы CSV, чтобы взять образцы с корректировками вероятности, как показано.

Дополнительное исследование: документация R