[英]Coefficients from power regression in R do not match Excel
我在R和Excel中都创建了长度与干重的幂回归方程,但是系数不匹配。
我从此链接使用了Hong Ooi的答案 : R中的幂回归类似于excel 。 在该代码中,他们能够使用R代码从Excel复制幂方程。 但是,当我尝试时,我得到了一些非常奇怪的系数。 使用随机长度进行测试时,来自幂趋势线的Excel方程更为精确。
代码如下:
#sample dataset of Lengths and Dry Masses
test <- structure(list(
Length = c(23, 17, 16, 25, 15, 25, 11, 22, 13, 21, 31),
DryMass = c(3.009, 1.6, 1, 4.177, 0.992, 6.166, 0.7, 1.73, 0.613, 3.429, 7.896)),
.Names = c("Length", "DryMass"),
row.names = c(NA, 11L),
class = "data.frame")
#log-log regression
lm(formula = log(Length) ~ log(DryMass), data = test)
Coefficients:
(Intercept) log(DryMass)
2.7048 0.3413
一旦我转换了截距(EXP(2.7048)= 14.9515),这应该给我方程式“ 14.9515 * x ^ 0.3413”。 我试图用一些随机长度对其进行测试,但预测还很遥远。
但是,Excel给出的公式为“ 0.0009 * x ^ 2.6291”,经测试,该公式非常准确。 我只是使用Excel中的方程式,但我需要再增加50个方程式,并希望使用R将其自动化。
您正在尝试拟合以下模型。
library(ggplot2)
ggplot(test, aes(x = log(DryMass), y = log(Length))) +
theme_bw() +
geom_point() +
scale_y_continuous(limits = c(0, 5)) +
geom_smooth(formula = y ~ x, method = "lm", se = FALSE)
我相信(截距)(第一个系数)是线在x = 0处与y交叉的位置。 在上面的图像中,该值似乎介于2.5和3之间,所以说2.8,如果您问我的话,这很接近2.7。 也许Excel是错误的,在这种情况下,我建议您联系他们的作者? 或者,也许您正在Excel中做某事而在这里没有被听到,因此可以说该工具的可重复性。
编辑:
您在R中切换了x和y。
mod_linearized <- lm(formula = log(DryMass) ~ log(Length), data = test)
exp(coef(mod_linearized)[1])
# (Intercept)
#0.0008775079
旧答案(可能仍然有用):
线性化模型的逆变换与非线性模型不同,因为误差项不同:
逆变换的线性化模型导致乘法误差:y = exp(a)* x ^ b * exp(epsilon)
非线性模型具有加法误差:y = a * x ^ b + epsilon
基本上,线性化等效于数据点的不同加权(较大的值加权较小)。 这实际上可能是理想的(取决于您的特定数据生成过程)。 但是有时您想要相等的权重,然后应该拟合非线性模型。
您可以在R中进行非线性回归:
mod_linearized <- lm(formula = log(Length) ~ log(DryMass), data = test)
exp(coef(mod_linearized)[1])
#(Intercept)
# 14.95152
mod_nonlinear <- nls(Length ~ a * DryMass ^ b, data = test,
#use result from linearization as starting values:
start = list(a = exp(coef(mod_linearized)[1]),
b = coef(mod_linearized)[2]))
coef(mod_nonlinear)[1]
# a
#15.2588
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.