그래서 동전 던지기 게임을 시뮬레이션하려고합니다. 돈을 두 배로 늘리면 머리를 얻을 수 있고, 절반이 있다면 이야기가 있습니다. 그리고 x 돈으로 시작한다면 n이 던진 후에 얻을 수있는 것을보고 싶습니다.코인 토스 게임 in R
그러나이 문제를 좋은 방법으로 처리하는 방법은 모르겠지만 for 루프를 n으로하지 않아도됩니다.
이렇게하려면 몇 가지 방법이 있습니까?
그래서 동전 던지기 게임을 시뮬레이션하려고합니다. 돈을 두 배로 늘리면 머리를 얻을 수 있고, 절반이 있다면 이야기가 있습니다. 그리고 x 돈으로 시작한다면 n이 던진 후에 얻을 수있는 것을보고 싶습니다.코인 토스 게임 in R
그러나이 문제를 좋은 방법으로 처리하는 방법은 모르겠지만 for 루프를 n으로하지 않아도됩니다.
이렇게하려면 몇 가지 방법이 있습니까?
sample
을 사용하면 times 0.5
및 times 2
의 목록을 만들 수 있습니다.
sample_products = sample(c(0.5, 2), 100, replace = TRUE)
> sample_products
[1] 0.5 2.0 0.5 2.0 2.0 0.5 2.0 0.5 2.0 2.0 0.5 0.5 0.5 0.5 2.0 2.0 0.5 0.5
[19] 2.0 2.0 0.5 0.5 0.5 2.0 2.0 2.0 2.0 0.5 0.5 2.0 2.0 2.0 2.0 2.0 2.0 0.5
[37] 2.0 2.0 2.0 0.5 2.0 2.0 0.5 0.5 0.5 2.0 0.5 2.0 2.0 0.5 2.0 2.0 2.0 2.0
[55] 0.5 2.0 0.5 2.0 0.5 0.5 0.5 2.0 2.0 2.0 2.0 0.5 2.0 0.5 0.5 2.0 0.5 0.5
[73] 0.5 2.0 0.5 0.5 0.5 2.0 2.0 0.5 2.0 0.5 0.5 0.5 2.0 2.0 2.0 2.0 0.5 0.5
[91] 2.0 0.5 0.5 0.5 0.5 0.5 0.5 0.5 2.0 0.5
및 해당 제품의 누적 효과를 얻을 수 :
cumulative_prod = prod(sample_products)
을하고 시작 돈이 포함
start_money = 1000
new_money = cumulative_prod * start_money
큰 샘플링 크기에, cumulative_prod
이 1
으로 수렴 할 것이다하는 것으로, 공정한 동전 (어느 sample
)입니다.
cumulative_prod는 1로 수렴하지 않습니다! 간단한 무작위 걸음은 분포가 정규 분포로 수렴합니다. 덧셈 대신에 곱하기 때문에, cumulative_prod는 1을 중심으로하는 로그 정규 분포에 수렴 할 것입니다. – shadow
위의 텍스트에서 Whe가 의미론을 좀 더 띄고 있습니다. 위의 텍스트에서 "converge to 1"은 기대 값 이 작은 예제에서는 통계 용어에서 길을 잃지 않고 유지하는 것으로 충분하다고 생각합니다. –
좋습니다. 너가 부당한 동전을 사용할 경우, 나는 지적했다. (C (0.5,2), Nsims, = TRUE, prob = c (.51, .49))를 대체하면,이 예제는 0 s.s로 수렴하게된다. – shadow
당신이 돌이 여러 번 반복
n = 10
toss <- round(runif(n),0)
toss[toss == 0] = -1
toss <- 2^toss
Reduce(x = toss,'*')
이 가장 좋은 방법은 (내가 할 수있는 더 나은 방법이 많이있다 확신), 그럼에도 불구하고, 당신이 할 수없는을 실행할 수있는 경우 매우 시작 지점으로 그것을 고려하는 것은
> set.seed(1)
> x <- 100 # amount of money
> N <- 10 #number of throws
> TH <- sample(c("H", "T"), N, TRUE) # Heads or Tails, drawin "H" or "T" with same probability
> sum(ifelse(TH=="H", 2*x, 0.5*x)) # final amount of money
[1] 1100
또한이 인수로 돈 x
의 초기 anount과 시련의 수를받는 함수를 작성할 수하는 방법을 이해하는 N
> head.or.tails <- function(x, N){
TH <- sample(c("H", "T"), N, TRUE) # Heads or Tails
sum(ifelse(TH=="H", 2*x, 0.5*x)) # final amount of money
}
>
> set.seed(1)
> head.or.tails(100, 10)
[1] 1100
ifelse
부분을 피하려면 sample(c("H", "T"), N, TRUE)
대신 sample(c(0.5, 2), 100, replace = TRUE)
을 쓰고 @Paul Hiemstra answer를 참조하십시오.
이런 종류의 일로 머리를 쓰려면 로그 공간에서 작업해야합니다. 즉, 승리를 위해 하나를 추가하고 손실을 위해 하나를 빼는 것입니다. 다른 사람들처럼 @, 즉 폴의 대답을 할 수 있습니다.
y <- sample(c(-1,1), 100, replace=TRUE)
plot(cumsum(y), type="s")
당신은 당신이 단지 수 있습니다 '상금'로 다시 변환 할 경우 :
plot(2^cumsum(y)*start_money, type="s", log="y", xlab="Round", ylab="Winnings")
이 매우 유사하지만, y 축이 상금에있을 것입니다.
이와 같은 확률 론적 과정을 처음 접한다면, "승리"또는 "잃는"줄무늬를 많이 볼 수 있습니다. 당신은 그들이 얼마나 오래보고 싶은 경우, rle
기능은 예를 들어, 여기에 유용 할 수 있습니다 :
table(rle(y)$len)
은 놀라 울 정도로 긴 얻을 수있는 이러한 실행의 길이의 주파수를 인쇄합니다.당신은 아마 같은 "모양"을 참조하십시오 더 큰 샘플 (즉, 1000 개 샘플 이상)와 함께 작동해야하지만
plot(table(rle(y)$len)/length(y))
points(1:15, dnbinom(1:15, 1, 0.5), col=2)
: 당신이 어디에서 오는지 확인하기 위해 음 이항 분포와 함께 놀 수 있었다.
'샘플'사용은 어떻게됩니까? –
그래, 'sample (c (0,1), n, replace = TRUE)'를 사용하여 내 번호를 얻을 수 있었다. 그리고'* 2 + 0.5'와 x를 곱하면됩니까? – Coolcrab