【问题标题】:Why nls (non-linear model) equation in R is different from Excel?为什么 R 中的 nls(非线性模型)方程与 Excel 不同?
【发布时间】:2020-10-08 14:18:04
【问题描述】:

我想使用 nls 包检查非线性模型。

power<- nls(formula= agw~a*area^b, data=calibration_6, start=list(a=1, b=1))
summary(power)

这是关于模型的参数。

它说 y= 0.85844 x^1.37629

但是,在 Excel 中(下图)。它说 y= 0.7553 x^1.419

如果我在 R 中制作图表,图表是相同的。为什么同一个模型会产生不同的参数?

我需要更信任哪个等式?你能回答我吗?

非常感谢。

ggplot(data=calibration_6, aes(x=area, y=agw)) + 
  geom_point (shape=19, color="cadetblue" ,size=2.5) +
  stat_smooth(method = 'nls', formula= y~a*x^b, start = list(a = 0, b=0), se=FALSE, color="Dark Red",level=0.95) +
  scale_x_continuous(breaks = seq(0,25,5),limits = c(0,25)) +
  scale_y_continuous(breaks = seq(0,80,10), limits = c(0,80)) +
  theme_bw() + 
  theme(panel.grid = element_blank())

【问题讨论】:

  • 比较两种解决方案的残差标准误差(对于 R,如上所示)或残差平方和,对于 R deviance(power)

标签: r parameters non-linear-regression nls


【解决方案1】:

Excel 实际上并不进行非线性回归。它进行转换并进行线性回归。

让我们在 R 中模拟一些数据。

x <- 1:20
set.seed(42)
y <- 0.7 * x ^1.5 + rnorm(20, sd = 0.1)

这是 Excel 给我的:

这就是我使用非线性回归得到的结果:

fit <- nls(y ~ a * x ^ b, start = list(a = 1, b = 1))

coef(fit)
#        a         b 
#0.7128834 1.4932711 

这是 Excel 方法:

fit_linear <- lm(log(y) ~ log(x))
exp(coef(fit_linear)[1])
# (Intercept) 
# 0.7515136 
coef(fit_linear)[2]
#  log(x) 
#1.471128

如您所见,结果与 Excel 相同。

现在,这两种方法中哪一种是“正确的”取决于您对不确定性的假设。在非线性回归方法中,您有附加误差。在转换数据的线性回归中,存在乘法误差。

另见:

https://stats.stackexchange.com/a/254706/11849

https://stats.stackexchange.com/a/255265/11849

【讨论】:

  • 非常感谢罗兰。你的答案是我迄今为止一直在寻找的。非常感谢!!我认为这是一个愚蠢的问题,但是......如果你必须选择一个方程,你会选择哪一个?来自 Excel 还是 R?我的意思是我应该解释为什么我选择某个方程。例如,如果我说“我选择模型,y= 0.85844 x^1.37629 using formula= agw~a*area^b in R”,这听起来合乎逻辑吗?或者如果我说“我选择模型,y= 0.7553 x^1.419 使用 Excel 趋势线作为幂”,这也正确吗?
  • 根本不是一个愚蠢的问题。在我看来,您的方差随着平均值的增加而有所增加(尽管这种外观有时可能是采样不均匀的产物),这表明变换和回归方法可能更好。您还应该考虑线的差异是否真的对您的结论很重要(如果确实如此,您应该更加谨慎地决定)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2023-04-07
  • 2021-11-20
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多