#r
Вопрос:
У меня есть вектор, который является интервалом
a=c((0.5)-rnorm(1,1,0.5),(0.5) rnorm(1,1,0.5))
Я хочу повторить, сгенерировать интервал 100, как указано выше, и рассчитать, как
много раз (пропорция) 1 появляется в этих 100 образцах.
например:-0,9243532 0,7800040. 1 не находится в этом интервале. так что верните ложь. -0.6741866 1.4794725. 1 находится в этом интервале , поэтому верните значение true. Я хочу, чтобы их было 100 человек. соотношение : # истинно/100
Может быть, показать, как рассчитать результат bollean для 1 в одном интервале, также поможет
Ответ №1:
Мы можем использовать replicate
в base R
m1 <- t(replicate(100, c((0.5)-rnorm(1,1,0.5),(0.5) rnorm(1,1,0.5)), simplify = TRUE))
mean(m1[,1] <=1 amp; m1[,2] > 1)
[1] 0.8
Комментарии:
1. Спасибо, но как рассчитать долю 1 в диапазоне для этих 100 образцов.
2. @работяга, попробуй
mean(replicate(100, c((0.5)-rnorm(1,1,0.5),(0.5) rnorm(1,1,0.5)), simplify = TRUE) == 1)
3. Я имею в виду для доверительного интервала, который мы рисуем. например:-0,9243532 0,7800040. 1 здесь нет. так что верните ложь. -0.6741866 1.4794725. 1 здесь , поэтому верните значение true. Я хочу, чтобы их было 100 человек. соотношение # истинно/100
Ответ №2:
вы также можете использовать map_lgl
library(tidyverse)
set.seed(1)
map_lgl(replicate(100, c((0.5)-rnorm(1,1,0.5),(0.5) rnorm(1,1,0.5)), simplify = FALSE), ~ 1 >= .x[1] amp; 1 <= .x[2])
#> [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE
#> [13] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [25] TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [37] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
#> [49] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [61] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
#> [73] TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
#> [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
#> [97] TRUE FALSE FALSE TRUE
Для пропорции
library(tidyverse)
set.seed(1)
n <- 100
sum(map_lgl(replicate(n, c((0.5)-rnorm(1,1,0.5),(0.5) rnorm(1,1,0.5)), simplify = FALSE), ~ 1 >= .x[1] amp; 1 <= .x[2]))/n
#> [1] 0.86
Ответ №3:
Ваше математическое представление на самом деле может быть немного упрощено, и вы можете попробовать приведенный ниже код
> mean(replicate(100, prod(0.5 rnorm(2, 1, 0.5) * c(-1, 1)) < 0))
[1] 0.85
Если вы хотите ускорить, вы можете попробовать
> n <- 100
> mean(do.call(`*`, split(0.5 rnorm(2 * n, 1, 0.5) * c(-1, 1), c(1, 2))) < 0)
[1] 0.84