R语言代码运行报错attempt to apply non-function,请求问题排查
问题分析与解决
直接报错原因:代码最后一项
(lambda-1)(sum(log(y)))存在语法错误。在R中,乘法必须显式使用*运算符,这里R会误将lambda-1当作函数去调用后面的sum(log(y)),因此触发"attempt to apply non-function"错误。修正后的代码:
loglik <- function(y, theta) { mu <- theta[1] sigma2 <- theta[2] lambda <- theta[3] n <- length(y) -0.5*n*log(2*pi) - 0.5*n*log(sigma2) - sum( ((y^lambda - 1)/lambda - mu)^2 )/(2*sigma2) + (lambda - 1)*sum(log(y)) }
补充说明:除了补全乘法符号*,代码中还调整了sum的括号位置。原代码是sum(...)^2(先求和再平方),如果你的模型要求的是残差平方和(即每个残差先平方再求和),sum( ((y^lambda - 1)/lambda - mu)^2 )才是正确的写法,这也是多数对数似然计算的标准逻辑,你可以结合自己的模型公式确认这一点。
内容的提问来源于stack exchange,提问作者user367987
相关产品推荐
相关产品推荐

