#r #lm #nls
Вопрос:
Не могли бы вы сказать мне, есть ли какая-либо разница между использованием функции lm
и nls
? Я привел пример ниже:
df1lt;-structure(list(Category = c("ABC", "ABC", "ABC"), Days=c(42,43,44), Numbers = c(456.589136904762, 456.589136904762, 456.589136904762)), class= "data.frame", row.names = c(NA, -3L)) mod lt;- lm(Numbers ~ I(Days^2), df1) gt; mod Call: lm(formula = Numbers ~ I(Days^2), data = df1) Coefficients: (Intercept) I(Days^2) 4.566e 02 -1.711e-15 mod1 lt;- nls(Numbers ~ b1*Days^2 b2,start = list(b1 = 0,b2 = 0),data = df1, algorithm = "port") gt; mod1 Nonlinear regression model model: Numbers ~ b1 * Days^2 b2 data: df1 b1 b2 1.513e-08 4.566e 02 residual sum-of-squares: 1.422e-10 Algorithm "port", convergence message: X-convergence (3)
Комментарии:
1. Из — за различий в расчетах и допусков обе функции обеспечивают приблизительно 0 для наклона.
2. Разница в том, что
lm
решает линейное уравнение, чтобы найти точный минимум остаточной суммы квадратов. Это работает только в том случае, если модель имеет линейную зависимость от коэффициентовb
. Нелинейные методы, такие какnls
поиск минимума остаточной квадратной суммы с помощью итерации, и эта итерация останавливается, когда разница шагов меньше заданного порога. Эти нелинейные методы почти никогда не находят точного минимума для линейной модели, но приближаются к нему.3. Спасибо @Dave2e и @Нечой! Так что наиболее вероятным было бы использовать эту
lm
функцию, верно?4. Если ваша модель линейна по коэффициентам b, как и ваша, то используйте
lm
.5. Да,
lm()
это всегда лучший выбор для любых линейных соотношений (или уравнений, которые могут быть смоделированы как линейные).