В нашем курсе мы обсуждали несколько рандомизаторов (rnorm()
, rbeta()
и так далее). Но вернемся к более простому случаю. Сделаем одну выборку из множества, содержащего три элемента:
[1] 7 5 6
По умолчанию он выдает множество равное количеству объектов в векторе.
[1] 7
Error in sample.int(length(x), size, replace, prob): cannot take a sample larger than the population when 'replace = FALSE'
[1] 6 7 7 7
Можно задавать вероятности, с которыми рандомизатор вынимает то или иное значение (по умолчанию все исходы равновероятны):
.
5 6 7
0.3253 0.3338 0.3409
.
5 6 7
0.1023 0.2953 0.6024
Записи идентичны:
[1] 9 10 3 4 5 2 6 1 7 8
[1] 4 3 2 8 7 9 1 6 5 10
Чтобы фиксировать рандомизатор следует использовать set.seed()
. Посмотрите прекрасную работу Бена Мура на тему того, какие кто использует сиды на GitHub.
Иногда хочется, чтобы рандомизатор был одинаковый в R и Python, зачем и как это делать читайте в работе Гертьяна ван ден Бург: блог, гитхаб.
mpg <dbl> | cyl <dbl> | disp <dbl> | hp <dbl> | drat <dbl> | wt <dbl> | qsec <dbl> | vs <dbl> | am <dbl> | ||
---|---|---|---|---|---|---|---|---|---|---|
Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | 1 | 0 | |
Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 1.935 | 18.90 | 1 | 1 | |
Dodge Challenger | 15.5 | 8 | 318.0 | 150 | 2.76 | 3.520 | 16.87 | 0 | 0 | |
Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 3.570 | 14.60 | 0 | 1 | |
Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 2.770 | 15.50 | 0 | 1 | |
Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | |
Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 |
mpg <dbl> | cyl <dbl> | disp <dbl> | hp <dbl> | drat <dbl> | wt <dbl> | qsec <dbl> | vs <dbl> | am <dbl> | ||
---|---|---|---|---|---|---|---|---|---|---|
Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.70 | 0 | 1 | |
Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | |
Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | |
Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | 1 | 1 | |
Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | |
Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | 1 | 1 | |
Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | 1 | 1 |
Марковский процесс
Славная визуализация (спасибо за ссылку Марине Дубовой)
Возьмем наш датасет с погодой и отфильтруем только Сан Диего:
Давайте считать, что NA
— это солнце.
Визуализируем частоты разных погодных событий в Сан Диего:
Визуализируем матрицу последовательных переходов разных погодных событий:
data_frame(bigramma_1 = weather$events,
bigramma_2 = lead(weather$events, 1)) %>%
table() %>%
prop.table() %>%
as.data.frame() %>%
ggplot(aes(bigramma_1, bigramma_2, size = Freq, fill = Freq))+
geom_raster()+
geom_point()+
scale_fill_gradient(low="grey95", high="red")+
labs(title = 'Матрица переходов погодных событий в Сан Диего в январе')
Сделаем марковскую цепь и визуализируем ее граф:
MLE Fit
A 4 - dimensional discrete Markov Chain defined by the following states:
Fog, Rain, Rain , Thunderstorm, Sun
The transition matrix (by rows) is defined as follows:
Fog Rain Rain , Thunderstorm Sun
Fog 0.00000000 1.0000000 0.0000000 0.0000000
Rain 0.00000000 0.2222222 0.2222222 0.5555556
Rain , Thunderstorm 0.00000000 1.0000000 0.0000000 0.0000000
Sun 0.05263158 0.2631579 0.0000000 0.6842105
Теперь мы можем предсказать наше следующее состояние t2 перемножив матрицу начального состояния t1 (1×4) на матрицу переходов (4×4).
t2=t1×transitional matrix
Предположим, что наше начальное состояние — это дождь Rain
:
Fog Rain Rain , Thunderstorm Sun
[1,] 0 0.2222222 0.2222222 0.5555556
Понятное дело состояние t3 это обычное произведение состояния t2 и матрицы переходов:
t3=t2×transitional matrix=t1×transitional matrix×transitional matrix=t1×transitional matrix2
Используя полученную модель можно вычислите вероятность каждого из погодных событий на 7-ой день после дождя.
Fog Rain Rain , Thunderstorm Sun
[1,] 0.03005657 0.324639 0.07273401 0.5725704
Вообще-то, часто так бывает, что цепь сходиться на каком-то состоянии (состояние эквилибриум из домашнего задания) и дальше не изменяется. Давайте Визуализируем 40 состояний цепи, если начальное состояние — дождь.
[,1] [,2] [,3] [,4] [,5]
Fog 0 0.02923977 0.02650388 0.03035072 0.0296548
Rain 0.2222222 0.4178038 0.3039872 0.3386555 0.3214342
Rain , Thunderstorm 0.2222222 0.04938272 0.09284528 0.0675527 0.07525677
Sun 0.5555556 0.5035737 0.5766637 0.5634411 0.5736543
[,6] [,7] [,8] [,9] [,10]
Fog 0.03019233 0.03005657 0.03013529 0.03011125 0.03012316
Rain 0.327303 0.324639 0.325609 0.3251911 0.3253493
Rain , Thunderstorm 0.07142982 0.07273401 0.072142 0.07235756 0.07226468
Sun 0.5710748 0.5725704 0.5721137 0.5723401 0.5722628
[,11] [,12] [,13] [,14] [,15]
Fog 0.0301191 0.03012094 0.03012027 0.03012056 0.03012045
Rain 0.3252832 0.3253088 0.3252983 0.3253024 0.3253007
Rain , Thunderstorm 0.07229985 0.07228515 0.07229084 0.07228851 0.07228942
Sun 0.5722979 0.5722851 0.5722906 0.5722885 0.5722894
[,16] [,17] [,18] [,19] [,20]
Fog 0.03012049 0.03012048 0.03012048 0.03012048 0.03012048
Rain 0.3253014 0.3253011 0.3253012 0.3253012 0.3253012
Rain , Thunderstorm 0.07228905 0.0722892 0.07228914 0.07228916 0.07228915
Sun 0.5722891 0.5722892 0.5722891 0.5722892 0.5722892
[,21] [,22] [,23] [,24] [,25]
Fog 0.03012048 0.03012048 0.03012048 0.03012048 0.03012048
Rain 0.3253012 0.3253012 0.3253012 0.3253012 0.3253012
Rain , Thunderstorm 0.07228916 0.07228916 0.07228916 0.07228916 0.07228916
Sun 0.5722892 0.5722892 0.5722892 0.5722892 0.5722892
[,26] [,27] [,28] [,29] [,30]
Fog 0.03012048 0.03012048 0.03012048 0.03012048 0.03012048
Rain 0.3253012 0.3253012 0.3253012 0.3253012 0.3253012
Rain , Thunderstorm 0.07228916 0.07228916 0.07228916 0.07228916 0.07228916
Sun 0.5722892 0.5722892 0.5722892 0.5722892 0.5722892
[,31] [,32] [,33] [,34] [,35]
Fog 0.03012048 0.03012048 0.03012048 0.03012048 0.03012048
Rain 0.3253012 0.3253012 0.3253012 0.3253012 0.3253012
Rain , Thunderstorm 0.07228916 0.07228916 0.07228916 0.07228916 0.07228916
Sun 0.5722892 0.5722892 0.5722892 0.5722892 0.5722892
[,36] [,37] [,38] [,39]
Fog 0.03012048 0.03012048 0.03012048 0.03012048
Rain 0.3253012 0.3253012 0.3253012 0.3253012
Rain , Thunderstorm 0.07228916 0.07228916 0.07228916 0.07228916
Sun 0.5722892 0.5722892 0.5722892 0.5722892
df %>%
mutate(stage = 1:40) %>%
gather(events, value, Fog:Sun) %>%
ggplot(aes(stage, value, color = events))+
geom_line(show.legend = FALSE)+
directlabels::geom_dl(aes(label = events), method = "last.qp")+
labs(title = 'Марковская цепь погодных событий в Сан Диего в январе',
caption = "начальное состояние --- дождь (Rain)")
И люди вообще-то научились вычислять такие вещи на основании цепи:
Fog Rain Rain , Thunderstorm Sun
[1,] 0.03012048 0.3253012 0.07228916 0.5722892
Скачайте датасет, который содержит роман “По эту сторону рая” Ф. С. Фицджеральда:
token
— словоPOS
— часть речи, полученная на основе английской модели UDPIPE.Визуализируйте частоты частей речи в романе:
Визуализируйте матрицу последовательных переходов частей речи:
Сделайте марковскую цепь и визуализируйте ее граф:
Используя полученную модель, вычислите вероятность встретить после артикля (DET
) прилагательное (ADJ
) (с точностью до трех знаков после запятой).
Используя полученную модель, вычислите вероятность встретить после артикля прилагательное в четвертом по счету слове (с точностью до трех знаков после запятой).
ADJ ADP ADV AUX CCONJ DET
[1,] 0.06364596 0.07437913 0.05648417 0.05594779 0.03150212 0.0760366
INTJ NOUN NUM PART PRON PROPN
[1,] 0.008021889 0.1565543 0.008617353 0.01814057 0.1067079 0.04168071
PUNCT SCONJ SYM VERB X
[1,] 0.1700765 0.01359084 0.00284206 0.1150473 0.0007247423
Визуализируйте 40 состояний цепи, если начальное состояние — артикль (DET
).
Посчитайте фиксированные состояния цепи. В ответе приведите значение для местоимения (с точностью до трех знаков после запятой).