그래서 저는 4 개의 매개 변수를 기반으로 로그 가능성을 계산하고 특정 log-lik 함수에 넣기 위해 스크립트 작업을 해왔습니다. 그 스크립트는 괜찮습니다. 문제는 그것을 최적화하는 것입니다. 시도 할 때마다 문제의 매개 변수에 대한 개체를 찾을 수 없다고합니다. 간단히하기 위해 optim() 함수를 사용할 때 동일한 오류를주는 훨씬 간단한 스크립트 만 사용합니다. 재미있는 부분은 실제로이 스크립트를 "MLE in R"자습서에서 직접 가져온 것입니다. 필자는 다시 작성하지 않았으며, 문자 그대로 PDF에서 복사/붙여 넣기했습니다. 튜토리얼의 우도 함수는 다음과 같습니다.R 함수 optim() : object not found
normal.lik1<-function(theta,y){
mu<-theta[1]
sigma2<-theta[2]
n<-nrow(y)
logl<- -.5*n*log(2*pi) -.5*n*log(sigma2) - (1/(2*sigma2))*sum((y-mu)**2)
return(-logl)
}
이 함수는 자체적으로 완벽하게 작동합니다. 그러나 최적화하려고 할 때 개체를 찾을 수 없다는 오류가 발생합니다. 개체는 최적화하려고하는 매개 변수입니다.
optim(c(0,1),normal.lik1,y=y,method="BFGS")
내가이 줄을 실행하면, R은 나에게 다음과 같은 오류를 제공합니다 :이 다음 줄은/튜토리얼에서 붙여 복사 즉시 내가 그것을 어떻게 Y에 대해 이야기하고 있음을 깨닫게했다
Error in nrow(y) : object 'y' not found
전역 함수가 아니라 함수 내에있는 객체입니다. 그러나 동시에 optim() 함수는 그 함수를 평가해야합니다! 그래서, 왜 y가 존재하지 않는 것처럼 행동하는지 모르겠습니다.
편집 :
이제 어떻게 작동하는지 이해합니다. 하지만 전반적인 목표에 여전히 문제가 있습니다. 관점에 더 많은 말하면, 여기에 내가 지금 함께 일하고 코드입니다 :
w.loglik<-function(w){
# w is just a vector with 4 values: two means (w(1) and w(2) below) and the position
# of two decision bounds (w(3) and w(4))
#create data matrix
data<-matrix(c(140,36,34,40,89,91,4,66,85,5,90,70,20,59,8,163),nrow=4,ncol=4,byrow=TRUE)
# get means
means<-matrix(0,4,2,byrow=TRUE)
means[2,1]<-w[1]
means[3,2]<-w[2]
means[4,1]<-w[1]
means[4,2]<-w[2]
# get covariance matrices (fix variances to 1)
covmat<-list()
covmat[[1]]<-diag(2)
covmat[[2]]<-diag(2)
covmat[[3]]<-diag(2)
covmat[[4]]<-diag(2)
# get decision bound parameters
b<-diag(2)
c<-matrix(c(w[3],w[4]),2,1)
L<-matrixloglik(data,means,covmat,b,c)
return(L)
}
matrixloglik 그냥 로그 가능성을 (이 잘 실행)를 출력하는 기능입니다. 어떻게하면 벡터를 최적화 할 수 있도록 optim()을 실행할 수 있습니까?
감각을 좋아 만드는. 그 이유는, theta.true가 theta.true [1 : 2] 부분에서 볼 수있는 것처럼 첫 번째 2에만 종속적 인 경우 theta.true가 3 개의 값으로 정의되는 이유는 무엇입니까? 내 특정 코드의 경우, 4 개의 값을 포함하는 벡터 w를 입력하여 로그 우도를 출력합니다. 나는 이것들을 극대화하고 싶지만 어떻게해야할지 모르겠다. – saltthehash
여기서 행렬 곱셈을하고 있으므로 행렬 곱셈 규칙을 따라야합니다. 위의 업데이트를 참조하십시오. – Metrics