首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有离散自变量的非线性回归

具有离散自变量的非线性回归
EN

Stack Overflow用户
提问于 2018-02-02 17:01:51
回答 2查看 1K关注 0票数 1

结果发现,我有两个变量不满足线性假设。因变量是连续的,自变量是数值离散的。在这里,剩余的情节和一个盒子和胡须图:

因此,我不能用线性回归。我试图通过转换数据(通过执行log(y);log(x);sqrt(y);等等)将变量之间的关系线性化,但没有成功。我没有发现任何能令人满意地增加线性度的变换。因此,我最终试图将非线性函数与我的数据相结合(对我来说,这是一个完全未知的领域,我在互联网上找不到很多信息)。因此,我想知道我是否采取了正确的步骤来进行非线性分析:

1)我做的第一件事就是选择二次多项式。

代码语言:javascript
运行
复制
y = a + (b*x) + c*(x^2)

这是我的第一个疑问(使用什么功能?)因为我知道有很多不同的函数可以描述同一条线。

2)第二件事是用非线性最小二乘法(R中的函数nls )估计参数,它基本上是用线性函数逼近非线性函数,并迭代地试图找到最佳的参数值:

代码语言:javascript
运行
复制
m <- nls(y ~ a + (b*x) + c*(x^2), start= list(a = 2, b = 1, c=1))

要为参数选择初始值(开始),我尝试选择接近预期最终解决方案的初始值。尽管我发现,即使我改变了初始值,最终的结果仍然是一样的。以下是非线性最小二乘法后的参数估计值:

非线性回归模型:y~a+ (b * x) +c* (x^2)数据: parent.frame() a b_c 2.1296 -0.9395 -1.1754剩余平方和: 27615次迭代到收敛:1达到收敛容限: 2.58e-08

3)最后,通过summary(m)检查结果。

公式:y~a+ (b * x) +c* (x^2)参数:估计Std。误差t值Pr 2.129555 0.003976 535.56 <2e-16 **b -0.939467 0.018500 -50.78 <2e-16 **c -1.175413 0.017818 -65.97 <2e-16 *-符号。代码:0‘*’0.001‘*’0.01‘*’0.05‘.’0.1‘’1残差标准误差: 0.5114在105597自由度上迭代到收敛:1达到收敛容限: 2.58e-08

我还运行了一段代码来获得一些模型评估:

代码语言:javascript
运行
复制
RSS <- sum(residuals(m)^2)
TSS <- sum((y - mean(y))^2)
R.square <- 1 - (RSS/TSS)

结果:

R.square 0.6365729

我不知道我的手术是否正统。我想知道我是否采取了正确的步骤。我也欣赏一些线索,知道什么是最好的方式来解释统计和报告这些结果。

EN

回答 2

Stack Overflow用户

发布于 2018-02-02 17:25:35

实际上,用多项式表示是线性回归的情况,因为线性指的是拟合参数的相关性,而不是自变量。你必须使用的表格由你决定。然而,当x增长时,你的数据似乎是零,所以我不会使用多项式,而是类似于长尾分布。那么,如果你对参数的最终估计不依赖于最初的猜测(也许我错了,但我记得,在线性回归的情况下,这应该总是正确的,而在非线性情况下,平方残差之和可能有许多极小值)。最后,小心R^2:在线性回归的情况下,它必须只使用(这就是您的情况),但是如果执行非线性拟合,它是完全无用和毫无意义的。

票数 1
EN

Stack Overflow用户

发布于 2018-02-02 17:30:15

线性回归的要点是用一条线来近似你的非线性数据,而不是从线性数据开始。看着上面的红色点,看起来你需要二次回归。你可以在math.stackexchange上找到你可以编程的方程式。Quadratic Regression equations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48587518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档