Почему моя функция работает только иногда? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующая функция:

samp315<-function(n=30, desmean=86, distance=3.4995) { 
  x = seq(from = 0, to = 100, by = 0.1)
  samp<-0
  while (!between(mean(samp),desmean-distance,desmean+distance)) samp<-sample(x,n,replace=TRUE)
  samp
}
percent <- samp315()

, поэтому я хочу сгенерировать 30 чисел в диапазоне от 0 до 100, что в среднем составляет 86 +/- 3,4995, однако всякий раз, когда я запускаю последнюю строку,будет загружаться вечно или когда мне повезет, он сформирует список желаемых результатов.Любая идея о том, как я мог бы изменить функцию, чтобы улучшить ее функциональность?

1 Ответ

0 голосов
/ 30 ноября 2018

Как предложено Парфе в комментариях, вы используете стратегию рандомизации, которая дает низкую вероятность предоставления интересующего вас условия. Не помогли ли вам другие ответы на этот вопрос ?

Некоторые другие возможные стратегии, которые вы можете попробовать.

n = 30

# Using truncated normal
library(truncnorm)
x = round(rtruncnorm(n, a = -0.0495, b = 100.0495, mean = 85, sd = 3.5*2), 1)

# Using beta
sig = 3
x = round(100*rbeta(n, (0.85)*sig, (1-0.85)*sig), 1)

round(..., 1) предназначен для выравнивания с вашим вектором x.Оба эти метода будут иметь очень мало значений по сравнению с 85. Это компромисс, который вы должны рассмотреть.Если вы хотите, чтобы среднее значение составляло 85 +/- 3,5, то, например, вы не можете получить слишком много значений ниже 10.Таким образом, вы должны снизить вероятность выбора таких значений.Используя вашу функцию, когда она будет завершена, вы, вероятно, обнаружите, что значения, близкие к 85, более представлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...