负指数拟合:曲线看起来太高

gin*_*nko 9 r curve-fitting

我试图将负指数拟合到R中的某些数据,但拟合线与数据相比看起来太高,而我使用Excel的内置功率拟合的拟合看起来更可信.有人可以告诉我为什么吗?我已经尝试过使用这个nls()函数,optim()并从这两个方法中获得类似的参数,但两者的拟合看起来都很高.

   x    <- c(5.96, 12.86, 8.40, 2.03, 12.84, 21.44, 21.45, 19.97, 8.92, 25.00, 19.90, 20.00, 20.70, 16.68, 14.90, 26.00, 22.00, 22.00, 10.00, 5.70, 5.40, 3.20, 7.60, 0.59, 0.14, 0.85, 9.20, 0.79, 1.40, 2.68, 1.91)
   y    <- c(5.35, 2.38, 1.77, 1.87, 1.47, 3.27, 2.01, 0.52, 2.72, 0.85, 1.60, 1.37, 1.48, 0.39, 2.39, 1.83, 0.71, 1.24, 3.14, 2.16, 2.22, 11.50, 8.32, 38.98, 16.78, 32.66, 3.89, 1.89, 8.71, 9.74, 23.14)

    xy.frame <- data.frame(x,y)

    nl.fit <- nls(formula=(y ~ a * x^b), data=xy.frame, start = c(a=10, b=-0.7))

    a.est <- coef(nl.fit)[1]
    b.est <- coef(nl.fit)[2]

    plot(x=xy.frame$x,y=xy.frame$y)

    # curve looks too high
    curve(a.est * x^b.est , add=T)
    # these parameters from Excel seem to fit better
    curve(10.495 * x^-0.655, add=T)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

    # alternatively use optim()
    theta.init <- c(1000,-0.5, 50)

    exp.nll <- function(theta, data){
      a <- theta[1]
      b <- theta[2]
      sigma <- theta[3]
      obs.y <- data$y
      x <- data$x
      pred.y <- a*x^b
      nll <- -sum(dnorm(x=obs.y, mean=pred.y , sd=sigma, log=T))
      nll
    }

    fit.optim <- optim(par=theta.init,fn=exp.nll,method="BFGS",data=xy.frame )

    plot(x=xy.frame$x,y=xy.frame$y)

    # still looks too high
    curve(a.est * x^b.est, add=T)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

jos*_*ber 10

您看到意外行为的原因是看起来"太高"的曲线实际上具有比excel曲线低得多的平方误差:

# Fit from nls
sum((y - a.est*x^b.est)^2) 
# [1] 1588.313

# Fit from excel
sum((y - 10.495*x^ -0.655)^2)
# [1] 1981.561
Run Code Online (Sandbox Code Playgroud)

nls支持更高曲线的原因是它正在努力避免小x值的巨大误差,代价是大x值的误差略大.解决此问题的一种方法可能是应用日志日志转换:

mod <- lm(log(y)~log(x))
(a.est2 <- exp(coef(mod)["(Intercept)"]))
# (Intercept) 
#    10.45614 
(b.est2 <- coef(mod)["log(x)"])
#     log(x) 
# -0.6529741 
Run Code Online (Sandbox Code Playgroud)

这些与excel的系数非常接近,并且产生更具视觉吸引力的拟合(尽管在平方误差和度量方面表现更差):

在此输入图像描述