как рассчитать, что одно значение находится в некотором диапазоне в r?

#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