Создание круга средств

Вопрос или проблема

Я использую 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 не только упрощает код, но и улучшает его читаемость и восприятие. Следуя приведенным инструкциям, вы сможете без проблем организовать свои данные и провести анализ.

Оцените материал
Добавить комментарий

Капча загружается...