非线性回归的R²值计算

13

首先,我知道计算非线性回归的R^2值并不是完全正确或有效的做法。

然而,我们现在正在将大部分工作从SigmaPlot转移到R上,对于我们的非线性(浓度-反应)模型,同事们习惯看到一个与模型相关的R^2值来估计拟合优度。

SigmaPlot使用1-(残差平方和/总平方和)来计算R^2值,但是在R中,我似乎无法提取总平方和(残差平方和在摘要中报告)。

如果能帮助我解决这个问题,我将不胜感激,因为我正在尝试将我们转向使用更好的拟合优度估计方法。

谢谢。


你是否正在使用 fit <- nls(y ~x); summary(fit) - SiggyF
我刚刚弄明白了...有时候问一个问题,会让你的事情变得更加清晰。`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))`我得到了与使用SigmaPlot相同的r^2值,所以一切都应该没问题。
- sinclairjesse
2
这里有一个旧的讨论:https://stat.ethz.ch/pipermail/r-help/2002-July/023461.html - SiggyF
2
@aule,你应该在答案框内发布你的答案。别忘了给自己打个小对勾 :) - mcpeterson
@mcpeterson 我会发布解决方案,但我是新手,必须等待24小时... - sinclairjesse
显示剩余2条评论
2个回答

12

我没有提取总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))

我使用SigmaPlot时得到了与此相同的R^2值,所以一切都应该没问题。


5

所以y的总变化类似于(n-1)*var(y),而模型未能解释的比例是sum(residuals(fit)^2),因此可以进行如下计算:1-(sum(residuals(fit)^2)/((n-1)*var(y)))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接