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

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

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

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

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

Ваше здоровье.


person sinclairjesse    schedule 13.04.2011    source источник
comment
Возможно, math.stackexchange.com сможет предложить дополнительную помощь?   -  person Aurum Aquila    schedule 14.04.2011
comment
Вы используете fit <- nls(y ~x); summary(fit)?   -  person SiggyF    schedule 14.04.2011
comment
@DiggyF - да, именно так.   -  person sinclairjesse    schedule 14.04.2011
comment
Я только что понял это ... иногда задавая вопрос, все для вас кристаллизует. test.mdl<-nls(ctrl.adj~a/(1((conc.calc/x0)^b)), data=dataSet, start=list(a=100,b=10,x0=40), trace=T); # R^2 can then be calculated by: 1-(deviance(test.mdl)/sum((ctrl.adj-mean(ctrl.adj))^2)) Я получаю то же r ^ 2, что и при использовании SigmaPlot, так что все должно быть хорошо.   -  person sinclairjesse    schedule 14.04.2011
comment
Здесь есть старое обсуждение этого вопроса: stat.ethz.ch/ pipermail / r-help / 2002-July / 023461.html   -  person SiggyF    schedule 14.04.2011
comment
@aule Вы должны опубликовать свой ответ в поле для ответа. Поставьте себе галочку :)   -  person mcpeterson    schedule 14.04.2011
comment
@mcpeterson Я опубликую решение, но я новичок здесь и должен подождать 24 часа ...   -  person sinclairjesse    schedule 14.04.2011


Ответы (2)


Вместо того, чтобы извлекать общую 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, так что все должно быть хорошо.

person sinclairjesse    schedule 14.04.2011

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

person Seth    schedule 14.04.2011