Построить диаграмму CDF в Microsoft Excel - PullRequest
8 голосов
/ 30 декабря 2010

Я не совсем уверен, смогу ли я задать этот вопрос здесь или на SuperUser ,

Я хочу знать, как я могу построить график CDF мой вывод в excel.

мои данные примерно такие (мои реальные данные имеют 22424 записи):

1   2.39E-05
1   2.39E-05
1   2.39E-05
2   4.77E-05
2   4.77E-05
2   4.77E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
8   0.000190931
8   0.000190931

Ответы [ 3 ]

5 голосов
/ 30 декабря 2010

Вы можете использовать функцию NORMDIST и установить для конечного параметра значение true:

В качестве примера предположим, что у меня есть 20 точек данных от 0,1 до 2,0 с шагом 0,1, то есть 0,1, 0,2, 0,3...2.0.

Теперь предположим, что среднее значение этого набора данных равно 1,0, а стандартное отклонение равно 0,2.

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

=NORMDIST(x, 1.0, 0.2, TRUE) -- where x is 0.1, 0.2, 0.3...2.0

alt text


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

  1. В Excel поместите данные в лист1, начиная с ячейки A1
  2. Нажмите ALT + F11, чтобы открыть VBE
  3. Сейчас Insert > Module, чтобы поместить модуль в редактор
  4. Вырежьте и вставьте приведенный ниже код в модуль
  5. Поместите курсор в любое место в RemoveDuplicates и нажмите F5, чтобы запустить код

В результате ваши уникальные результаты будут отображатьсяЛист 2 в вашей рабочей тетради.

Sub RemoveDuplicates()
    Dim rng As Range
    Set rng = Range("A1:B" & GetLastRow(Range("A1")))

    rng.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Sheet2").Range("A1"), Unique:=True

    Dim filteredRng As Range
    Dim cl As Range

    Set filteredRng = Worksheets("Sheet2").Range("A1:A" & GetLastRow(Worksheets("Sheet2").Range("A1")))

    For Each cl In filteredRng
        cl.Offset(0, 1) = Application.WorksheetFunction.SumIf(rng.Columns(1), cl.Value, rng.Columns(2))
    Next cl
End Sub

Function GetLastRow(rng As Range) As Long
    GetLastRow = rng.End(xlDown).Row
End Function
4 голосов
/ 30 апреля 2016

Этот ответ заключается в том, как создать «эмпирическую функцию распределения», о которой многие люди действительно имеют в виду (включая меня), когда говорят CDF ... https://en.wikipedia.org/wiki/Empirical_distribution_function

Предполагая второй столбецПример данных начинается в ячейке B1, в ячейке C1, введите:

=SUM(IF($B$1:$B$14<=B1,1,0))/COUNT($B$1:$B$14)

, затем нажмите Shift + Enter, чтобы ввести его в качестве формулы массива.Теперь это будет выглядеть в строке формул:

{=SUM(IF($B$1:$B$14<=B1,1,0))/COUNT($B$1:$B$14)}

Скопируйте ячейку вниз, чтобы покрыть C1: C14.Затем создайте график рассеяния с B1: B14 как X, C1: C14 как Y. Он покажет четыре точки.

  • Не нужно сортировать или удалять дубликаты
  • Использовать имена диапазоновили воспользуйтесь возможностями таблиц Excel, чтобы более автоматически управлять диапазонами ввода
  • Это формула массива из одной ячейки, поэтому в зависимости от способа копирования и вставки вы получите сообщение «Невозможно изменитьчасть массива ".Если вы используете Copy-Paste, копируете ячейку C1, затем выбираете ячейки C2: c14 и Paste.
  • В идеале график должен быть представлен как пошаговая функция, но у меня не было времени, чтобы выяснить, как это сделать.(хорошо или плохо), чтобы сделать это.
4 голосов
/ 30 декабря 2010

Посмотрим, понял ли я вашу проблему. Предполагая Excel 2007 и выше. Предполагая, что ваши данные находятся в столбцах A и B.

Шаг 1

Используйте эту формулу в ячейке C1:

=B1*COUNTIF(A:A,A1) 

И эта формула в ячейке D1:

=SUM($C$1:C1)  

и скопируйте обе формулы до конца данных.

Шаг 2

Выберите четыре столбца.
Выберите в Лента данных-> Удалить дубликаты
Снимите отметки с колонок B, C и D

Шаг 3

Выберите столбцы A и D. Выберите в Лента Вставка-> Разброс-> Линия

Это то, чего вы хотите достичь?

НТН!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...