Введение

В этом документе мы рассмотрим, как рассчитать описательные статистики (среднее, медиану, моду, стандартное отклонение, квартили и др.) на датасете iris. Также мы создадим визуализации для анализа распределения данных: ящик с усами, гистограмму, точечную диаграмму и график плотности. Датасет iris содержит 150 наблюдений по 5 переменным: длине и ширине чашелистика и лепестка, а также виду ириса.

Загрузка данных

Загрузим датасет iris и посмотрим его структуру.

## Загрузка датасета
data(iris)

## Структура данных
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Команда str выводит информацию о структуре данных.

В нашем случае датасет включает числовые переменные (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) и категориальную (Species). Для анализа выберем переменную Sepal.Length (длина чашелистика).

Расчет описательных статистик

Рассчитаем основные описательные статистики для Sepal.Length.

# Выборка данных
sepal_length <- iris$Sepal.Length

# Среднее
mean_value <- mean(sepal_length)

# Медиана
median_value <- median(sepal_length)

# Стандартное отклонение
sd_value <- sd(sepal_length)

# Минимум и максимум
min_value <- min(sepal_length)
max_value <- max(sepal_length)

# Квартили
quantiles <- quantile(sepal_length)

# Интерквартильный размах
iqr_value <- IQR(sepal_length)

# Мода (собственная функция, так как нет встроенной)
get_mode <- function(x) {
  freq_table <- table(x)
  modes <- as.numeric(names(freq_table[freq_table == max(freq_table)]))
  return(modes)
}
mode_value <- get_mode(sepal_length)

# Вывод результатов
cat("Среднее:", mean_value, "\n")
## Среднее: 5.843333
cat("Медиана:", median_value, "\n")
## Медиана: 5.8
cat("Стандартное отклонение:", sd_value, "\n")
## Стандартное отклонение: 0.8280661
cat("Минимум:", min_value, "\n")
## Минимум: 4.3
cat("Максимум:", max_value, "\n")
## Максимум: 7.9
cat("Квартили:\n")
## Квартили:
print(quantiles)
##   0%  25%  50%  75% 100% 
##  4.3  5.1  5.8  6.4  7.9
cat("Интерквартильный размах:", iqr_value, "\n")
## Интерквартильный размах: 1.3
cat("Мода:", mode_value, "\n")
## Мода: 5
# Сводная статистика
summary(sepal_length)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.300   5.100   5.800   5.843   6.400   7.900

Здесь:

Визуализации

Создадим графики для анализа распределения Sepal.Length.

1. Boxplot

Показывает медиану, квартили и возможные выбросы.

boxplot(sepal_length, main="Boxplot Длина чашелистика", ylab="Длина (см)", 
        col="tomato3")

Медиана Sepal.Length около 5.8 см, данные симметричны, выбросов нет.

2. Гистограмма

Показывает частотное распределение данных.

hist(sepal_length, main="Гистограмма распределения длин чашелистиков", xlab="Длина (см)", 
     col="lightgreen", breaks=10)

Распределение близко к нормальному с пиком около 5–6 см.

3. Точечная диаграмма (Scatterplot)

Отображает значения относительно их индекса.

plot(1:length(sepal_length), sepal_length, main="Точечная диаграмма", 
     xlab="Index", ylab="Длина чашелистиков (см)", pch=19, col="darkgreen")

Показывает разброс значений, без явных паттернов по индексу.

4. График плотности (Density Plot)

Показывает гладкое распределение данных.

plot(density(sepal_length), main="График плотности распределения по длине", 
     xlab="Длина чашелистиков (см)", col="blue", lwd=2, ylab="Плотность")

Подтверждает нормальность распределения с гладким пиком.

Объединение графиков

Для компактности можно разместить все графики в одной сетке.

par(mfrow=c(2,2))
boxplot(sepal_length, main="Boxplot", ylab="Length (cm)", col="lightblue")
hist(sepal_length, main="Гистограмма", xlab="Length (cm)", col="lightgreen", breaks=10)
plot(1:length(sepal_length), sepal_length, main="Scatterplot", xlab="Index", 
     ylab="Length (cm)", pch=19, col="darkgreen")
plot(density(sepal_length), main="Распределение плотности", xlab="Length (cm)", 
     col="blue", lwd=2)

# возвращаем настройку по умолчанию
par(mfrow=c(1,1))

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

Спасибо!