Tähän kysymykseen on jo annettu vastauksia :

kommentit

  • r ei selvästikään ole normaalia. Sen jakauma on oikeassa vinossa (paljon pieniä arvoja lähellä 0, muutama iso arvo). Näet tämän kirjoittamalla " hist (r) ".
  • Vinkki! Käytä dput(r) -merkkiä luomaan merkkijono, joka on helposti kopioitava ' n ' liitettävissä. Nyt meidän on syötettävä tiedot r: ään manuaalisesti …
  • @RasmusB å å kiitos, minä Etsin komentoa 🙂 Muokkasin kysymystä.
  • Et ' piirtä sarjaa data-arvoja nähdäksesi jakelu. Edustaako $ r $ jo data-arvojen taajuutta vai todennäköisyystiheyttä?
  • Olen vastannut tähän kysymykseen useita kertoja useissa yhteyksissä. R -ratkaisu erilliselle muuttujalle, kuten Index, näkyy stats.stackexchange. fi / a / 43004/919 ; R -ratkaisu jatkuvalle muuttujalle on osoitteessa stats.stackexchange.com/questions/70153/… ; ja Excel-ratkaisu on osoitteessa stats.stackexchange.com/a/11563/919 .

Vastaa

Gaussin jakauman ja gaussin tiheyskäyrän sovittamisen välillä on ero. Mitä normalmixEM on ensimmäinen. Haluamasi on (luulen) jälkimmäinen.

Jakelun sovittaminen on karkeasti sanottuna mitä tekisit, jos tekisit histogrammin ja yritti nähdä millainen muoto sillä oli. Sen sijaan teet sen sijaan yksinkertaisesti käyrän piirtämistä. Käyrällä on satunnaisesti keskellä kohouma, kuten mitä saat saamalla piirtämällä gaussian tiheysfunktion.

Saadaksesi mitä haluat, sinun on voi käyttää jotain esimerkiksi optim, jotta käyrä sovitetaan tietoihisi. Seuraava koodi käyttää epälineaarisia pienimmän neliösumman etsimiseen kolmea parametria, jotka antavat parhaiten sopivan gaussin käyrän: m on gaussin keskiarvo, s on keskihajonta ja k on mielivaltainen skaalausparametri (koska Gaussin tiheys on pakko integroida arvoon 1, kun taas tietosi eivät ole ”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)) 

Kommentit

  • Pelasin tällä ratkaisulla, mutta sinä voitit minut 🙂 Pelatessani huomasin, että optim -kohdalle annetut alkuperäiset lähtöarvot olivat tärkeitä paljon , joten kun käytät tätä menetelmää, tarkista sopivuus graafisesti.

An swer

Ehdotan, että tähän analyysiin käytetään epälineaarista pienintä neliötä .

# 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)) 

Ja lähdöstä sain seuraavan sovitetun ”Gaussin käyrän”:

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) ) 

kirjoita kuvan kuvaus tähän

Sopivuus ei ole hämmästyttävä … Eikö ta ”x $ mapsto \ sin (x) / x $ -funktio olisi parempi malli?

Kommentit

  • Kiitos. Saan jäännösneliösumman: 0,01997. Luulen, että saan täsmälleen saman edellä olevan Hong Ooin ratkaisun kanssa. Onko algo sama? Kuinka piirrän myös nls: n tuloksen?
  • Joo, algoritmit ovat samat siinä mielessä, että jos ne toimivat (don ' ei juutu joihinkin paikallinen minimi), he antavat saman vastauksen. method= -arvolle annetusta arvosta riippuen ne voivat olla täsmälleen samat.
  • Lisäsin kaksi riviä juovan luomiseksi.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *