У меня есть данные в форме . Для оценки от до я использую формулы этой статьи: Джон Фокс - Нелинейная регрессия и нелинейные наименьшие квадраты В этой статье оценивается путем просмотра данных. Если я это сделаю, это будет работать нормально, даже если у меня всего три очка. Из этого я могу рассчитать два других. Я проверил свои параметры с помощью nls () в R и LevenbergMarquardt в C #. Модели, возвращенные ими, удовлетворяют. β1β3β1
Проблема в том, что я не хочу смотреть на данные, чтобы получить хорошую оценку для , я хочу, чтобы моя программа вычисляла их. Некоторое время я использовал значения, которые были немного выше максимума моих значений (что-то между и \ max * 1.5 . Это работало нормально, если точки покрывали большую часть функции. Это также работало нормально, если Точки данных находились где-то от «вершины» кривой, но когда все они пришли из области «ниже» точки перегиба, эта оценка была определенно ниже, чем должна быть, и я не смог бы соответствовать модели. Если я что-то использую это определенно выше максимальной точки (умножая ее на смехотворно высокие значения), модель не подходит никаким полезным способом.
Измерения могут выглядеть так:
x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> легко оценить
x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> легко оценить
х = (40, 50, 60, 70), у = (500, 200, 100, 50) -> не так легко оценить
Я думаю, я мог бы узнать, где я нахожусь в функции (внизу, вверху, на склоне), вычислив дельты в заданных точках и рассчитав верхнюю границу в зависимости от этого. У кого-нибудь есть подсказка для лучшего решения? Дополнительная информация: Если это невозможно сделать, для меня более важно, чтобы измерения, которые могут быть выполнены, были как можно более хорошими, и я принимаю, что некоторые измерения не могут быть выполнены вообще.
(хотя я хочу реализацию в C #, я разместил ее здесь, но я не думаю, что проблема зависит от языка)
обновление (применение этого):
х - значения температуры и у соответствующих измерений. По своей природе дано, что она должна выглядеть как логистическая кривая с более высокими значениями y при более низких температурах и наоборот. Точка плавления равна точке перегиба кривой, которая сильно меняется при небольших изменениях параметров модели.
обновление (некоторые составили данные с 7 точками данных и известной точкой перегиба на 60):
//first I made up some data without any noise and enough (13) points
double[] x17 = { 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90 };
double[] y17 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 59.642....
//Then I took three different parts of that data
(to simulate how much data I will have in the real world)
double[] x18 = { 30, 35, 40, 45, 50, 55, 60 };
double[] y18 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000 };
//calculated inflection point: 59.263.... is ok!
double[] x19 = { 60, 65, 70, 75, 80, 85, 90 };
double[] y19 = { 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 53.447.... to small!
double[] x20 = { 45, 50, 55, 60, 65, 70, 75 };
double[] y20 = { 1700, 1500, 1280, 1000, 720, 500, 300 };
//calculated inflection point: 59.868... almost perfect!
Мой текущий подход для оценки верхней границы - y0 * y0 / y1. Таким образом, я надеюсь принять во внимание, что у меня не всегда может быть значение, близкое к максимальному.
обновление: значения x и y никогда не будут отрицательными. x всегда будет {40, 45, 50, 55, 60, 65, 70}, если точка данных не потеряна.
Обновление: я сделал много, много тестов с симулированными данными, которые должны быть легко вписаны (я выбираю точки данных, которые были точно на кривой = без шума), и я вижу, что это работает нормально, если только первая или вторая точка данных (где х = 40 или х = 45) отсутствует. Я думаю, мне придется отказаться от таких измерений, и пользователь должен будет жить с этим.
источник
Ответы:
Я работал над аналогичной проблемой в начале этого года. Решение, которое я использовал, было основано на этой статье , которая использует линейную алгебру, чтобы исключить , максимум. Таким образом, результаты для оставшихся параметров, однажды определенные с помощью некоторой процедуры (я просто минимизировал поверхность ошибки, как в статье), могут быть использованы для вывода в конце.β1 β1
Интуитивно понятно, что это решение основывается на предпосылке, что все логистические кривые с одинаковыми параметрами скорости и местоположения являются самоподобными, так что установка верхней границы просто означает «растяжение» сигмоидальной кривой до соответствующего максимума.
источник