Как оценить N-е значение (или n-й процентиль) из частотного распределения в Excel?

У меня есть таблица Excel, содержащая частоты отсчетов, а не сырые данные. Я хотел бы иметь возможность легко находить такие вещи, как 653-е значение или 95-й процентиль.

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

1ms = 1234567
3ms = 34254
5ms = 33034
7ms = 6901
10ms = 76

6901 пакетов попало в корзину "больше 5 миллисекунд, но не более 7 миллисекунд".

Так как ведра довольно зернистые, я был думаю, я мог бы сделать некоторые хитрости, чтобы вычислить некоторую стандартную статистическую информацию, как если бы у меня были необработанные данные. Вычисление среднего не требует этого, но что-то вроде медианы или стандартного отклонения или 99-го процентиля все полагаются на диапазон данных. Кто-нибудь может помочь?

19
задан 3498DB
19.03.2023 14:49 Количество просмотров материала 3494
Распечатать страницу

2 ответа

для частот у вас есть, Excel не хватает строк для хранения необработанных данных. Я уменьшил частоты в 100 раз (кроме последнего), чтобы они поместились на листе Excel. Если вы запустите этот код, вы должны получить необработанные данные, которые при использовании с формулой типа

{=FREQUENCY($A:$A095,{1,3,5,7,10})}

дает вам (мои уменьшенные частоты) 12345, 343, 330, 69, 7. Он производит случайные числа в пределах ваших диапазонов.

Sub MakeRawData()

    Dim i As Long
    Dim dRaw As Double

    For i = 1 To 12345
        dRaw = Rnd
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 343
        dRaw = (2 - 1 + 1) * Rnd + 1
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 330
        dRaw = (4 - 3 + 1) * Rnd + 3
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 69
        dRaw = (6 - 5 + 1) * Rnd + 5
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

    For i = 1 To 7
        dRaw = (9 - 7 + 1) * Rnd + 7
        Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = dRaw
    Next i

End Sub

оно ужасно не эффективен и может принять несколько минут, но если вам не нужно делать это часто, это не должно быть большой проблемой.

1
отвечен dkusleika 2023-03-20 22:37

Я опоздал на вечеринку примерно на 1,5 года, но я подумал, что отправлю сообщение только для тех, кто наткнется на это.

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

чтобы получить CDF, вам нужно вычислить кумулятивную вероятность для каждого ведра. Я предполагаю, что всегда есть некоторая задержка, поэтому возьмите 0 в качестве минимального значения с частотой 0. Чтобы найти значение CDF в каждой верхней границе области, используйте формулу

(sum of frequencies in bucket and previous buckets)/(sum of all frequencies)

для выборочных данных, которые вы предоставили, совокупные точки вероятности будут

{(0,0); (1;0.943); (3,0.969); (5,0.995); (7,0.999); (10,1)}

Итак, для уточнения. Если у вас есть здравый смысл как выглядит распределение, например, вы думаете, что где-то около 25% задержек меньше 0,1 мс, вы можете добавить эти интуиции к своим данным. Если вы понятия не имеете, как должен выглядеть дистрибутив, тогда вы можете просто свернуть с тем, что у вас есть.

2
отвечен Excellll 2023-03-21 00:54

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх