가우스 분포 를 맞추는 것과 가우스 밀도 곡선 을 맞추는 것에는 차이가 있습니다. normalmixEM
는 전자입니다. 원하는 것은 후자입니다.
분포를 맞추는 것은 대략적으로 히스토그램을 만들면 할 일입니다. 데이터가 어떤 형태인지 확인하려고했습니다. 대신 여러분이하는 것은 단순히 곡선을 그리는 것입니다. 그 곡선은 가우시안 밀도 함수를 플로팅하여 얻는 것과 같이 중간에 혹이 있습니다.
원하는 것을 얻으려면 optim
와 같은 것을 사용하여 곡선을 데이터에 맞출 수 있습니다. 다음 코드는 비선형 최소 제곱을 사용하여 가장 적합한 가우스 곡선을 제공하는 세 개의 매개 변수를 찾습니다. m
는 가우스 평균이고, s
는 표준 편차이며, k
는 임의의 확장 매개 변수입니다. 가우스 밀도는 1로 통합되도록 제한되지만 데이터는 그렇지 않습니다.
x <- seq_along(r) f <- function(par) { m <- par[1] sd <- par[2] k <- par[3] rhat <- k * exp(-0.5 * ((x - m)/sd)^2) sum((r - rhat)^2) } optim(c(15, 2, 1), f, method="BFGS", control=list(reltol=1e-9))
댓글
이 분석에 비선형 최소 제곱 을 사용할 것을 제안합니다.
# First present the data in a data-frame tab <- data.frame(x=seq_along(r), r=r) #Apply function nls (res <- nls( r ~ k*exp(-1/2*(x-mu)^2/sigma^2), start=c(mu=15,sigma=5,k=1) , data = tab))
출력에서 다음과 같은 적합 “가우스 곡선”을 얻을 수있었습니다.
v <- summary(res)$parameters[,"Estimate"] plot(r~x, data=tab) plot(function(x) v[3]*exp(-1/2*(x-v[1])^2/v[2]^2),col=2,add=T,xlim=range(tab$x) )
적합하지 않습니다. $ x \ mapsto \ sin (x) / x $ function be a 더 나은 모델인가요?
댓글