Интерполяция точек данных в Excel - PullRequest
20 голосов
/ 25 июня 2009

Я уверен, что это та проблема, которую другие уже решали много раз.

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

Так что я получу от каждого человека набор пар {дата, значение}, в которых отсутствуют пропущенные даты.

Мне нужен полный набор пар {дата, значение}, где для каждой даты в пределах диапазона известно значение (измеренное или вычисленное). Я ожидаю, что для этого проекта будет достаточно простой линейной интерполяции.

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

Спасибо.

ПРИМЕЧАНИЕ. Когда эти наборы данных будут завершены, я определю наклон (то есть, использование в день), и с этого момента мы сможем начать сравнение между домами.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ После первых нескольких предложений: Я не хочу вручную определять, где находятся отверстия в моем наборе измерений (слишком много неполных наборов измерений !!). Я ищу что-то (существующее) автоматически, чтобы сделать это для меня. Так что, если мой ввод

{2009-06-01,  10}
{2009-06-03,  20}
{2009-06-06, 110}

Тогда я ожидаю, что автоматически получу

{2009-06-01,  10}
{2009-06-02,  15}
{2009-06-03,  20}
{2009-06-04,  50}
{2009-06-05,  80}
{2009-06-06, 110}

Да, я могу написать программное обеспечение, которое делает это. Я просто надеюсь, что у кого-то уже есть «готовая к запуску» функция программного обеспечения (Excel) для этой (довольно общей) проблемы.

Ответы [ 7 ]

29 голосов
/ 13 мая 2010

Я сталкивался с этим и неохотно использовал надстройку, потому что это затрудняет доступ к листу с людьми, у которых не установлена ​​надстройка.

Мой товарищ по офису разработал чистую формулу, которая является относительно компактной (из-за дорого использовать немного магии).

Что следует отметить:

  • Формула работает по формуле:

    • с помощью функции MATCH для поиска строки в диапазоне inputs непосредственно перед поиском значения (например, 3 - это значение непосредственно перед 3,5)
    • , используя OFFSET s, чтобы выбрать квадрат этой линии и следующей (светло-фиолетовый)
    • с использованием FORECAST для построения линейной интерполяции с использованием только этих двух точек и получения результата
  • Эта формула не может делать экстраполяции; убедитесь, что значение вашего поиска находится между конечными точками (я делаю это в приведенном ниже примере, имея экстремальные значения).

Не уверен, что это слишком сложно для людей; но его преимущество было очень портативным (и более простым, чем у многих альтернативных решений).

Если вы хотите скопировать и вставить формулу, это:

=FORECAST(F3,OFFSET(inputs,MATCH(F3,inputs)-1,1,2,1),OFFSET(inputs,MATCH(F3,inputs)-1,0,2,1

(inputs - именованный диапазон)

5 голосов
/ 25 июня 2009

Самый простой способ сделать это, вероятно, заключается в следующем:

  1. Загрузите дополнение Excel здесь: Дополнительные функции XlXtrFun ™ для Microsoft Excel

  2. Используйте функцию intepolate (). = Интерполировать ($ A $ 1: $ A $ 3, $ B $ 1: $ B $ 3, D1, значение FALSE, FALSE)

Столбцы A и B должны содержать ваш ввод, а столбец G должен содержать все ваши значения даты. Формула уходит в столбец Е.

5 голосов
/ 25 июня 2009

Есть две функции, LINEST и TREND , которые вы можете попробовать просмотреть, что дает вам лучшие результаты. Они оба принимают наборы известных значений X и Y вместе с новым значением X и вычисляют новое значение Y. Разница в том, что LINEST выполняет простую линейную регрессию, а TREND сначала попытается найти кривую, которая соответствует вашим данным, прежде чем выполнять регрессию.

2 голосов
/ 19 февраля 2014

Ответ выше YGA не обрабатывает случаи конца диапазона, где желаемое значение X совпадает со значением X эталонного диапазона. Используя пример, приведенный YGA, формула Excel выдаст # DIV / 0! ошибка, если было запрошено интерполированное значение в 9999. Это, очевидно, одна из причин, по которым YGA добавила крайние конечные точки 9999 и -9999 к диапазону входных данных, а затем предполагает, что все прогнозируемые значения находятся между этими двумя числами. Если такое заполнение нежелательно или невозможно, другой способ избежать # DIV / 0! Ошибка заключается в проверке на точное совпадение входного значения по следующей формуле:

=IF(ISNA(MATCH(F3,inputs,0)),FORECAST(F3,OFFSET(inputs,MATCH(F3,inputs)-1,1,2,1),OFFSET(inputs,MATCH(F3,inputs)-1,0,2,1)),OFFSET(inputs,MATCH(F3,inputs)-1,1,1,1))

где F3 - это значение, где требуются интерполированные результаты.

Примечание. Я бы добавил это в качестве комментария к исходному сообщению YGA, но у меня пока недостаточно очков репутации.

2 голосов
/ 25 июня 2009

Хороший графический способ увидеть, насколько хорошо подходят ваши интерполированные результаты:

Возьмите дату, пары значений и нарисуйте их, используя XY-диаграмму в Excel (не линейную диаграмму). Щелкните правой кнопкой мыши по полученной линии на графике и нажмите «Добавить линию тренда». Существует множество различных вариантов выбора типа подбора кривой. Затем вы можете перейти к свойствам вновь созданной линии тренда и отобразить уравнение и значение R-квадрата.

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

1 голос
/ 29 октября 2015

Вы можете узнать, какая формула лучше всего подходит для ваших данных, с помощью функции Excel «Линия тренда». Используя эту формулу, вы можете рассчитать y для любого x

  1. Создать для него линейный разброс (XY) (Insert => Scatter);
  2. Создать линию тренда полиноминального или скользящего среднего, установите флажок «Показать уравнение на график "(щелкните правой кнопкой мыши на серии => Добавить линию тренда);
  3. Скопируйте уравнение в ячейку и замените x на желаемое значение x

На снимке экрана ниже A12: A16 содержит x, B12: B16 содержит y, а C12 содержит формулу, которая вычисляет y для любого x.

Excel Interpolation

Я впервые опубликовал ответ здесь , но позже нашел этот вопрос

1 голос
/ 12 августа 2010

альтернативно.

=INDEX(yVals,MATCH(J7,xVals,1))+(J7-MATCH(J7,xVals,1))*(INDEX(yVals,MATCH(J7,xVals,1)+1)-INDEX(yVals,MATCH(J7,xVals,1)))/(INDEX(xVals,MATCH(J7,xVals,1)+1)-MATCH(J7,xVals,1))

, где j7 - значение x.

xvals это диапазон значений х yvals это диапазон значений y

проще поместить это в код.

...