Erre a kérdésre már itt vannak válaszok :

megjegyzések

  • r egyértelműen nem normális. Eloszlása jobbra ferde (sok 0-hoz közeli kis érték, kevés nagy érték). Ezt a " hist (r) " beírásával fogja látni.
  • Tipp! A dput(r) segítségével olyan karakterláncot hozhat létre, amely könnyen másolható ' n ' beilleszthető. Most kézzel kell beírnunk az adatokat r-be …
  • @RasmusB å å köszönöm, én ezt a parancsot kereste 🙂 Szerkesztettem a kérdést.
  • Ön nem ' nem rajzol ki egy adatérték szekvenciát , hogy lássa a terjesztés. A $ r $ már az adatértékek gyakoriságát vagy valószínűségi sűrűségét képviseli?
  • Többször is válaszoltam erre a kérdésre, több összefüggésben. Egy R megoldás egy olyan diszkrét változóhoz, mint a Index, a stats.stackexchange helyen jelenik meg. com / a / 43004/919 ; a folytonos változóra vonatkozó R megoldás a stats.stackexchange.com/questions/70153/… ; és egy Excel megoldás a stats.stackexchange.com/a/11563/919 címen található.

Válasz

Különbség van a gauss eloszlás és a gauss sűrűség görbe illesztése között. Mi normalmixEM művelet az előbbi. Amit szeretne, az (gondolom) az utóbbi.

A disztribúció illesztése nagyjából szólva azt tenné, ha hisztogramot készítene és megpróbálta megnézni, hogy milyen alakja van. Ahelyett, hogy egyszerűen egy görbét rajzolna. Ennek a görbének történetesen középen van egy púpja, például amit egy gauss-sűrűségfüggvény megrajzolásával kap.

Ahhoz, hogy megkapja, amit akar, valami olyasmit használhat, mint optim, hogy illeszkedjen a görbe adataihoz. A következő kód nemlineáris legkisebb négyzetekkel fogja megtalálni a legjobban illő gaussianus görbét adó három paramétert: m a gauss átlag, s a szórás, a k pedig egy tetszőleges méretezési paraméter (mivel a gaussianus sűrűségét korlátozni kell, hogy integrálódjon 1-re, míg az adatai nem “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)) 

Megjegyzések

  • Játszottam ezzel a megoldással, de engem megvertél 🙂 A játék közben észrevettem, hogy a optim kezdőértékei sokat számítanak , tehát ha ezt a módszert használja, ellenőrizze az illeszkedést grafikusan.

An swer

Javaslom a nemlineáris legkisebb négyzetek használatát ehhez az elemzéshez.

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

A kimenetből pedig a következő illesztett “Gauss-görbét” sikerült megszereznem:

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

írja ide a kép leírását

Az illeszkedés nem csodálatos … Nem lenne “ta $ x \ mapsto \ sin (x) / x $ függvény jobb modell?

Megjegyzések

  • Köszönöm. Maradék négyzetösszeget kapok: 0,01997. Azt hiszem, pontosan ugyanezt értem a fenti Hong Ooi megoldásával. Az algo ugyanaz? Hogyan ábrázolhatom az nls eredményét?
  • Igen, az algoritmusok megegyeznek abban az értelemben, hogy ha működnek (ne ' ne ragadjanak meg egyesek helyi minimum) ugyanazt a választ adják. A (z) method= számára megadott értéktől függően pontosan megegyezhetnek.
  • Két sort adtam hozzá a diagram létrehozásához.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük