2

我正在使用minpack.lmMicrosoft 版本或 R 上的包运行非线性最小平方。但是,对于每个复制,使用相同的数据,输出会有所不同。事实上,我的兴趣在于第二个参数,然而,即使它也有一些变化。Basenlminb将返回相同的尴尬输出。

如果我使用 R 的 CRAN 版本,结果是可重现的。

可重现的例子:

library(minpack.lm)

df_ss <- read.csv("example.csv")

objective <- function(start, data_ss = df_ss) {

  beta_const <- start[1]
  beta_1 <- start[2:2]
  beta_poly <- start[-(1:2)]


  poly_df <- with(data_ss, cbind((var5 - var4 * beta_1)))
  poly_df <- poly(poly_df, degree = 2, raw = TRUE)


  poly_df <- poly_df %*% diag(beta_poly, nrow = length(beta_poly))


  lp2 <- qr(cbind(const = 1 * beta_const, poly_df))
  lp2 <- with(data_ss, qr.resid(lp2, y_ss - data_ss$var4 * beta_1))

  return(lp2)
}

start <- rep(0, 4)

ss_reg <- nls.lm(par = start, fn = objective)
print(ss_reg$par)
#2.227202e-06 -1.660069e-01  4.659955e-07  2.169863e-07

ss_reg <- nls.lm(par = start, fn = objective)
print(ss_reg$par)
#-1.022907e-06 -1.658407e-01  4.678488e-08  9.447334e-07    

ss_reg <- nls.lm(par = start, fn = objective)
print(ss_reg$par)
#1.911939e-06 -1.658408e-01  2.513519e-07 -2.140628e-07

ss_reg <- nls.lm(par = start, fn = objective)
print(ss_reg$par)
#-5.765922e-07 -1.658408e-01  3.606956e-07  5.372434e-07

使用的数据在这里

难道我做错了什么?

4

0 回答 0