Kommentarer
Svar
Der er en forskel mellem montering af en gaussisk distribution og montering af en gaussisk tæthedskurve . Hvad normalmixEM
laver er det førstnævnte. Det, du vil have, er (tror jeg) det sidstnævnte.
At montere en distribution er groft sagt hvad du ville gøre, hvis du lavede et histogram af dine data og forsøgte at se, hvilken form den havde. Hvad du i stedet laver, er simpelthen at tegne en kurve. Denne kurve har tilfældigvis en pukkel i midten, ligesom hvad du får ved at tegne en gaussisk densitetsfunktion.
For at få det, du vil, skal du kan bruge noget som optim
til at tilpasse kurven til dine data. Følgende kode bruger ikke-lineære mindste kvadrater til at finde de tre parametre, der giver den bedst passende gaussiske kurve: m
er det gaussiske gennemsnit, s
er standardafvigelsen, og k
er en vilkårlig skaleringsparameter (siden den gaussiske tæthed er begrænset til at integrere til 1, hvorimod dine data 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
- Spillede rundt med denne løsning, men du slog mig 🙂 Når jeg spillede rundt, bemærkede jeg, at de indledende startværdier, der blev givet til
optim
, betød meget , så Sørg for at kontrollere pasformen grafisk, når du bruger denne metode.
An svare
Jeg foreslår at bruge ikke-lineære mindste kvadrater til denne analyse.
# 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 output kunne jeg få følgende monterede “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) )
Tilpasningen er ikke fantastisk … Ville “ta $ x \ mapsto \ sin (x) / x $ funktion være en bedre model?
Kommentarer
- Tak. Jeg får resterende sum af kvadrater: 0,01997. Jeg tror, jeg får nøjagtig det samme med løsningen fra Hong Ooi ovenfor. Er algo den samme? Hvordan plotter jeg også resultatet af nls?
- Ja, algoritmerne er de samme i den forstand, at hvis de fungerer (ikke ' ikke sidde fast i nogle lokalt minimum) de giver det samme svar. Afhængig af den værdi, der er givet til
method=
, kan de være nøjagtigt de samme. - Jeg tilføjede to linjer for at generere plottet.
dput(r)
til at generere en streng, der let kan kopieres ' n '. Nu skal vi indtaste dataene i r manuelt …R
-løsning til en diskret variabel som dinIndex
vises ved stats.stackexchange. com / a / 43004/919 ; enR
løsning til en kontinuerlig variabel er ved stats.stackexchange.com/questions/70153/… ; og en Excel-løsning findes på stats.stackexchange.com/a/11563/919 .