Расчет вероятности с использованием моделирования - PullRequest
1 голос
/ 24 мая 2019

Пусть Xi ~ U (0,30) - случайные величины. Если взять выборку с n = 12, то нам интересно знать вероятность того, что доля будет больше 18, то есть $ P (\ overline X_ {12}> 18) $

Без использования симуляции и применения CLT, ответ .1150

Вот мой подход для реализации этого в R с использованием симуляции:

SimProb<-function(N)
{
n=12

M<-matrix(runif(1,0,30),N,n)
rowMeann<-rowMeans(M)

for(i in 1:N)
{
  if(rowMeann[i]>18)
    c=cumsum(rowMeann[i])
    c

}
prob<-1-c
return(prob)
}

Код не показывает ошибок, но не работает должным образом.

Когда я проверял, получается c= 6.083532, чего не может быть.

Для различных значений N, SimProb возвращает только отрицательные значения, я не понимаю, почему.

Может ли кто-нибудь помочь мне?

1 Ответ

2 голосов
/ 24 мая 2019

Вот пошаговое решение.

  1. Для создания одного образца мы можем использовать runif(12, 0, 30).
  2. Соответствующее среднее значение выборки тогда составляет mean(runif(12, 0, 30)).
  3. Что касается оценки истинной вероятности, нам нужно смоделировать множество подобных случаев, например, с помощью

replicate(mean(runif(12, 0, 30)), n = 10000)
  1. Затем мы хотим найти (число раз mean(runif(12, 0, 30)) больше 18) / 10000, что можно сделать с помощью

set.seed(1)
mean(replicate(mean(runif(12, 0, 30)), n = 10000) > 18)
# [1] 0.1163

что действительно очень близко к вашему указанному значению.

...