[英]non linear power regression in R
我有一個類似的問題,我想計算R中的非線性回歸,但是我得到一個錯誤。
這是我的代碼:
f <- function(x1,x2,x3,a,b1,b2,b3) {a * (x1^b1) * (x2^b2) * (x3^b3) }
# generate some data
x1 <- c(9,9,12,12,12,16,9,16)
x2 <- c(0.8,1,0.8,1,1.2,1.2,1.2,1)
x3 <- c(0.14,0.12,0.16,0.14,0.12,0.16,0.16,0.14)
y <- c(304,284,435,489,512,854,517,669)
dat <- data.frame(x1,x2,x3, y)
# fit a nonlinear model
fm <- nls(y ~ f(x1,x2,x3,a,b1,b2,b3), data = dat, start = c(a=0, b1=0,b2=0,b3=0))
# get estimates of a, b
co <- coef(fm)
我收到了這個錯誤:
nlsModel中的錯誤(公式,mf,start,wts):初始參數估計時的奇異梯度矩陣
我該怎么辦?
謝謝!
你需要良好的起始價值:
#starting values from linearization
fit0 <- lm(log(y) ~ log(x1) + log(x2) +log(x3), data=dat)
# fit a nonlinear model
fm <- nls(y ~ f(x1,x2,x3,a,b1,b2,b3), data = dat,
start = list(a=exp(coefficients(fit0)[1]),
b1=coefficients(fit0)[2],
b2=coefficients(fit0)[3],
b3=coefficients(fit0)[4]))
summary(fm)
# Parameters:
# Estimate Std. Error t value Pr(>|t|)
# a 265.19567 114.37494 2.319 0.081257 .
# b1 0.97277 0.08186 11.884 0.000287 ***
# b2 0.97243 0.12754 7.624 0.001589 **
# b3 0.91938 0.17032 5.398 0.005700 **
應遵循非線性模型推薦的常用診斷方法。
另請注意,起始值作為列表提供給nls
。
或根本沒有起始值。 然后nls將使用其“非常便宜的猜測”,它適用於此數據集。
nls(y ~ f(x1,x2,x3,a,b1,b2,b3), data = dat)
順便說一句 - 至少在3.1.0中 - 起始值是“命名列表或命名數字向量”,因此您可以使用
sVec <- coef(lm(log(y) ~ log(x1)+log(x2)+log(x3), dat))
sVec[1] <- exp(sVec[1])
names(sVec) <- c("a", "b1", "b2", "b3")
nls(y ~ f(x1,x2,x3,a,b1,b2,b3), data = dat, start = sVec)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.