You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()写法为:
    result <- lm(log(Y) ~ X1, data = dataset)
    
    拟合后截距取exp得到β1,斜率直接为β2。
  • 若第二个模型是对数函数模型:Y = β1 + β2*lnX1 + ε,不需要对Y做变换,对应lm()写法为:
    result <- lm(Y ~ log(X1), data = dataset)
    
    拟合输出的截距和斜率直接对应原模型的β1、β2。
  • 若第二个模型是倒数模型: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:54:06