Bazı veriler verilen bir fonksiyonun parametrelerini optimize etmeye çalışıyorum. Parametrenin 3 elemanlı bir vektör olduğunu varsayalım. ConstrOptim işlevini kullanarak, parametrelerin toplamının 1'den büyük veya ona eşit olması gereken koşulları ... (constrOptim işlevinin ui ve ci argümanlarını kullanarak) ayarlayabilirim.R: Kısıtlı Optimizasyon: Sınırı sıfır olmayan parametrelerin sayısına ayarlayın
Ancak, 3 elementli parametre vektörünü yalnızca 2 sıfır öğeye sahip olmak için nasıl kısıtlardım? Bir yolu anlayamıyorum - 4. elementin vektörün ilk 3 elementinin bir fonksiyonu olduğu (yani vektörün ilk 3 elementinde sıfır olmayanların sayısını sayar) 4 elementli bir parametre vektörünü belirtmeyi düşündüm ve sonra bunu belli bir sayıyla sınırlandırın) ancak çalışacak bir şey elde edemezsiniz. Herhangi bir fikir (çok takdir)?
#Some simple code as context:
data=cbind(rnorm(5)+1,rnorm(5)+1,rnorm(5)+1)
par=c(0.5,0.3,0.2)
fn=function(par,data) {return(as.numeric(rep(1,times=5)%*%(data%*%par)))}
#setting the conditions that the sum of the parameters must be 1:
u1<-rbind(c(1,1,1),c(-1,-1,-1))
c1<-c(0.999, -1.001)
constr.optim1<-constrOptim(c(0.3,0.3,0.4), f=fn, data=data,grad=NULL, ui=u1, ci=c1)
sum(constr.optim1$par) #=0.99997 which is close enough to 1 as specified
#But how would I set/restrict:
length(which(constr.optim1$par!=0)) #to equal 2 and not 3?