R 中的非线性 LAD 回归
Nonlinear LAD regression in R
我想用 LAD 回归估计非线性回归模型的参数。 LAD 估计器本质上是 M 估计器。据我所知,不可能使用 robustbase
包来做到这一点。我如何使用 R 进行 LAD 回归?我可以使用标准包吗?
您可以使用内置的 optim()
函数
补充一些数据(确保x
是正数,这样a*x^b
才有意义-将负数提高到分数次幂是有问题的):
set.seed(101)
a <- 1; b <- 2
dd <- data.frame(x=rnorm(1000,mean=7))
dd$y <- a*dd$x^b + rnorm(1000,mean=0,sd=0.1)
定义objective函数:
objfun <- function(p) {
pred <- p[1]*dd$x^p[2] ## a*x^b
sum(abs(pred-dd$y)) ## least-absolute-deviation criterion
}
测试objective函数:
objfun(c(0,0))
objfun(c(-1,-1))
objfun(c(1,2))
优化:
o1 <- optim(fn=objfun, par=c(0,0), hessian=TRUE)
您确实需要指定起始值,并自行处理任何 numerical/computational 问题...
我不确定我是否知道如何计算标准误差:您可以使用 sqrt(diag(solve(o1$hessian)))
,但我不知道它所基于的标准理论是否仍然适用...
我想用 LAD 回归估计非线性回归模型的参数。 LAD 估计器本质上是 M 估计器。据我所知,不可能使用 robustbase
包来做到这一点。我如何使用 R 进行 LAD 回归?我可以使用标准包吗?
您可以使用内置的 optim()
函数
补充一些数据(确保x
是正数,这样a*x^b
才有意义-将负数提高到分数次幂是有问题的):
set.seed(101)
a <- 1; b <- 2
dd <- data.frame(x=rnorm(1000,mean=7))
dd$y <- a*dd$x^b + rnorm(1000,mean=0,sd=0.1)
定义objective函数:
objfun <- function(p) {
pred <- p[1]*dd$x^p[2] ## a*x^b
sum(abs(pred-dd$y)) ## least-absolute-deviation criterion
}
测试objective函数:
objfun(c(0,0))
objfun(c(-1,-1))
objfun(c(1,2))
优化:
o1 <- optim(fn=objfun, par=c(0,0), hessian=TRUE)
您确实需要指定起始值,并自行处理任何 numerical/computational 问题...
我不确定我是否知道如何计算标准误差:您可以使用 sqrt(diag(solve(o1$hessian)))
,但我不知道它所基于的标准理论是否仍然适用...