lowbrow 发表于 2016-3-8 18:49 
是否有无效数据?nan表示求根时出现了无效的数或者是负数。
我把代码发给你看下。
lmdata <- function(n, theta){
sigma <- sqrt(theta[length(theta)])
bet <- theta[-length(theta)]
x <- runif(n, -2, 2) # covariates
e <- rnorm(n, 0, sigma) # random error
## including intercept
y <- as.vector(cbind(1, x) %*% bet) + e
dat <- cbind(y, x)
return(dat)
} 这个函数是为了产生随机数
下面是产生似然函数。
likfun <- function(dat, theta){
y <- dat[, 1]
x <- dat[, -1]
sigma2 <- theta[length(theta)]
bet <- theta[-length(theta)]
xb <- as.vector(cbind(1, x) %*% bet)
lik <- sum(log(1/sqrt(2 * pi * sigma2) *exp(-(y-xb)^2/(2*sigma2))))
return(lik)
}
mleFun <- function(dat, theta){
theta.ini <- c(0, 0, 1)
fit <- optim(
par = theta.ini,
fn = function(theta){-likfun(dat, theta)},
method = "BFGS"
)
theta.est <- fit$par
}
n <- 200
theta0 <- c(1, 2, 1^2) 假定三个待估参数分别为斜率,截距以及误差项的方差。
dat=lmdata(n,theta0)
mleFun(dat,theta0)