范数错误:如何处理数学函数的非数值参数

时间:2019-06-18 02:30:44

标签: r mle

每个人。我想在R中使用dnorm对ols进行最大似然估计,但是它表明“数学函数的非数字参数”,我想知道是否可以对我的代码有所帮助。

尽管许多书籍表明我们可以使用mle来手动估计ols,但我想知道dnorm是否可以用作层中的nomalden。而且dnorm也是我整个似然函数的重要组成部分。

以下是我的代码:

slope1 <- -.3;slope2 <- .3;slope3 <- 1.8; slope4 <- 0.5;intercept1 <- 1.5    # generating data from C_1
age <- sample(seq(-2,2,len=201), 40)
grade <- sample(seq(-2,2,len=201), 40)
not_smsa <- sample(seq(-2,2,len=201), 40)
wage <- intercept1 + slope1*age +slope2*grade + slope3*not_smsa + rnorm(length(age),0,.15) # add some noise

# model matrix `X` and response `Y`
X <- cbind(1, age , grade , not_smsa )
Y <- wage
K<- ncol(X)
mydata <- cbind.data.frame(X,Y)
# initial guess on coefficients
ans <- lm(wage ~ age + grade + not_smsa, 
          data = mydata)
vi <- c(coef(ans))
#log likelihood function
ols.nll <- function (beta) {
  eta <- (Y-X %*% beta)/sigma
  p <- dnorm(Y,eta,sigma)
  -sum(log(p),na.rm=T)
}
#mle
fit <- optim(vi, ols.nll , method = "BFGS", hessian = TRUE)
fit$par

感谢您的关注,期待您的帮助

0 个答案:

没有答案