我是一名学生研究职位并且是R的新手。我提出了类似的问题(在此发布:MLE Issues)。我已经解决了最初的问题但是我遇到了这个函数的更多问题。
我仍在使用此功能试图估算theta [i], 其中每个其他变量目前都已知。
以下是我的代码:
maxParam <- function(theta) {
logl <- sum(for (i in 1:length(doses)) {
sum(
for (j in 1:LITTERS.M) {
sum(
for (k in 0:(litterResponses[i,j]-1)) {
sum(log10(probabilityResponses[i] + k * theta[i]))
}
+
for (k in 0:(litterSizes[i,j]-litterResponses[i,j]-1)) {
sum(log10(1 - probabilityResponses[i] + k * theta[i]))
}
-
for (k in 0:(litterSizes[i,j] - 1)) {
sum(log10(1 + k * theta[i]))
}
)
}
)
})
return (-logl)
}
mle.fit <- mle(maxParam, start=list(theta=c(1,1,1,1,1,1)))
print(mle.fit)
我被抛出的错误是:
错误:缺少参数“theta”,没有默认值
如果错误是愚蠢的,我很抱歉,我对R知之甚少。
备注: 我使用(1,1,1,1,1,1)的向量作为theta的测试。这不是实际数据。剂量是6的载体,其对应于血清的剂量水平。凋落物响应是一个矩阵,描述每剂量每剂量血清的反应。 LitterSizes是一个矩阵,描述每窝每窝剂量的大小。 LITTERS.M是与血清接触的初始窝数。 ProbabilityResponses是一个向量,描述了给定小鼠受血清影响的概率。
答案 0 :(得分:3)
函数mle
不接受初始起始值的向量。通过优化找到的每个参数都需要作为标量传递。将函数声明更改为:
maxParam <- function(theta_1 = 1, theta_2 = 1, etc) {
theta <- unlist(as.list(environment()))
... # rest of function follows
}
其中etc
表示根据需要将其替换为theta_3 = 1
,theta_4 = 1
。然后可以使用以下函数调用函数mle
:
mle.fit <- mle(maxParam)
答案 1 :(得分:1)
我有一段时间没有同样的问题。 mle
不接受向量参数,而mle2
则为{1}}。 Have look at this.