Qual é a maneira mais fácil de ajustar as curvas de crescimento logístico em R?


19

Isso não é tão fácil para o Google como algumas outras coisas, como, para ser claro, não estou falando de regressão logística no sentido de usar a regressão para prever variáveis ​​categóricas.

Estou falando de ajustar uma curva de crescimento logístico a determinados pontos de dados. Para ser específico, é um determinado ano de 1958 a 2012 e é o ppm de CO2 global estimado (partes por milhão de dióxido de carbono) em novembro do ano .xyx

No momento, está acelerando, mas precisa se estabilizar em algum momento. Então, eu quero uma curva logística.

Ainda não encontrei uma maneira relativamente direta de fazer isso.


3
Uma curva logística não é a única curva que se estabiliza. De fato, um múltiplo de qualquer cdf contínuo satisfaria esse requisito.
Glen_b -Reinstala Monica

2
Use o pacote grofit Utiliza spline e curvas de crescimento.

Nick, muito obrigado por posicionar seu código, eu estava pensando em como escrevê-lo como uma equação? no código os valores C, a e K se referem a quais parâmetros?

1
Eu acho que você está me levando para ser @ user2581681. Acabei de editar a resposta deles.
Nick Cox

Respostas:


19

Veja a nls()função. Ele possui uma função de modelo de curva logística auto-iniciada via SSlogis(). Por exemplo, na ?nlspágina de ajuda

> library("nls")
> DNase1 <- subset(DNase, Run == 1)
>      
> ## using a selfStart model
> fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), 
+                  DNase1)

Sugiro que você leia as páginas de ajuda para essas funções e, provavelmente, as referências vinculadas, se possível, para saber mais.


9

Eu tive a mesma pergunta há pouco tempo. Isto é o que eu encontrei:

Fox e Weisberg escreveram um ótimo artigo suplementar usando a função nls (com e sem a opção de autoinicialização mencionada por Gavin). Pode ser encontrado aqui:

http://socserv.mcmaster.ca/jfox/Books/Companion/appendix/Appendix-Nonlinear-Regression.pdf

A partir desse artigo, acabei escrevendo uma função para minha classe usar ao ajustar uma curva logística aos dados:

###Log fit - be sure to use quotes around the variable names in the call
log.fit <- function(dep, ind, yourdata){
#Self-starting...

y <- yourdata[, dep]
x <- yourdata[, ind]

log.ss <- nls(y ~ SSlogis(x, phi1, phi2, phi3))

#C
C <- summary(log.ss)$coef[1]
#a
A <- exp((summary(log.ss)$coef[2]) * (1/summary(log.ss)$coef[3]))
#k
K <- (1 / summary(log.ss)$coef[3])

plot(y ~ x, main = "Logistic Function", xlab=ind, ylab=dep)
lines(0:max(x), predict(log.ss, data.frame(x=0:max(x))), col="red")

r1 <- sum((x - mean(x))^2)
r2 <- sum(residuals(log.ss)^2)

r_sq <- (r1 - r2) / r1

out <- data.frame(cbind(c(C=C, a=A, k=K, R.value=sqrt(r_sq))))
names(out)[1] <- "Logistic Curve"

return(out)
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.