Создание нескольких доверительных интервалов из выборок нормального распределения в R

Я студент-статистик и новичок в R (преуменьшение года), пытаюсь сгенерировать несколько доверительных интервалов для случайно сгенерированных выборок нормального распределения в рамках задания.

Я использовал функцию

data <- replicate(25, rnorm(20, 50, 6))

для генерации 25 выборок размера n = 20 из распределения N (50, 6 ^ 2) (в двойной матрице).

Мой вопрос: как мне найти 95% доверительный интервал для каждой выборки этого распределения? Я знаю, что могу использовать colMeans (data) и sd (data), чтобы найти среднее значение выборки и стандартное отклонение выборки для каждой выборки, но у меня пукает мозг, пытаясь придумать функцию, которая может генерировать доверительные интервалы для всех столбцов в двойной матрице (данные).

На данный момент мое (чрезвычайно грубое) решение состоит в создании функций

left <- function (x,y){x-(qnorm(0.975)*y/sqrt(20))}
right <- function (x,y){x+(qnorm(0.975)*y/sqrt(20))}

left(colMeans(data), sd(data)
right(colMeans(data), sd(data)

чтобы сгенерировать 2 вектора левой и правой границ. Пожалуйста, дайте мне знать, есть ли лучший способ сделать это.


person user1357062    schedule 04.05.2012    source источник
comment
Помимо общих мелких правок, я пошел дальше и исправил то, что, как я полагаю, было опечаткой в ​​вашем коде, создав функции left и right. Если вы считаете, что я ошибся, смело откатывайтесь назад.   -  person joran    schedule 04.05.2012
comment
Хммм, если у вас есть общая формула для доверительного интервала выборки, основанная исключительно на измеренном среднем и стандартном отклонении, то написание красивой векторизованной R-версии этой формулы даст вам все ваши ответы сразу. Или, как однажды сказал мой профессор (до появления Интернета): «Не пытайтесь решить эту проблему: найдите в книге подобную проблему и сделайте то же самое!» :-)   -  person Carl Witthoft    schedule 04.05.2012


Ответы (1)


Я полагаю, вы могли бы использовать функцию t.test(). Он возвращает среднее значение и 95% доверительный интервал для данного вектора чисел.

# Create your data
data <- replicate(25, rnorm(20, 50, 6))
data <- as.data.frame(data)

После создания данных вы можете применить функцию t.test() ко всем столбцам с помощью функции lapply().

# Apply the t.test function and save the results
results <- lapply(data, t.test)

Если вы хотите увидеть только доверительный интервал или возвращаемое среднее значение, вы можете вызвать их с помощью оператора знака доллара. Например, для первого столбца исходного фрейма данных вы можете ввести следующее:

# Check 95% CI for sample one
results[[1]]$conf.int[1:2]

Вы могли бы придумать более выразительный способ сохранения этих данных во фрейме данных результатов. Помните, вы всегда можете увидеть, какие отдельные биты информации вы можете извлечь из объекта, используя команду str(). Например:

# Example
example <- t.test(data[,1])
str(example)

Надеюсь это поможет. Воспользуйтесь этой ссылкой для получения дополнительной информации: Использование R для поиска доверительных интервалов

person Alexander    schedule 04.05.2012