Определение размера выборки n для отклонения нуля при альфа =0,01 в сценарии R

#r #statistics

#r #Статистика

Вопрос:

Создайте смоделированный набор данных из 100 наблюдений, где x-случайная нормальная переменная со средним значением 0 и стандартным отклонением 1, и y = 0,1 2 * X e, где эпсилон также является случайной нормальной ошибкой со средним значением 0 и sd 1.

 set.seed(1) # simulate a data set of 100 observations  x lt;- rnorm(100) y.1 lt;- 0.1   2*x   rnorm(100)  

Теперь извлеките первые 5 наблюдений.

 y1.FirstFive lt;- (y.1[1:5]) # extract first 5 observations from y  x.FirstFive lt;- (x[1:5]) # extract first 5 observations from x    y1.FirstFive # extracted 5 observations from y1 [1] -1.7732743 0.5094025 -2.4821789 3.4485904 0.1044309 x.FirstFive # extracted 5 observations from x  [1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078  

Предполагая, что среднее значение и sd выборки, которые вы рассчитали на основе первых пяти наблюдений, не изменятся, какое минимальное общее количество дополнительных наблюдений вам потребуется, чтобы сделать вывод о том, что истинное среднее значение популяции отличается от 0 при доверительном уровне р = 0,01?

 alpha lt;- 0.01 mu lt;- 0  for (i in 5:2000) { # Recalculate the standard error and CI  stand_err lt;- Sd_y1 / sqrt(i)  ci lt;- sample_mean_y1   c(qt(alpha/2, i-1), qt(1-alpha/2, i-1))*stand_err  if (ci[2] lt; mu)  break # condition met, exit loop }  i [1] 2000  

Здесь я написал цикл, который итеративно увеличивает n с начального n=5 до n=2000, использует pt для нахождения значения p (с учетом фиксированного y-бара и sd) и останавливается, когда p Однако я продолжаю получать неверный вывод. Таким образом, выход всегда является номером максимального диапазона, который я даю (здесь это 2000), вместо того, чтобы давать мне конкретную минимальную выборку n, чтобы отклонить значение null, которое mu_y = 0 на уровне p=0,01. Есть какие-либо предложения относительно того, как исправить код?

  • дополнительная информация: sd для y1.FirstFive = 2,3 и среднее значение для y1.FirstFive = -0,04

Ответ №1:

Предполагая,:

 Sd_y1 = sd(y1.FirstFive) sample_mean_y1 = mean(y1.FirstFive) sample_mean_y1 [1] -0.03860587  

Как указывает @jblood94, вам нужно выбрать больший размер выборки.

Для этого вам не нужен цикл for, большинство ваших функций векторизованы, поэтому что-то вроде этого:

 n = 5:30000 stand_err = Sd_y1 / sqrt(n) ub = sample_mean_y1   qt(1-alpha/2, n-1)*stand_err n[min(which(ublt;0))] [1] 23889  

Комментарии:

1. sd и среднее значение y должны быть получены из извлеченных 5 наблюдений. И это должен быть тест с двумя хвостами.

2. Кроме того, я протестировал свой код с вашим предложением изменить ci[2] lt; mu на ci [1] gt; mu, но результат все равно 2000.

3. Может быть, 2000-это недостаточно высокий показатель.

Ответ №2:

Это потому, что n gt; 2000.

 set.seed(1) x lt;- rnorm(100) y.1 lt;- 0.1   2*x   rnorm(100)  Sd_y1 lt;- sd(y.1[1:5]) sample_mean_y1 lt;- mean(y.1[1:5]) alpha lt;- 0.01 sgn lt;- 2*(sample_mean_y1 gt; 0) - 1  f lt;- function(n) qt(alpha/2, n - 1)*Sd_y1   sgn*sample_mean_y1*sqrt(n)  upper lt;- 2 while (f(upper) lt; 0) upper lt;- upper*2 (n lt;- ceiling(uniroot(f, lower = upper/2, upper = upper, tol = 0.5)$root)) #gt; [1] 23889