非线性回归过程是用来建立因变量与一组自变量之间的非线性关系,它不像线性模型那样有众多的假设条件,可以在自变量和因变量之间建立任何形式的模型
    非线性,能够通过变量转换成为线性模型——称之为本质线性模型,转换后的模型,用线性回归的方式处理转换后的模型,有的非线性模型并不能够通过变量转换为线性模型,我们称之为:本质非线性模型

还是以“销售量”和“广告费用”这个样本为例,进行研究,前面已经研究得出:“二次曲线模型”比“线性模型”能够更好的拟合“销售量随着广告费用的增加而呈现的趋势变化”,那么“二次曲线”会不会是最佳模型呢?

答案是否定的,因为“非线性模型”能够更好的拟合“销售量随着广告费用的增加而呈现的变化趋势” 下面我们开始研究:

第一步:非线性模型那么多,我们应该选择“哪一个模型呢?”

1:绘制图形,根据图形的变化趋势结合自己的经验判断,选择合适的模型

点击“图形”—图表构建程序—进入如下所示界面:

点击确定按钮,得到如下结果:

放眼望去, 图形的变化趋势,其实是一条曲线,这条曲线更倾向于"S" 型曲线,我们来验证一下,看“二次曲线”和“S曲线”相比,两者哪一个的拟合度更高!

点击“分析—回归—曲线估计——进入如下界面

在“模型”选项中,勾选”二次项“和”S"  两个模型,点击确定,得到如下结果:


 通过“二次”和“S  “ 两个模型的对比,可以看出S 模型的拟合度 明显高于“二次”模型的拟合度 (0.912 >0.900)不过,几乎接近

  接着,我们采用S 模型,得到如下所示的结果:

结果分析:

1:从ANOVA表中可以看出:总体误差= 回归平方和 + 残差平方和 (共计:0.782) F统计量为(240.216)显著性SIG为(0.000)由于0.000<0.01 (所以具备显著性,方差齐性相等)

2:从“系数”表中可以看出:在未标准化的情况下,系数为(-0.986) 常数项为2.672

所以 S 型曲线的表达式为:Y(销售量)=e^(b0+b1/t) = e^(2.672-0.986/广告费用)

当数据通过标准化处理后,常数项被剔除了,所以标准化的S型表达式为:Y(销售量) = e^(-0.957/广告费用)

  下面,我们直接采用“非线性”模型来进行操作

第一步:确定“非线性模型”

 从绘图中可以看出:广告费用在1千万——4千多万的时候,销售量增加的跨度较大,当广告费用超过“4千多万"的时候,增加幅度较小,在达到6千多万”达到顶峰,之后呈现下降趋势。

从图形可以看出:它符合The asymptotic regression model (渐近回归模型)

 表达式为:Y(销售量)= b1 + b2*e∧b3*(广告费用)

当b1>0, b2<0, and b3<0,时,它符合效益递减规律,我们称之为:Mistcherlich's model  

 

第二步:确定各参数的初始值

1:b1参数值的确定,从表达式可以看出:随着”广告费用“的增加,销售量也会增加,最后达到一个峰值,由于:b2<0, b3<0 ,随着广告费用的增加:b2*e∧b3*(广告费用)会逐渐趋向于“0”  而此时 Y(销售量)将接近于 b1值,从上图可以看出:Y(销售量)的最大值为12点多,接近13,所以,我们设定b1的初始值为13

2:b2参数值确定:当Y(销售量)最小时,此时应该广告费用最小,基本等于“0”,可以得出:b1+b2= Y(销售量)此时Y销售量最小,从图中可以看出:第一个值为6.7左右,接近7这个值,所以:b2=7-13=-6

3: b3参数值确定:可以用图中两个分离点的斜率来确定b3的值,例如取(x1=2.29,y1=8.71) 和( x2=5.75, y2=12.74) 通过公式 y2-y1/x2-x1=1.16,(此处可以去整数估计值来算b3的值)

确定参数初始值和参数范围的方法如下所示:

1:通过图形确定参数的取值范围,然后在这个范围里选择初始值。
2:根据非线性方程的数学特性进行某些变换后,再通过图形帮助判断初始值的范围。
3:先使用固定的数代替某些参数,以此来确定其它参数的取值范围。
4:通过变量转换,使用线性回归模型来估计参数的初始值

第三步:建立模型表达式和选择损失函数

点击“分析”—回归——非线性,进入如下所示界面:

如上图中,点击参数,分别添加b1,b2,b3进入参数框内,在模型表达式中输入:b1 + b2*Exp(b3*广告费用) (步骤为:选择“函数组”—算术——Exp函数),将“销售量”变量拖入“因变量”框内

“损失函数”默认选项为“残差平方和” 如果有特需要求,可以自行定义

点击“约束”进入如下所示的界面:

点击“继续”按钮,此时会弹出警告信息,提示用户是否接受建议, 建议内容为:将采用序列二次编程进行参数估计,点击确定,接受建议即可

参数的取值范围指在迭代过程中,将参数限制在有意义的范围区间内,提供两种对参数范围约束的方法:

1:线性约束,在约束表达式里只有对参数的线性运算
2:非线性约束,在约束表达式里,至少有一个参数与其它参数进行了乘,除运算,或者自身的幂运算

在“保存”选项中,勾选“预测值”和“残差”即可,点击继续

点击“选项”得到如下所示的界面:

