Există o diferență între potrivirea unei distribuții gaussiene și potrivirea unei curbe de densitate gaussiene. Ce normalmixEM
face este primul. Ceea ce doriți este (cred) cel din urmă.
Ajustarea unei distribuții este, aproximativ vorbind, ceea ce ați face dacă ați făcut o histogramă din datele dvs. și am încercat să văd ce fel de formă avea. În schimb, ceea ce faci, este pur și simplu să trasezi o curbă. Curba respectivă are o cocoașă la mijloc, la fel ca ceea ce obții trasând o funcție de densitate gaussiană.
Pentru a obține ceea ce vrei, poate folosi ceva de genul optim
pentru a se potrivi curbei cu datele dvs. Următorul cod va utiliza cele mai mici pătrate neliniare pentru a găsi cei trei parametri care dau cea mai potrivită curbă gaussiană: m
este media gaussiană, s
este abaterea standard și k
este un parametru de scalare arbitrar (deoarece densitatea gaussiană este constrânsă să se integreze la 1, în timp ce datele dvs. nu sunt „t).
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))
Comentarii
Vă propun să utilizați cele mai mici pătrate neliniare pentru această analiză.
# 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))
Și din rezultat, am putut obține următoarea „curbă Gaussiană” montată:
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) )
Potrivirea nu este uimitoare … Nu ar fi funcția ta $ x \ mapsto \ sin (x) / x $ model mai bun?
Comentarii