Usando R para ajustar uma curva a um conjunto de dados usando uma equação específica
Estou usando R. Gostaria de usar uma equação específica para ajustar uma curva a um dos meus conjuntos de dados (anexado)
> dput(data)
structure(list(Gossypol = c(1036.331811, 4171.427741, 6039.995102,
5909.068158, 4140.242559, 4854.985845, 6982.035521, 6132.876396,
948.2418407, 3618.448997, 3130.376482, 5113.942098, 1180.171957,
1500.863038, 4576.787021, 5629.979049, 3378.151945, 3589.187889,
2508.417927, 1989.576826, 5972.926124, 2867.610671, 450.7205451,
1120.955, 3470.09352, 3575.043632, 2952.931863, 349.0864019,
1013.807628, 910.8879471, 3743.331903, 3350.203452, 592.3403778,
1517.045807, 1504.491931, 3736.144027, 2818.419785, 723.885643,
1782.864308, 1414.161257, 3723.629772, 3747.076592, 2005.919344,
4198.569251, 2228.522959, 3322.115942, 4274.324792, 720.9785449,
2874.651764, 2287.228752, 5654.858696, 1247.806111, 1247.806111,
2547.326207, 2608.716056, 1079.846532), Treatment = structure(c(2L,
3L, 4L, 5L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 5L, 1L, 2L, 3L, 4L, 5L,
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L,
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 1L), .Label = c("C", "1c_2d", "3c_2d",
"9c_2d", "1c_7d"), class = "factor"), Damage_cm = c(0.4955, 1.516,
4.409, 3.2665, 0.491, 2.3035, 3.51, 1.8115, 0, 0.4435, 1.573,
1.8595, 0, 0.142, 2.171, 4.023, 4.9835, 0, 0.6925, 1.989, 5.683,
3.547, 0, 0.756, 2.129, 9.437, 3.211, 0, 0.578, 2.966, 4.7245,
1.8185, 0, 1.0475, 1.62, 5.568, 9.7455, 0, 0.8295, 2.411, 7.272,
4.516, 0, 0.4035, 2.974, 8.043, 4.809, 0, 0.6965, 1.313, 5.681,
3.474, 0, 0.5895, 2.559, 0)), .Names = c("Gossypol", "Treatment",
"Damage_cm"), row.names = c(NA, -56L), class = "data.frame")
A equação é:y~yo+a*(1-b^x)
Onde:y = Gossypol
(do meu conjunto de dados)x = Damage_cm
(do meu conjunto de dados)
Os outros três parâmetros são desconhecidos:yo = Intercept
, a = asymptote
eb = slope
Eu acho que tenho que usar o pacotenls2
. Até agora escrevi o seguinte código:
data<-read.csv("Regression_exp2.csv",header=T, sep = ",")
library(nls2)
attach(data)
m<-nls(Gossypol~Y+A*(1-B^Damage_cm),data=data,start = list(Y=1700,A=4000,B=1))
Isso me dá a mensagem de erro:
Erro no nlsModel (fórmula, mf, start, wts): matriz de gradiente singular nas estimativas de parâmetro inicial
No final, eu gostaria de usar a equação para traçar uma curva (com intervalo SE, eu costumo usar ggplot2)
Além disso, gostaria de saber o valor de R2 ep. Eu também estaria interessado nos parâmetrosyo
, a
eb
Eu nunca fiz isso antes e ficaria extremamente grato se alguém pudesse me ajudar ou me dar uma dica de como fazer isso no R? Suponho que tenho que usar uma abordagem não linear (glm (...))
muito obrigado Mike