此处的“估计方法”选择“序列二次编程”的方法, 此方法主要利用的是双重迭代法进行求解,每一步迭代都建立一个二次规划算法,以此确定优化的方向,把估计参数不断的带入损失函数进行求值运算,直到满足指定的收敛条件为止

点击继续,再点击“确定”得到如下所示的结果:

上图结果分析:

1:从“迭代历史记录”表中可以看出:迭代了17次后,迭代被终止,已经找到最优解

此方法是不断地将“参数估计值”代入”损失函数“求解, 而损失函数采用的是”残差平方和“最小,在迭代17次后,残差平方和达到最小值,最小值为(6.778)此时找到最优解,迭代终止

2:从参数估计值”表中可以看出:
b1= 12.904  (标准误为0.610,比较小,说明此估计值的置信度较高)  b2=-11.268  (标准误为:1.5881,有点大,说明此估计值的置信度不太高) b3=-0.496(标准误为:0.138,很小,说明此估计值的置信度很高)

非线性模型表达式为:Y(销售量)= 12.904-11.268*e^(-0.496*广告费用)

3:从“参数估计值的相关性”表中可以看出:b1 和 b3的相关性较强,b2和b1或b3的相关性都相对弱一些,其中b1和b2的相关性最弱

4:从anova表中可以看出:R方 = 1- (残差平方和)/(已更正的平方和) = 0.909, 拟合度为0.909,说明此模型能够解释90多的变异,拟合度已经很高了

前面已经提到过,S行曲线的拟合度更高,为(0.916)那到底哪个更合适呢?  如果您的数据样本容量够大,我想应该是“非线性模型”的拟合度会更高!

 其实想想,我们是否可以将“非线性”转换为“线性”后,再利用线性模型进行分析了?  后期有时间的话,将还是以本例为说明,如何将“非线性”转换为“线性”后进行分析!!

SPSS—非线性回归(模型表达式)案例解析的更多相关文章

  1. SPSS—回归—曲线估计方程案例解析

    上一节介绍了线性回归,虽然线性回归能够满足大部分的数据分析的要求,但是,线性回归并不是对所有的问题都适用, 因为有时候自变量和因变量是通过一个已知或未知的非线性函数关系相联系的,如果通过函数转换,将关 ...

  2. 以两种异步模型应用案例,深度解析Future接口

    摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...

  3. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  4. 《gis空间分析及应用案例解析》培训总结

    <gis空间分析及应用案例解析>培训总结 来源:常德水情 作者:唐校准 发布日期:2014-01-02       2013年12月2630日由中国科学院计算技术研究所教育中心组织的< ...

  5. 案例解析:springboot自动配置未生效问题定位(条件断点)

    Spring Boot在为开发人员提供更高层次的封装,进而提高开发效率的同时,也为出现问题时如何进行定位带来了一定复杂性与难度.但Spring Boot同时又提供了一些诊断工具来辅助开发与分析,如sp ...

  6. 轻量级表达式树解析框架Faller

    有话说 之前我写了3篇关于表达式树解析的文章 干货!表达式树解析"框架"(1) 干货!表达式树解析"框架"(2) 干货!表达式树解析"框架" ...

  7. SQL Server 连接问题案例解析(1)

    SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...

  8. 干货!表达式树解析"框架"(1)

    最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 关于我和表达式树 其实我也没有深入了解表达式树一些内在实现的原理 ...

  9. 干货!表达式树解析"框架"(2)

    最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 为了过个好年,我还是赶快把这篇完成了吧 声明 本文内容需要有一定 ...

随机推荐

  1. 在eclipse中建立子级源码文件夹

    在eclipse中建立子级源码文件夹 右键点击项目 ---->new ---->source folder--->输入 src/main  --->勾选update exclu ...

  2. sqlserver table partion

    SQL SERVER 表分区实施步奏   1. 概要说明 SQL SERVER的表分区功能是为了将一个大表(表中含有非常多条数据)的数据根据某条件(仅限该表的主键)拆分成多个文件存放,以提高查询数据时 ...

  3. LinuxI/O 性能分析

    .I/O linux 命令: ostat 监视I/O子系统 iostat [参数][时间][次数] 通过iostat方便查看CPU.网卡.tty设备.磁盘.CD-ROM 等等设备的活动情况, 负载信息 ...

  4. $.ajax dataType设置为json 回调函数不执行

    请求方式如下: $.xpost = function (url, data) { return $.ajax({ url: url, type: "POST", dataType: ...

  5. 引用mvvmlight dll ,操作command

    前言 因为vs2010没有集成mvvmlight 所以想要使用mvvmlight的relaycomman需要引用dll 需要测试某个功能的时候,不能进行快带的集成 引用mvvmlight dll 如果 ...

  6. 第五章 二叉树(e5)重构

  7. Robotium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Robotium原理初步(第四讲) 主要讲解内容与笔记: 一.基于控件 1.spinner——下拉菜单 2.TabHost——左右滑动选择菜单,类似电话本 3.Gallery—— ...

  8. Message: u'$ is not defined' ; Stacktrace

    status.html <html> <head> <meta http-equiv="content-type" content="tex ...

  9. ajax请求工具类

    ajax的get和post请求工具类: /** * 公共方法类 *  * 使用  变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...

  10. Golang之定义错误(errors)

    基本示例: package main //定义错误 //error 也是个接口 import ( "errors" "fmt" ) var errNotFoun ...