2016-02-02 8 views
1

Пока я использовал nlsLM от minpack.lm на некоторое время с отличными результатами, теперь я сталкиваюсь с неожиданными проблемами с точки зрения качества сборки с меньшим количеством переданных данных.R nlsLM/nls качество подгонки с низким номером точки

В примере вы видите один фитинг 750 точек данных и один с около 50.

http://i66.tinypic.com/33cn9jq.jpg

http://i64.tinypic.com/14cb4a0.jpg

является моно-экспоненциальной фитинг В (1-ехр (-х * tm)) + C, где C и B предопределены, а tm - это время.

Образец данных:

mxf <- structure(list(tm = c(0.604, 0.705, 0.805, 0.905, 1.005, 1.105, 
1.205, 1.305, 1.405, 1.505, 1.605, 1.705, 1.805, 1.905, 2.005, 
2.104, 2.204, 2.304, 2.405, 2.505, 2.605, 2.705, 2.805, 2.905, 
3.005, 3.105, 3.205, 3.305, 3.405, 3.505, 3.605, 3.705, 3.805, 
3.905, 4.005, 4.105, 4.205, 4.305, 4.405, 4.505, 4.605, 4.705, 
4.804, 4.904, 5.004), mxxp1m = c(15.2, 24.5, 30.1, 35.3, 38.6, 
40.9, 42.7, 46.3, 47.1, 47.8, 48, 48.6, 51.1, 51.7, 52.6, 52.3, 
52.2, 51.8, 54.4, 54, 52.7, 51.7, 54.4, 52.5, 53.5, 52.8, 54, 
53.5, 52.5, 53.4, 52, 52.9, 52.7, 52.4, 53.7, 52.3, 53.1, 52.2, 
52.8, 53.1, 52.9, 53, 53.3, 51, 52.5)), .Names = c("tm", "mxxp1n" 
), class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", 
"17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", 
"28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", 
"39", "40", "41", "42", "43", "44", "45")) 

Это код, который я использовал в обоих образцах:

mxf = data.frame(mxf,b,c) 
    ## c = 0.2 (y starting point) 
    ## d = 0.6 (y - span from start to end) 

    fit = nlsLM(mxxp1m ~ b-(b*exp(-x*tm))+c, data = mxf, start = list(x=0.5)) 

Я уже думал о взвешивании значения, или изменить MaxIter варианты, но не получили достаточно лучшие результаты ,

+1

Привет, добро пожаловать в SO. Было бы очень полезно, если бы вы могли предоставить минимальный, воспроизводимый пример ([см. Здесь] (http://stackoverflow.com/help/mcve)). Это можно сделать с помощью 'dput (head (tm))' или предоставления некоторых поддельных данных и, кроме того, показать нам, какие параметры установлены (т. Е. 'B <- 5' или что-то еще). – Laterow

+1

@Laterow: я обновил раздел кода и загрузил CSV-файл с не нормированным, но в остальном таким же набором данных, что и пример выше: http://we.tl/ihv1jPLH1r –

+0

Спасибо, я поместил данные в открытое сообщение так что другие пользователи могут получить к нему доступ напрямую. Хотя 'b' и' c' все еще отсутствуют, я получаю его суть. Поскольку у меня лично нет опыта работы с 'nlsLM', и поскольку я ничего не могу найти через'? NlsLM', я не могу вам помочь. Позволяет надеяться, что кто-то другой ответит. – Laterow

ответ

0

Наконец найти решение по моей:

Проблема в том, что НСГ облегающие алгоритм не может обрабатывать значения х-начала (здесь временные рамки)> 0. Если точки данных начинают при Т = 0,6 Фитинг просто неправильно работает. Если тогда задано t = t-t [1], то он работает нормально.

Поэтому всегда изменяйте свой вектор t, чтобы начать с t = 0, а не что-то вроде t = 0.603.

 Смежные вопросы

  • Нет связанных вопросов^_^