Komentáře
t nevytvoříte sekvenci datových hodnot, abyste viděli rozdělení. Představuje $ r $ již frekvenci nebo hustotu pravděpodobnosti datových hodnot?
R
řešení pro diskrétní proměnnou, jako je vaše Index
, se objeví na stats.stackexchange. com / a / 43004/919 ; R
řešení pro spojitou proměnnou je na stats.stackexchange.com/questions/70153/… ; a řešení Excel je na stats.stackexchange.com/a/11563/919 . odpověď
Existuje rozdíl mezi přizpůsobením gaussovské distribuce a přizpůsobením gaussovské křivky hustoty . Co dělá to první. To, co chcete, je (myslím) druhé.
Přizpůsobení distribuce je zhruba řečeno to, co byste dělali, kdybyste vytvořili histogram vašich dat a zkoušel zjistit, jaký tvar to mělo. Místo toho prostě děláte vykreslování křivky. Tato křivka má uprostřed hrb, jako to, co získáte vykreslením funkce gaussovské hustoty.
Chcete-li získat, co chcete, musíte může použít něco jako optim
k přizpůsobení křivky vašim datům. Následující kód použije nelineární nejmenší čtverce k vyhledání tří parametrů poskytujících nejvhodnější gaussovu křivku: je gaussovský průměr, s
je standardní odchylka a k
je libovolný parametr měřítka (protože Gaussova hustota je omezena na integraci na 1, zatímco vaše data nejsou „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))
Komentáře
- Zahrál jsem si s tímto řešením, ale porazili jste mě 🙂 Když jsem si zahrál, všiml jsem si, že počáteční počáteční hodnoty dané
optim
záležely hodně , takže při použití této metody nezapomeňte graficky zkontrolovat uložení.
An swer
Navrhuji pro tuto analýzu použít nelineární nejmenší čtverce .
# 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 z výstupu se mi podařilo získat následující přizpůsobenou „Gaussovu křivku“:
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) )
Přizpůsobení není úžasné … Nebyla by funkce $ $ \ mapsto \ sin (x) / x $ lepší model?
Komentáře
- Díky. Získávám zbytkový součet čtverců: 0,01997. Myslím, že s řešením od Hong Ooi výše dostávám přesně to samé. Je algo stejné? Jak také vykreslím výsledek NLS?
- Ano, algoritmy jsou stejné v tom smyslu, že pokud fungují (ne ' uvíznou v některých místní minimum) dávají stejnou odpověď. V závislosti na hodnotě dané
method=
mohou být přesně stejné. - Přidal jsem dva řádky pro vygenerování grafu.
dput(r)
vygenerujte řetězec, který lze snadno kopírovat ' n ' pastable. Nyní musíme údaje do r zadat ručně …