Commentaires
Réponse
Il « y a une différence entre lajustement dune distribution gaussienne et lajustement dune courbe de densité gaussienne. Quest-ce que normalmixEM
fait est le premier. Ce que vous voulez, cest (je suppose) le second.
Ajuster une distribution est, grosso modo, ce que vous feriez si vous faisiez un histogramme de vos données, et a essayé de voir quel type de forme il avait. Ce que vous faites, à la place, consiste simplement à tracer une courbe. Cette courbe a une bosse au milieu, comme ce que vous obtenez en traçant une fonction de densité gaussienne.
Pour obtenir ce que vous voulez, vous peut utiliser quelque chose comme optim
pour ajuster la courbe à vos données. Le code suivant utilisera les moindres carrés non linéaires pour trouver les trois paramètres donnant la courbe gaussienne la mieux ajustée: m
est la moyenne gaussienne, s
est lécart type et k
est un paramètre de mise à léchelle arbitraire (puisque la densité gaussienne est contrainte de sintégrer à 1, alors que vos données ne sont pas « 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))
Commentaires
- Jai joué avec cette solution mais tu mas battu 🙂 En jouant, jai remarqué que les valeurs de départ initiales données à
optim
importaient beaucoup , donc lorsque vous utilisez cette méthode, assurez-vous de vérifier lajustement graphiquement.
Un swer
Je propose dutiliser les moindres carrés non linéaires pour cette 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))
Et à partir de la sortie, jai pu obtenir la « courbe gaussienne » ajustée suivante:
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) )
Lajustement nest pas étonnant … La fonction $ x \ mapsto \ sin (x) / x $ ne serait-elle pas une meilleur modèle?
Commentaires
- Merci. Jobtiens la somme des carrés résiduelle: 0,01997. Je pense que jobtiens exactement la même chose avec la solution de Hong Ooi ci-dessus. Lalgo est-il le même? Aussi comment tracer le résultat de nls?
- Oui, les algorithmes sont les mêmes dans le sens où sils fonctionnent (ne ' pas rester coincé dans certains minimum local), ils donnent la même réponse. Selon la valeur donnée à
method=
, ils peuvent être exactement les mêmes. - Jai ajouté deux lignes pour générer le graphique.
dput(r)
pour générer une chaîne facilement copiable ' n ' collable. Maintenant, nous devons entrer les données dans r manuellement …R
solution pour une variable discrète comme votreIndex
apparaît à stats.stackexchange. com / a / 43004/919 ; une solutionR
pour une variable continue est à stats.stackexchange.com/questions/70153/… ; et une solution Excel est à stats.stackexchange.com/a/11563/919 .