Kommentarer
Svar
Det er en forskjell mellom å montere en gaussisk fordeling og montere en gaussisk tetthetskurve . Hva normalmixEM
gjør er førstnevnte. Det du vil ha (antar jeg) sistnevnte.
Å montere en distribusjon er, grovt sett, hva du ville gjort hvis du laget et histogram av dataene dine, og prøvde å se hva slags form den hadde. Det du i stedet gjør, er ganske enkelt å tegne en kurve. Den kurven har tilfeldigvis en pukkel i midten, som det du får ved å tegne en gaussisk tetthetsfunksjon.
For å få det du vil, du kan bruke noe sånt som optim
for å tilpasse kurven til dataene dine. Følgende kode vil bruke ikke-lineære minste kvadrater for å finne de tre parametrene som gir den best passende gaussiske kurven: m
er det gaussiske gjennomsnittet, s
er standardavviket, og k
er en vilkårlig skaleringsparameter (siden den gaussiske tettheten er begrenset til å integrere til 1, mens dataene dine ikke er «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))
Kommentarer
- Lekte rundt med denne løsningen, men du slo meg 🙂 Da jeg spilte rundt, la jeg merke til at de opprinnelige startverdiene som ble gitt til
optim
, betydde mye , så sørg for å sjekke passformen grafisk når du bruker denne metoden.
An sv
Jeg foreslår å bruke ikke-lineære minste kvadrater til denne analysen.
# 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))
Og fra utgangen kunne jeg oppnå følgende monterte «Gaussiske kurve»:
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) )
Passformen er ikke fantastisk … Ville ikke «ta $ x \ mapsto \ sin (x) / x $ funksjon være en bedre modell?
Kommentarer
- Takk. Jeg får resterende sum av kvadrater: 0.01997. Jeg tror jeg får akkurat det samme med løsningen fra Hong Ooi ovenfor. Er algo den samme? Også hvordan tegner jeg resultatet av nls?
- Ja, algoritmene er de samme i den forstand at hvis de fungerer (ikke ' ikke blir sittende fast i noen lokalt minimum) gir de samme svaret. Avhengig av verdien gitt til
method=
kan de være nøyaktig de samme. - Jeg la til to linjer for å generere plottet.
dput(r)
til å generere en streng som enkelt kan kopieres ' n '. Nå må vi legge inn dataene i r manuelt …R
-løsning for en diskret variabel somIndex
vises på stats.stackexchange. com / a / 43004/919 ; enR
løsning for en kontinuerlig variabel er på stats.stackexchange.com/questions/70153/… ; og en Excel-løsning er på stats.stackexchange.com/a/11563/919 .