我正在使用Microsoft版本或R上的minpack.lm
包运行非线性最小方块。但是,对于每个复制,使用相同的数据,输出会有所不同。事实上,我的兴趣在于第二个参数,然而,即使它有一些变化。 Base nlminb
将返回相同的尴尬输出。
如果我使用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
使用的数据是here。
我做错了吗?