[英]How to pass from lm.fit to optim in R?
我正在使用函數進行線性回歸,並且工作正常。
fun <- function(x1, x2, y) {
但是現在我有了一個非線性方程,因此我想在上面的Fun
使用optim
而不是lm.fit
。
優化函數在這里:
f <- function(p){
sum((y - (p[1]*x1+p[2]*x2+p[3])^p[4]+p[5])^2)
}
p <- optim(rep(.5, 5), f)$par
請問如何在第一個中實現此功能? 並刪除lm.fit
如果您決定使用optim
,則可以嘗試以下方法:
make.fun <- function(x1,x2,y,n.keep=3) {
keep <- !(is.na(x1) | is.na(x2) | is.na(y))
if (sum(keep)<n.keep) return()
function(p){
sum((y - (p[1]*x1+p[2]*x2+p[3])^p[4]+p[5])^2)
}
}
f <- make.fun(x1,x2,y)
p <- if (is.null(f)) rep(NA,5) else optim(rep(.5,5),f)$par
在這里, make.fun
測試是否有足夠完整的行,如果是,則返回要最小化的函數。 該函數在其環境中將已經具有x1
, x2
和y
,因此僅需要p
作為輸入,這對於optim
方便使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.