Вычисление значения R ^ 2 для нелинейной регрессии

#r #statistics #regression #non-linear-regression

#r #Статистика #регрессия #нелинейная регрессия

Вопрос:

Сначала я хотел бы сказать, что я понимаю, что вычисление значения R ^ 2 для нелинейной регрессии не совсем корректно или допустимо, что нужно делать.

Тем не менее, я нахожусь в переходном периоде выполнения большей части нашей работы в SigmaPlot к R, и для наших нелинейных моделей (концентрация-реакция) коллеги привыкли видеть значение R ^ 2, связанное с моделью, для оценки соответствия.

SigmaPlot вычисляет R ^ 2, используя 1-(остаточный SS / общий SS), но в R я, похоже, не могу извлечь общий SS (остаточные SS указаны в сводке).

Любая помощь в том, чтобы заставить это работать, была бы очень признательна, поскольку я пытаюсь подтолкнуть нас к использованию лучшей оценки соответствия.

Приветствия.

Комментарии:

1. Возможно math.stackexchange.com могли бы вы предложить дополнительную помощь?

2. Используете ли вы fit <- nls(y ~x); summary(fit) ?

3. @DiggyF — да, именно так.

4. Здесь есть старое обсуждение этого: stat.ethz.ch/pipermail/r-help/2002-July/023461.html

5. @aule Вы должны опубликовать свой ответ в поле для ответов. Поставьте себе небольшую галочку 🙂

Ответ №1:

Вместо извлечения общего SS, я просто их вычислил:

 test.mdl <- nls(ctrl.adj~a/(1((conc.calc/x0)^b)),
                data=dataSet,
                start=list(a=100,b=10,x0=40), trace=T);

1 - (deviance(test.mdl)/sum((ctrl.adj-mean(ctrl.adj))^2))
  

Я получаю то же значение R ^ 2, что и при использовании SigmaPlot, так что все должно быть хорошо.

Ответ №2:

Таким образом, общее изменение y равно (n-1) * var (y), а пропорция, не объясненная моей вашей моделью, sum(residuals(fit)^2) поэтому сделайте что-то вроде 1-(sum(residuals(fit)^2)/((n-1)*var(y)) )