수색…


소개

R 언어는 일반적으로 통계 분석에 사용됩니다. 따라서 무작위 화를위한 강력한 옵션 집합이 포함되어 있습니다. 확률 분포에서 샘플링하는 것에 대한 특정 정보는 분산 함수에 대한 문서를 참조하십시오.

비고

다른 프로그래밍 언어를 사용하는 사용자는 이전에 경험했던 것과 동일한 rand 함수가 없기 때문에 혼란 스러울 수 있습니다. 기본적인 난수 생성은 각 배포판에 대한 r* 계열의 패밀리를 사용하여 수행됩니다 (위의 링크 참조). 범위에서 균일하게 그려지는 난수는 "임의의 균일"을 위해 runif 사용하여 생성 할 수 있습니다. 이것은 또한 "실행하다"와 같이 의심스러워 보이기 때문에 새로운 R 사용자를 찾아내는 것은 종종 어렵습니다.

무작위 추첨 및 순열

sample 명령을 사용하여 대체가 있거나없는 대체 항아리에서 그림을 그리거나 임의 순열을 만드는 것과 같은 고전적인 확률 문제를 시뮬레이션 할 수 있습니다.

이 예제에서 set.seed 는 예제 코드가 재현 set.seed 을 확인하는 데 사용됩니다. 그러나 sample 은 명시 적으로 set.seed 호출하지 않고도 작동합니다.

무작위 순열

가장 간단한 형식에서 sample 은 정수 벡터의 무작위 순열을 만듭니다. 이것은 다음과 같이 수행 할 수 있습니다.

set.seed(1251)
sample(x = 10)

[1]  7  1  4  8  6  3 10  5  2  9

다른 인수가 주어지지 않으면 sample 은 1에서 x 까지 벡터의 무작위 순열을 반환합니다. 이것은 데이터 프레임의 행 순서를 임의화할 때 유용 할 수 있습니다. 시험을 위해 임의 화 테이블을 만들 때 또는 분석을 위해 임의의 행 하위 집합을 선택할 때 일반적인 작업입니다.

library(datasets)
set.seed(1171)
iris_rand <- iris[sample(x = 1:nrow(iris)),]

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

> head(iris_rand)
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
145          6.7         3.3          5.7         2.5  virginica
5            5.0         3.6          1.4         0.2     setosa
85           5.4         3.0          4.5         1.5 versicolor
137          6.3         3.4          5.6         2.4  virginica
128          6.1         3.0          4.9         1.8  virginica
105          6.5         3.0          5.8         2.2  virginica

대체하지 않고 그립니다.

sample 사용하여 교체가 있거나없는 세트에서 도면을 시뮬레이션 할 수도 있습니다. 대체하지 않고 샘플링하려면 (기본값) 샘플을 그려야하는 세트와 그리기 횟수를 제공해야합니다. 그려지는 집합은 벡터로 주어진다.

set.seed(7043)
sample(x = LETTERS,size = 7)

[1] "S" "P" "J" "F" "Z" "G" "R"

size 에 대한 인수가 x 에 대한 인수의 길이와 같은 경우 임의의 순열을 작성한다는 점에 유의하십시오. 또한 교체하지 않고 샘플링을 수행 할 때 x 의 길이보다 큰 크기를 지정할 수 없습니다.

set.seed(7305)
sample(x = letters,size = 26)

[1] "x" "z" "y" "i" "k" "f" "d" "s" "g" "v" "j" "o" "e" "c" "m" "n" "h" "u" "a" "b" "l" "r" "w" "t" "q" "p"

sample(x = letters,size = 30)
Error in sample.int(length(x), size, replace, prob) : 
  cannot take a sample larger than the population when 'replace = FALSE'

이로 인해 우리는 교체를 통해 그림을 그려냅니다.

교체로 그립니다.

대체가 포함 된 집합에서 무작위로 그리려면 sample replace 인수를 사용합니다. 기본적으로 replaceFALSE 입니다. TRUE 설정하면 그려지는 세트의 각 요소가 최종 결과에서 두 번 이상 나타날 수 있습니다.

set.seed(5062)
sample(x = c("A","B","C","D"),size = 8,replace = TRUE)

[1] "D" "C" "D" "B" "A" "A" "A" "A"

