我正尝试将数据拟合为如下所示的回归模型:y=betaMu+betaA*Xa+betaD*Xd+si
,其中si
是具有正态分布的误差项。我在下面编写了代码,其中phen[,2]
是y
的数据,data.xa[,1]
是Xa
,而data.xd[,1]
是Xd
:
library(stats4)
ll <- function(betaM,betaA,betaD, mu, sigma){
R= phen[,2]-betaM-betaA*data.xa[,1]-betaD*data.xd[,1]
R = suppressWarnings(dnorm(R, mu, sigma, log=TRUE))
-sum(log(R))
}
fit <- mle(ll,start = list(betaM = 1, betaA = 1,betaD=1 ,mu = -1, sigma=1.5))
但我一直收到此错误:
optim中的错误(start,f,method = method,hessian = TRUE,...): 'vmmin'中的初始值不是有限的 另外:警告消息: 在log(R)中:产生的NaN
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
您似乎正在计算对数可能性的对数(即,两次对数,大概是偶然的)。如果您的任何概率密度均小于1,则对数密度将为负,取对数密度的对数将得出NaN
。代替
R = suppressWarnings(dnorm(R, mu, sigma, log=TRUE))
-sum(log(R))
,尝试
LL <- dnorm(R, mu, sigma, log=TRUE)
-sum(LL)
也:(1)禁止警告是一种不好的做法,除非您绝对无法找到避免警告的方法。 (2)重新分配R
的值可能会造成混乱(尽管在这种情况下无害)。