Вопрос или проблема
Я использую rnorm в качестве набора данных и пытаюсь сделать цикл, который возьмет 100 случайных выборок с n=25, средним = 10 и стандартным отклонением = 10. Затем я хочу получить среднее значение каждой выборки и превратить его в гистограмму средних выборок. Используя различные сайты, я собрал следующее:
normloop25 <- data.frame(ID = 1:100, Value = rnorm(100, 10, 10))
sample_size <- 25
random_sample <- normloop25[sample(nrow(normloop25), sample_size), ]
n_repeats <- 100
samples_list_25 <- vector("list", n_repeats)
для (i в 1:100) {
samples_list_25[[i]] <- normloop25[sample(nrow(normloop25), sample_size), ]
}
means <- sapply(samples_list_25, function(sample) mean(sample$Value))
combined_samplesA <- do.call(rbind, lapply(1:n_repeats, function(i) {
data.frame(Sample = i, Value = samples_list_25[[i]]$Value)
}))
hist(combined_samplesA, las = 1, col="blue")
Это работает до конца, когда я получаю
Ошибка в hist.default(combined_samplesA, las = 1, col = "blue") :
'x' должен быть числовым
Если единственное, что вы хотите проанализировать – это средние выборки, то вам не нужно сохранять каждую полную выборку:
sample_means = sapply(1:100, \(x) mean(rnorm(25, mean = 10, sd = 10)))
hist(sample_means)
Если вы все же хотите сохранить каждое извлечение, вы все равно можете упростить это:
n_repeats = 100
sample_n = 25
sample_mean = 10
sample_sd = 10
samples = replicate(
n = n_repeats,
expr = rnorm(
n = sample_n,
mean = sample_mean,
sd = sample_sd
)
)
## samples – это матрица 25x100,
## каждый столбец – это повторение 25 выборок из распределения
dim(samples)
# [1] 25 100
## создайте гистограмму средних значений каждого столбца:
hist(colMeans(samples)) ## похожий результат, как выше
Вариант
M = colMeans(replicate(100, rnorm(25, mean = 10, sd = 10)))
hist(M, xlab = "средние выборки")
давая
Вариация ggplot2 / tidyverse с некоторым форматированием.
library(tidyverse)
data.frame(run = rep(1:100, each = 25),
value = rnorm(100*25, 10, 10)) |>
summarize(mean = mean(value), .by = run) |>
ggplot(aes(mean)) +
geom_histogram(binwidth = 1, boundary = 0, closed = “left”,
color = “black”, fill = “gray90”) +
scale_x_continuous(breaks = scales::breaks_width(1), minor_breaks = NULL) +
theme_minimal()
или используя ggthemes::theme_base()
Ответ или решение
Создание цикла для получения средних значений выборок — это важное задание в статистическом анализе, особенно когда речь идет о оценке распределений. В этом объяснении мы подробно рассмотрим процесс использования функции rnorm
для генерации случайных выборок и построения гистограммы средних значений. Мы также устраним возникшие недочеты и предоставим оптимизированный код.
Шаг 1: Генерация случайных выборок
Для начала определим параметры нашей выборки:
- Количество выборок (n_repeats): 100
- Размер каждой выборки (sample_size): 25
- Среднее значение (mean): 10
- Стандартное отклонение (SD): 10
Шаг 2: Использование replicate
для итераций
Для генерации выборок мы можем использовать функцию replicate
, который позволяет повторять действие, возвращая результат в виде массива. Это упростит наш код.
Шаг 3: Определение среднего значения
После получения выборок мы вычислим среднее значение каждой из них через colMeans
, что дает нам нужные результаты для дальнейшего анализа.
Шаг 4: Построение гистограммы
Наконец, для визуализации результатов мы построим гистограмму средних значений.
Оптимизированный код на R
Давайте рассмотрим окончательный код для выполнения задачи:
# Задаем параметры
n_repeats <- 100
sample_size <- 25
sample_mean <- 10
sample_sd <- 10
# Генерируем случайные выборки и вычисляем средние значения
sample_means <- colMeans(replicate(n_repeats, rnorm(sample_size, mean = sample_mean, sd = sample_sd)))
# Строим гистограмму
hist(sample_means, main = "Гистограмма средних значений выборок", xlab = "Средние значения", ylab = "Частота", col = "lightblue", border = "black")
Альтернативный подход с использованием ggplot2
Если вы хотите улучшить визуализацию, рекомендую воспользоваться библиотекой ggplot2
. Вот как это можно сделать:
library(tidyverse)
# Создаем дата-фрейм с результатами
data <- data.frame(run = rep(1:n_repeats, each = sample_size),
value = rnorm(n_repeats * sample_size, mean = sample_mean, sd = sample_sd))
# Вычисляем средние значения
mean_data <- data %>%
group_by(run) %>%
summarize(mean_value = mean(value))
# Строим гистограмму с помощью ggplot2
ggplot(mean_data, aes(mean_value)) +
geom_histogram(binwidth = 1, fill = "gray90", color = "black") +
labs(title = "Гистограмма средних значений выборок", x = "Средние значения", y = "Частота") +
theme_minimal()
Заключение
Создание цикла для получения средних значений выборок является полезным инструментом для статистического анализа. Данные методы помогают легко создавать выборки, вычислять средние значения и визуализировать результаты. Применение replicate
и ggplot2
не только упрощает код, но и улучшает его читаемость и восприятие. Следуя приведенным инструкциям, вы сможете без проблем организовать свои данные и провести анализ.