무승부 확률 변경

기본적으로 sample 을 사용할 때 각 요소를 선택할 확률은 동일하다고 가정합니다. 이것을 기본 "항아리"문제로 간주하십시오. 아래 코드는 항아리에서 색깔이있는 대리석을 20 번 그린 후 색상을 적어 둔 다음 대리석을 항아리에 다시 넣는 것과 같습니다. 항아리에는 빨강, 파랑, 녹색의 대리석이 각각 하나씩 들어있어 각 색상을 그릴 확률은 1/3입니다.

set.seed(6472)
sample(x = c("Red","Blue","Green"),
       size = 20,
       replace = TRUE)

대신에 동일한 작업을 수행하려고했지만 urn에는 붉은 색 대리석 2 개, 푸른 대리석 1 개, 녹색 대리석 1 개가 들어 있습니다. 하나의 옵션은 우리가 x 에 보내는 인수를 변경하여 추가 Red 를 추가하는 것입니다. 그러나 더 나은 선택은 sample prob 인수를 사용하는 sample 입니다.

prob 인수는 각 요소를 그릴 확률이있는 벡터를 허용합니다. 위의 예에서 빨간색 대리석을 그리는 확률은 1/2이 될 것이지만 파란색 또는 녹색 대리석을 그릴 확률은 1/4이됩니다.

set.seed(28432)
sample(x = c("Red","Blue","Green"),
       size = 20,
       replace = TRUE,
       prob = c(0.50,0.25,0.25))

반 직관적으로, prob 에 주어진 인수는 1로 합계 할 필요가 없습니다. R은 주어진 인수를 항상 1로 할 확률로 변환합니다. 예를 들어 위의 2 개의 Red, 1 Blue 및 1 Green의 예제를 고려해보십시오. 다음 코드를 사용하여 이전 코드와 동일한 결과를 얻을 수 있습니다.

set.seed(28432)
frac_prob_example <- sample(x = c("Red","Blue","Green"),
                            size = 200,
                            replace = TRUE,
                            prob = c(0.50,0.25,0.25))

set.seed(28432)
numeric_prob_example <- sample(x = c("Red","Blue","Green"),
                               size = 200,
                               replace = TRUE,
                               prob = c(2,1,1))

> identical(frac_prob_example,numeric_prob_example)
[1] TRUE

주요 제한 사항은 모든 확률을 0으로 설정할 수없고 그 중 어느 것도 0보다 작을 수 없다는 것입니다.

replaceFALSE 로 설정된 경우 prob 를 활용할 수도 있습니다. 이 상황에서, 각 요소가 그려진 후에 나머지 요소에 대한 prob 값의 비율은 다음 끌기의 확률을 제공합니다. 이 경우, 그리는 샘플 size 에 도달 할 수있는 0이 아닌 확률이 충분해야합니다. 예 :

set.seed(21741)
sample(x = c("Red","Blue","Green"),
       size = 2,
       replace = FALSE,
       prob = c(0.8,0.19,0.01))

이 예제에서 Red는 첫 번째 요소 (첫 번째 요소)에 그려집니다. 레드가 그린 확률은 80 %, 블루가 그린 확률은 19 %, 그리는 그린 확률은 1 %입니다.

다음 무승부를 위해 Red는 더 이상 항아리에 없습니다. 나머지 항목 중 확률의 합은 20 %입니다 (파란색의 경우 19 %, 녹색의 경우 1 %). 그 드로우에는 아이템이 파란색 (19/20)이 될 가능성이 95 %, 녹색 (1/20)이 5 % 확률이 있습니다.

씨를 놓기

set.seed 함수는 모든 randomization 함수에 대한 random seed를 설정하는 데 사용됩니다. R을 사용하여 재현 할 수있는 랜덤 화를 만들려면 먼저 set.seed 를 사용해야합니다.

set.seed(1643)
samp1 <- sample(x = 1:5,size = 200,replace = TRUE)

set.seed(1643)
samp2 <- sample(x = 1:5,size = 200,replace = TRUE)

> identical(x = samp1,y = samp2)
[1] TRUE

병렬 처리에는 다른 곳에서 더 자세히 설명 된 임의의 시드에 대한 특별한 처리가 필요합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow