【数学建模】预测模型——多元回归分析 SPSS实现

在这里插入图片描述

线性回归介绍

  回归分析是研究变量之间因果关系的一种统计模型;因变量就是结果,自变量就是原因;基于结果变量(因变量)的种类,回归分析可分为:线性回归(因变量为连续变量)、logistic回归(因变量为分类变量)、柏松回归(因变量为计数变量);这三种回归模型中自变量则可以是任意类型的变量;

  有的自变量对因变量的影响不是很大,且自变量之间可能存在多重共线性(即可能不完全独立),通过建立逐步回归分析,进行X因子筛选;

比如:收入水平于受教育程度、所在行业、工作年限、工作种类的关系;公路客运量与人口增长量、私家车保有量、国民生产总值、国民收入等因素的关系;

线性回归分析

步骤

在这里插入图片描述
选项 -> 修改使用F的概率:进入:0.15;除去:0.20;-> 勾上 德宾-沃森 (检测变量是否存在序列相关,时间序列必选);
统计 -> 勾上共线性诊断;
在这里插入图片描述

结果分析

模型摘要
在这里插入图片描述
R2即为拟合度,如果拟合度很低,则多元线性回归方程之间的关系并不显著,没有实际意义;
如果自变量超过5个,则一般认定调整后的R方,这里明显拟合度很高(或者说 导致这个结果的 99.6%都是上述原因造成的)(一般调整后的R方过了0.3都算不错的了);


系数
在这里插入图片描述
显著性 P 值 <= 0.05 才可以,这里 x15、x4、x7、x5可以;
得到回归方程;

但是这个是有条件的:
条件一就是:自变量不存在多重共线性!这样那四个变量的系数才是可靠的;
在这里插入图片描述
如果 VIF 值 小于5 ,那么意味着 自变量之间不存在多重共线性;第一个诊断满足;

条件二:残差符合正态分布
在这里插入图片描述
如果 P-P图上 个点均在直线附近,则说明残差符合正态分布;满足第二个条件!

条件三:RW值(德宾-沃森值)在 2 附近(1.9-2.1之间)时才会认为变量之间不存在序列相关;
在这里插入图片描述
这里 RW值为2.7 也能勉强接收;

### 如何在SPSS实现多元线性回归预测 #### 数据准备 为了执行多元线性回归,在导入数据之前,需确认数据集内含有一个连续型的因变量以及两个或更多个自变量。对于类别型自变量,则需要创建哑变量[^1]。 #### 设置哑变量 当遇到像`ct`这样的二分类变量时,可以通过转换命令将其变为数值形式以便于模型处理。具体来说,可通过【Transform】> 【Recode into Different Variables…】菜单完成这一过程。 #### 执行多元线性回归分析 进入【Analyze】> 【Regression】> 【Linear...】界面后,将目标变量指定为Dependent框内的因变量;而Independent(s)框则用于放置所有选定作为预测因子的自变量。如果希望评估特定假设下的模型性能,还可以在此处设定筛选条件或其他选项[^2]。 #### 解读输出结果 - **Model Summary表**:提供了R平方值等整体拟合优度的信息。 - **ANOVA表**:展示了整个模型是否具有统计显著性的F检验结果。 - **Coefficients表**:列出了各个自变量对应的未标准化和标准化回归系数及其p值,帮助判断哪些因素对响应变量有重要影响[^3]。 #### 处理多重共线性问题 若发现某些自变量间存在高度相关的情况(即容差<0.2或VIF>5),可能意味着这些变量之间出现了多重共线性现象。此时应考虑移除部分冗余特征或将它们合并成新的综合指标以改善模型质量[^4]。 ```python # Python模拟SPSS操作流程示例代码(仅作示意用途) import pandas as pd from sklearn.linear_model import LinearRegression from statsmodels.stats.outliers_influence import variance_inflation_factor data = pd.read_csv('nuclear_plant_data.csv') # 假设已获取到核电站建设数据文件 X = data[['date', 'cap', 'cum_n']] # 自定义选取所需自变量列表 y = data['cost'] # 设定成本为因变量 model = LinearRegression() model.fit(X, y) print(f'Intercept: {model.intercept_}') for idx, col_name in enumerate(['date', 'cap', 'cum_n']): print(f'{col_name}: {model.coef_[idx]}') vif = [variance_inflation_factor(X.values, i) for i in range(len(X.columns))] pd.DataFrame({'feature': X.columns, 'VIF': vif}) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值