更多 MLE 麻烦
More MLE troubles
我在一个学生研究职位上,是 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)
我抛出的错误是:
Error: argument "theta" is missing, with no default
如果错误很愚蠢,我深表歉意,我对 R 知之甚少。
备注:
我正在使用 (1,1,1,1,1,1) 的向量作为 theta 的测试。这不是实际数据。剂量是 6 的向量,对应于血清的剂量水平。 Litter Responses 是一个矩阵,描述了每窝每剂血清的反应。 LitterSizes 是一个矩阵,描述每窝每剂量的垃圾大小。 LITTERS.M 是与血清接触的初始窝数。 ProbabilityResponses 是一个向量,描述了给定小鼠将受到血清影响的概率。
函数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)
我前一段时间遇到了同样的问题。 mle
不接受向量参数,而 mle2
接受。 Have look at this.
我在一个学生研究职位上,是 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)
我抛出的错误是:
Error: argument "theta" is missing, with no default
如果错误很愚蠢,我深表歉意,我对 R 知之甚少。
备注: 我正在使用 (1,1,1,1,1,1) 的向量作为 theta 的测试。这不是实际数据。剂量是 6 的向量,对应于血清的剂量水平。 Litter Responses 是一个矩阵,描述了每窝每剂血清的反应。 LitterSizes 是一个矩阵,描述每窝每剂量的垃圾大小。 LITTERS.M 是与血清接触的初始窝数。 ProbabilityResponses 是一个向量,描述了给定小鼠将受到血清影响的概率。
函数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)
我前一段时间遇到了同样的问题。 mle
不接受向量参数,而 mle2
接受。 Have look at this.