R中基于lm对非线性函数做线性回归的公式编写咨询
R可线性化非线性模型的lm()参数写法说明
首先明确:只有满足可线性化变换规则的非线性模型,才能通过变量代换后用lm()做线性回归,以下是不同非线性模型的对应写法:
- 你之前使用的幂函数模型(Y = β1 * X1^β2 * ε,两边取自然对数后得到lnY = lnβ1 + β2*lnX1 + lnε),和你给出的
result <- lm(log(Y) ~ log(X1), data=dataset)完全对应,拟合得到的截距项取exp()后就是原模型的β1,斜率直接对应原模型的β2。 - 若第二个模型是指数函数模型:Y = β1 * exp(β2X1 + ε),两边取自然对数后得到lnY = lnβ1 + β2X1 + ε,对应lm()写法为:
拟合后截距取exp得到β1,斜率直接为β2。result <- lm(log(Y) ~ X1, data = dataset) - 若第二个模型是对数函数模型:Y = β1 + β2*lnX1 + ε,不需要对Y做变换,对应lm()写法为:
拟合输出的截距和斜率直接对应原模型的β1、β2。result <- lm(Y ~ log(X1), data = dataset) - 若第二个模型是倒数模型:Y = β1 + β2*(1/X1) + ε,对应lm()写法为:
这里用result <- lm(Y ~ I(1/X1), data = dataset)I()是为了让R把括号内的运算识别为变量代换,而非公式的特殊符号。 - 若第二个模型是二次多项式模型:Y = β1 + β2X1 + β3X1² + ε,对应lm()写法为:
result <- lm(Y ~ X1 + I(X1^2), data = dataset) # 也可以用poly函数简化写法: result <- lm(Y ~ poly(X1, 2, raw=TRUE), data = dataset)
注意:所有通过变换得到的线性回归结果,还原到原模型时误差项的假设会发生变化,如果你需要原模型的误差项满足正态同分布假设,建议优先用nls()做非线性最小二乘拟合,而非线性化变换。
内容的提问来源于stack exchange,提问作者polycodor
相关产品推荐
相关产品推荐

