【发布时间】:2015-11-07 01:29:50
【问题描述】:
我有一个(非对称)概率矩阵和一个观察到的整数结果向量。给定转移矩阵,我想找到一个使结果概率最大化的向量。简而言之,我试图根据它们在陆地上的最终分布来估计海上粒子的分布,以及从海洋中给定点释放的粒子最终到达陆地上给定点的概率矩阵。
我要找到的向量受制于所有分量必须在0-1之间,并且分量之和必须等于1的约束。我试图找出解决问题的最佳优化方法。
我的转换矩阵和数据集都很大,但我在这里创建了一个较小的:
我使用了一个模拟的已知海上分布
msim<-c(.3,.2,.1,.3,.1,0)和一个模拟的概率矩阵(t)来得出一个估计的海岸矩阵(Datasim2),如下:
t<-matrix (c(0,.1,.1,.1,.1,.2,0,.1,0,0,.3,0,0,0,0,.4,.1,.3,0,.1,0,.1,.4,0,0,0,.1,0,.1,.1),
nrow=5,ncol=6, byrow=T)
rownames(t)<-c("C1","C2","C3","C4","C5") ### locations on land
colnames(t)<-c("S1","S2","S3","S4","S5","S6") ### locations at sea
Datasim<-as.numeric (round((t %*% msim)*500))
Datasim2<-c(rep("C1",95), rep("C2",35), rep("C3",90),rep("C4",15),rep("C5",30))
M <-c(0.1,0.1,0.1,0.1,0.1,0.1) ## starting M
我从一个简单的函数开始,如下所示:
EstimateSource3<-function(M,Data,T){
EstEndProbsall<-M%*%T
TotalLkhd<-rep(NA, times=dim(Data)[1])
for (j in 1:dim(Data)[1]){
ObsEstEndLkhd<-0
ObsEstEndLkhd<-1-EstEndProbsall[1,] ## likelihood of particle NOT ending up at locations other than the location of interest
IndexC<-which(colnames(EstEndProbsall)==Data$LocationCode[j], arr.ind=T) ## likelihood of ending up at location of interest
ObsEstEndLkhd[IndexC]<-EstEndProbsall[IndexC]
#Total likelihood
TotalLkhd[j]<-sum(log(ObsEstEndLkhd))
}
SumTotalLkhd<-sum(TotalLkhd)
return(SumTotalLkhd)
}
DistributionEstimate <- optim(par = M, fn = EstimateSource3, Data = Datasim2, T=t,
control = list(fnscale = -1, trace=5, maxit=500), lower = 0, upper = 1)
为了将总和限制为 1,我尝试使用此处发布的一些建议:How to set parameters' sum to 1 in constrained optimization
例如将M<-M/sum(M) 或SumTotalLkhd<-SumTotalLkhd-(10*pwr) 添加到函数体中,但都没有产生类似msim 的任何东西,事实上,第二个解决方案出现了错误“L-BFGS-B 需要'fn'的有限值”
我认为 quadprog 包可能会有所帮助,但我认为我没有对称正定矩阵......
提前感谢您的帮助!
【问题讨论】:
-
请解释你的问题的数学。您知道转移矩阵 T 和陆地 L 上的分布,并且您正在寻找最可能的海上 S 分布?关系是否类似于 L' = S' T?这对我来说就像一个矩阵方程,这里没有什么可以优化的。您要求“最有可能”的解决方案。您如何在流程中引入随机性?
-
感谢您的建议。是的,我们知道转换矩阵(T)和陆地分布(Datasim2),并寻找海洋分布(M)。我正在尝试使用矩阵方程来解决这个问题,但是在尝试获得 T 的伪逆时遇到了问题。我尝试了
invT <- ginv(T),但由于某种原因这不起作用; (invT %*% T 不会产生单位矩阵。我不知道为什么!请注意,我已经转置了转换矩阵以使矩阵方程正常工作。
标签: r optimization constraints