微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么R中的nls非线性模型方程与Excel不同?

如何解决为什么R中的nls非线性模型方程与Excel不同?

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

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

这是关于模型的参数。

enter image description here

它说y = 0.85844 x ^ 1.37629

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

enter image description here

如果我在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),80)) +
  theme_bw() + 
  theme(panel.grid = element_blank())

enter image description here

解决方法

Excel实际上并没有进行非线性回归。它可以进行变换并进行线性回归。

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

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

这是Excel给我的:

Excel diagram with fit

这是我通过非线性回归得到的:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。