我正在尝试在R中做MLE以模拟标记重获方法。 我正在尝试最大化此功能;

likelihood <- function(N, p){
  likelihood <- 1
  X <- 0
  for (s in 1:S){
    X <- X + M[s]
  }
  likelihood <- likelihood * p^(X) * (1-p)^(N*S-X)
  likelihood <- likelihood * (factorial(N)/factorial((N-length(U))))
  return(likelihood)
}

我正在尝试最大化N,所有其他参数都是已知的或估计的,因此假定已知

调查了nlm和乐观者,但都做不了我想要的...

回应答案; 感谢您提供所有答案,我重新编码了可能性并设法使某些事情起作用,请参见下面的代码。 专门回答问题/答案1.感谢X <- sum(M[1:S])不错的技巧, X在计数“曾经捕获的所有动物(不是唯一捕获的动物)” 2.在下面的代码中生成M ,根据n(捕获),它是每个调查中标记的动物数量的计数,S是调查数量。

 captures <- function(N, S, P){
   P <- replicate(S, P) #Capture Probability (same across animals and surveys)
   captures <- t(replicate(N, rbinom(S, 1, P))) #Generate capture data from N animals with S surveys with capture Probability P 
   return(captures)
 }

 marked <- function(N, S, captures){ #Count numbers that were marked on each survey
   M <- replicate(S, 0) #Initialise the 'marked' variable to zero
   for (s in 1:S){
     for (i in 1:N){
       if (captures[i, s] == 1){
         M[s] <- M[s] + 1
       }
     }
   }
   return(M)
 }

 unseen <- function(N, S, captures){#Count total number of animals that were unseen on any survey
   U <- array()
   seen <- replicate(N, FALSE) #All animals begin as unseen
   for (i in 1:N){
     for (s in 1:S){
       if (captures[i, s] == 1){
         seen[i] = TRUE
       }
     }
     if (seen[i] == FALSE){
       U <- c(U, i)
     }
   }  
   U <- U[-1] #fix the N/A in the first index
   return(U)
 }

 firstcaught <- function(N, S, captures){#Produce a vector containing how many animals were   caught for the first time on each survey
   fc <- 0
   seen <- replicate(N, FALSE)
     for (s in 1:S){
       fc[s] <- 0
       for (i in 1:N){
         if ((seen[i] == FALSE) && (captures[i, s] == 1)){
             fc[s] <- fc[s] + 1
             seen[i] = TRUE
         }
       }
     }
   return(fc)
 }

 ##Generate data using functions
 N <- 200
 S <- 10
 P <- 0.2
 n <- captures(N,S,P)
 M <- marked(N,S,n)
 U <- unseen(N,S,n)
 fc <- firstcaught(N,S,n) 
 Mc <- cumsum(fc) #A running total of animals that have been captured at least once


 ##Define a likelihood for model M_0
 likelihood <- function(N, P){
  likelihood <- 1
   X <- 0
  for (s in 1:S){
   X <- X + M[s]
    likelihood <- likelihood * (1-P)^(N-M[s])
    likelihood <- likelihood * choose(N-M[s],fc[s])
  }
  likelihood <- likelihood * P^(X) * (1-P)^(-X)
  return(-log(likelihood))
}

##Find the MLE
out <- nlm(f = likelihood, p = 200, P = P, check.analyticals = TRUE) 

  ask by Moohan translate from so

本文未有回复,本站智能推荐:

1回复

优化R中的maxDrawdown()

所以我的交易策略平均有一个超过20%的最大亏损。 我想找到一种优化maxDrawdown() 。 无论如何,我通过DEoptim()找到了很好的文章,但是只展示了投资组合优化的例子。 我不知道这样可行吗? 我创建了一个通过DEoptim()调用MAXDD来优化的函数,这个函数为每个
1回复

R中的优化:最大化和最小化许多变量

我有一个包含70种食物的数据集,以及每种食物的营养价值(蛋白质/盎司,脂肪/盎司,cals / oz等),以及食物的成本/盎司。 我想弄清楚 - 给定一个预算在$ - 什么是最好的食物组合(和每种食物的amt。)将最大化蛋白质,减少脂肪,减少卡路里等。我的目标是这样做跨越一系列价格点,并绘制每
1回复

R中模拟最大似然的有序概率误差

我正在'尝试'对具有随机效应的有序概率模型进行编程,并在R中模拟了最大可能性。 我已经改编了Chris Adolph的代码( http://faculty.washington.edu/cadolph/?page=21 ) 但是,代码给了我以下错误:apply(p3,MARGIN
1回复

如何使用R来解决/挑选最适合工作的人 - 有约束力?

我是R的新手,我正在尝试为Excel中的Solver编写一个脚本。 在下面的数据中,我列出了工作类型为AE的工人。 每个工人都有工资和生产率。 我想要做的是找到10个工人的最大产量,累计工资<100,000。 限制是我需要总共10个工人,我需要2个来自工作类型AD,1个来自E,以及
1回复

在Matlab中定义函数的问题

我在Matlab的第一个晚上遇到了一些麻烦。 我猜中我的桂冠... 我正在尝试解决Euler方程在无限时间内的平衡问题。 Matlab似乎更适合在此问题上进行优化,但是我刚开始定义函数时遇到了一些问题。 这是我所拥有的: 现在哪个正在返回错误: 似乎认为我正在尝试
1回复

建模冲击以最大化R

我目前正在尝试编写代码来解决100x100状态空间上的消耗路径,这可能会对生产造成冲击。 我目前有 不幸的是,当前正在产生该图形http://i.stack.imgur.com/UXoUt.png 在非线性函数中这不是我们应该期望的。 有任何想法吗? 任何帮助将非常感
1回复

R团队名册优化与lpSolve

我是R的新手,我想解决一个特殊的幻想运动队优化问题。 我见过其他帖子使用lpSolve来解决类似的问题,但我似乎无法绕过代码。 下面的示例数据表。 每个球员都在一个团队中,扮演一个特定角色,有薪水,并且每场比赛都有平均分。 我需要的限制是我需要8名球员。 任何一支球队不得超过3名球员。
1回复

在R中将向量强制转换为数字模式

因此,我有一组数据,而我想做的是找到结果曲线上的所有局部最大值。 我读了一个CSV文件,该文件很容易在第一列中包含x值,而在第二步中具有y值。 为了找到最大值,我尝试使用pracma数据库中的findpeaks()函数。 但是,每次我尝试运行它时,都会遇到相同的错误: 因此,我
2回复

使用正整数参数进行优化

我需要解决一个问题,即需要比较具有相同列数的两个矩阵。 其中一个被操纵,直到获得最佳匹配。 我对两个矩阵之间的差异进行评分的方式非常复杂,我仍然需要最终确定它。 我现在真正感兴趣的是找到一个仅使用正整数的搜索/优化算法。 我创建了一个简单的示例,其中包含一个最大化的简单函数。 假设我有
1回复

在R中使用optim,在给定几个变量的情况下,我将如何使其最大化?

我有四个变量的函数,(c,l,t,a) 我只想在c和l上优化此函数,因为a和t是输入,并且在函数内部使用,有时用于索引和填充。 (这就是为什么我不能只接受一阶条件,设置为零等原因)。 有任何想法吗? 谢谢您的帮助。 编辑: 好的,所以我认为问题可能出在我使用优化方