Выборочный доверительный интервал.

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

Для следующего датафрейма я пытаюсь построить средние значения выборки из 5 случайных строк. Также построить их доверительные интервалы с помощью баров ошибок. Я не могу понять, как построить доверительные интервалы с использованием баров ошибок.

  col0  col1  col2  col3  col4  col5  col6  col7
0     0     1     2     3     4     5     6     7
1     8     9    10    11    12    13    14    15
2    16    17    18    19    20    21    22    23
3    24    25    26    27    28    29    30    31
4    32    33    34    35    36    37    38    39
5    40    41    42    43    44    45    46    47
6    48    49    50    51    52    53    54    55
7    56    57    58    59    60    61    62    63

Вот мой код:

confidenceInterval_percent = 0.95
sample_size=5
mean_list=[]
df = pd.DataFrame(np.arange(64).reshape(8,8)).add_prefix('col')
sample_df= df.sample(n=sample_size, random_state=10)
for i in df.columns:
    mean = df[i].mean()
    mean_list.append(mean)
    stdError = df[i].std() / np.sqrt(sample_size)
    confidence_intervals = sp.stats.norm.interval(
                        confidenceInterval_percent, loc = mean, 
                           scale = stdError)
    temporary_Df=pd.DataFrame(mean_list)
    temporary_Df.plot.bar()
    plt.show()

Для уровня доверия 95% вы можете рассчитать среднее значение и стандартное отклонение выборки, затем найти границы вашего интервала с помощью: $\bar{x} \pm 1.96*\frac{s}{\sqrt{n}}$

Создав массив с каждой парой значений для каждой выборки, вы можете затем построить их на своем графике.

Matplotlib имеет отличный метод добавления баров ошибок, посмотрите:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.errorbar.html

Ответ или решение

Построение доверительных интервалов — важный аспект анализа данных, который позволяет оценивать надежность рассчитанных средних значений. Рассмотрим, как это можно сделать на примере Pandas DataFrame и библиотеки Matplotlib.

Теория

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

[ \bar{x} \pm Z \cdot \frac{s}{\sqrt{n}} ]

где:

  • (\bar{x}) — среднее значение выборки.
  • (Z) — значение стандартного отклонения для заданного уровня доверия (например, для 95% доверительного интервала (Z \approx 1.96)).
  • (s) — стандартное отклонение выборки.
  • (n) — размер выборки.

В вашем случае уровень доверия 0.95, поэтому значение (Z) равно примерно 1.96.

Пример

На основе приведенного DataFrame построим доверительные интервалы для средних значений случайной выборки строк. Напишем код для Python, который справится с этой задачей.

import numpy as np
import pandas as pd
import scipy.stats as sp_stats
import matplotlib.pyplot as plt

# Заданные переменные
confidenceInterval_percent = 0.95
sample_size = 5

# Создание DataFrame
df = pd.DataFrame(np.arange(64).reshape(8, 8)).add_prefix('col')

# Выбор случайной строки
sample_df = df.sample(n=sample_size, random_state=10)

# Расчет средних, стандартных ошибок и доверительных интервалов
means = []
error_bars = []

# Вычисление для каждого столбца
for i in df.columns:
    mean = sample_df[i].mean()
    stdError = sample_df[i].std() / np.sqrt(sample_size)
    confidence_interval = sp_stats.norm.interval(
        confidenceInterval_percent, loc=mean, scale=stdError
    )

    means.append(mean)
    error_bars.append([
        mean - confidence_interval[0],  # нижняя граница
        confidence_interval[1] - mean   # верхняя граница
    ])

# Визуализация результатов
fig, ax = plt.subplots()
ax.bar(df.columns, means, yerr=np.array(error_bars).T, capsize=5)
plt.xlabel('Колонки')
plt.ylabel('Среднее значение')
plt.title('Средние значения с доверительными интервалами')
plt.show()

Применение

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

  2. Расчеты. Для каждого столбца выборки вычисляется его среднее значение и стандартная ошибка на основе случайной выборки. Затем, используя функцию scipy.stats.norm.interval, рассчитываются границы доверительного интервала.

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

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

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

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