Октябрь 20

Решение задачи на теорвер в R

В предыдущей заметке мы говорили о непрерывных распределениях, однако при работе с качественными признаками мы имеем дело с дискретными распределениями. Как известно, в области качества достаточно часто используется биноминальное распределение (например, Np-карта Шухарта). Рассмотрим пример практической задачи на это распределение.

Постановка задачи

Имеет тест на 45 вопросов по 4 варианта ответа в каждом. Только один вариант верный.Тест разбит на 3 блока по 15 вопросов. За правильные ответы на вопросы из 1-го блока начисляется 1 балл, из 2-го блока – 2 балла, из 3-го блока – 3 балла, и соответственно, максимальный балл, который можно набрать равен 90. Определить вероятность сдачи теста, тыкая ответы наугад, при условии, что для успешной сдачи нужна набрать минимум 61 балл.

Решение

Собственно, решение задачи основано на знании формулы Бернулли и понимания биноминального распределения.

Функция вероятности для биноминального распределения в R имеет вид dbinom(x, size, prob, log = FALSE), остальные связанные функции:

где, соответственно: size – число попыток, prob – вероятность удачного исхода

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

Вероятность получить именно i правильных вариантов из пятнадцати вопросов с вероятностью 1/4 равна dbinom(i,15,0.25)

Как нетрудно догадаться, при таких условиях вероятность получить не более i правильных ответов равна pbinom(i,15,0.25), а более чем i правильных ответов 1-pbinom(i,15,0.25) или, в принципе то же самое, что считается точнее: pbinom(0,15,0.25,lower.tail = F).

Пример:

> dbinom(0,15,0.25) # Вероятность получить ноль правильных ответов
[1] 0.01336346
> pbinom(0,15,0.25) # Вероятность получить 0 и менее правильных ответов
[1] 0.01336346
> pbinom(0,15,0.25,lower.tail = F) # Вероятность получить более 0
[1] 0.9866365
> dbinom(1,15,0.25) # Вероятность получить ровно один правильный ответ
[1] 0.06681731
> pbinom(1,15,0.25) # Вероятность получить один и менее (0,1)
[1] 0.08018077
> dbinom(0,15,0.25)+dbinom(1,15,0.25) # Сумма вероятностей получить 0 и 1 ответ
[1] 0.08018077
> pbinom(1,15,0.25,lower.tail = F) # вероятность получить более 1 правильного ответа
[1] 0.9198192
# Инициируем переменную для ответа
P<-0
# В Z мы будем накапливать вероятности для исходов теста 0:90
Z<-data.frame(X=0:90,y=rep(0,91)) 

# Перебираем возможные варианты для каждой части теста
 for(i in 0:15) for (j in 0:15) for(k in 0:15) { 
   # считаем вероятность куммулятивно для каждой точки
   Z$y[i+2*j+3*k+1]<-Z$y[i+2*j+3*k+1]+dbinom(i,15,0.25)*dbinom(j,15,0.25)*dbinom(k,15,0.25) 
   # считаем куммулятивно вероятность ответить правильно наугад
   if(i+2*j+3*k>=61)   P<-P+dbinom(i,15,0.25)*dbinom(j,15,0.25)*dbinom(k,15,0.25) 
}
Z$cdf<-cumsum(Z$y)
cat("Ответ на задачу составляет: ",P)
## Ответ на задачу составляет:  1.73944e-08

Таким образом, вероятность набрать 61 балл наугад составляет 1.73944e-08.

Представим это графически.

oldpar<-par(mfrow=c(2,1))
plot(Z$y~Z$X,main="Функция вероятности f(x)",xlab="x",ylab="f(x)",pch=19,cex=0.8,col="blue")
points(Z$y[62:91]~Z$X[62:91],cex=0.9,col="red",pch=19)
text(70,0.02,expression(sum(f[i],i==61,90)==1.73944 %*% 10^{-8}))
plot(Z$cdf~Z$X,main="Функция распределения F(x)",xlab="x",ylab="f(x)",pch=19,cex=0.8,col="blue")
abline(h=Z$cdf[61],v=60,col="darkgrey",lty=2)
points(Z$cdf[61]~Z$X[61],cex=0.9,col="red",pch=19)
text(70,0.8,expression(1-F(60)==1.73944 %*% 10^{-8}))

84321d55-9e0c-45df-a743-567e6aa551c7

par(oldpar)
Обратите внимание! Это дискретное распределение, поэтому рисовать его сплошной линей категорически неверно.

На графиках написаны формулы расчета вероятностей. Продемонстрируем это в R:

sum(Z$y[62:91]) # sum(f(t),t = 61...90)
## [1] 1.73944e-08
1-Z$cdf[61]  # 1-F(60); 61, а не 60, потому как нумерация в массиве начинается с 1
## [1] 1.73944e-08

Вывод

Таким образом, понимание основ теории вероятности и базовые знания R позволяют решать и такие задачи. Смысл такой задачи, надеюсь, понятен.


Метки:

Опубликовано 20.10.2016 Тушавин В.А. в категории "Изучаем R и RStudio