Я хотел бы подогнать экспоненциальные кривые к группам 1 и 2 в таблице данных, показанной ниже, и получить новый столбец, содержащий остаточную стандартную ошибку, соответствующую каждой группе.Экспоненциальная кривая должна следовать за y=a*exp(b*x)+c
## Example data table
DT <- data.table(
x = c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8),
y = c(15.4,16,16.4,17.7,20,23,27,35,25.4,26,26.4,27.7,30,33,37,45),
groups = c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)
Однако я знаю только, как подгонять кривые nls и получать остаточную стандартную ошибку отдельных групп, используя код, приведенный ниже, который оценивает хорошие начальные параметры a , b и c :
subsetDT <- DT[group == 1]
c.0 <- min(subsetDT[,y]) * 0.5
model.0 <- lm(log(y- c.0) ~ x, data=subsetDT)
start <- list(a=exp(coef(model.0)[1]), b=coef(model.0)[2], c=c.0)
model <- nls(y ~ a * exp(b * x) + c,
data = subsetDT, start = start,
control = nls.control(maxiter=500))
sigma <- summary(model)$sigma
Я не хочу подгруппировать DT
группой в цикле для вычисления sigma
идругая информация о модели.
Я знаю, что если бы я использовал lm
, я мог бы сделать следующее, чтобы получить новые столбцы, содержащие информацию о модели:
DT[, `:=` (r.squared=summary(lm(log(y)~x))$r.squared,
int=coef(lm(log(y)~x))[1],
coeff=coef(lm(log(y)~x))[2]
), by=c("groups")]
Как я могуиспользуйте :=
, чтобы соответствовать экспоненциальной кривой и включить мои nls параметры a , b и c ?