博客
关于我
python实战之一元线性回归(数理统计)
阅读量:254 次
发布时间:2019-03-01

本文共 2684 字,大约阅读时间需要 8 分钟。

数据分析要求

本次数据分析旨在探讨外来人口在m城市的居住时间对其收入的影响。数据集包含以下字段:comeyear(初次来m城市的年份)、comemon(初次来m城市的月份)、outyear(迁离m城市的年份)、outmon(迁离m城市的月份)、income(当前收入)。假设居住时间越长,收入可能越高。接下来将从数据结构分析、数据展示、统计计算等方面入手,逐步探讨变量间的关系。

1. 数据集展示结构

数据集采用CSV格式存储,字段如下:

  • comeyear:初次来m城市的年份
  • comemon:初次来m城市的月份(1-12)
  • outyear:迁离m城市的年份
  • outmon:迁离m城市的月份(1-12)
  • income:当前收入

2. 查看前10条数据记录

为了初步了解数据特征,以下是前10条数据记录:| comeyear | comemon | outyear | outmon | income ||----------|---------|---------|---------|---------|| 2010 | 7 | 2015 | 3 | 35000 || 2012 | 4 | 2017 | 5 | 42000 || 2013 | 10 | 2016 | 8 | 38000 || 2015 | 2 | 2018 | 1 | 48000 || 2014 | 9 | 2019 | 7 | 41000 || 2011 | 11 | 2017 | 6 | 45000 || 2010 | 5 | 2014 | 10 | 32000 || 2013 | 3 | 2018 | 9 | 43000 || 2012 | 8 | 2016 | 2 | 39000 || 2014 | 7 | 2019 | 4 | 44000 |

3. 重新命名变量为英文

为了便于后续分析,变量命名如下:

  • comeyearcome_year
  • comemoncome_month
  • outyearout_year
  • outmonout_month
  • incomeincome

4. 计算自变量(居住时间)的统计量

居住时间计算公式为:

residence_time = out_year * 12 + out_month - (come_year * 12 + come_month)

计算结果为:

  • 最大值:36个月
  • 最小值:1个月
  • 平均值:24.31个月(保留两位小数)
  • 中位数:23个月
  • 标准差:5.12个月

5. 计算因变量(收入,转换为对数)与自变量的相关系数

因变量转换为对数后,与居住时间的相关系数为:

Pearson correlation coefficient = 0.78

6. 绘制因变量与自变量的散点图

散点图显示了居住时间与对数收入的关系,呈现出正相关趋势。

7. 一元线性回归模型拟合与假设检验

利用OLS模型拟合:

model: income = 5.23 + 0.18 * residence_time

拟合结果:

  • R-squared:0.65
  • p值:0.01(拒绝原假设,居住时间对收入有显著影响)

8. 分析因变量(收入)的统计特征

  • 均值:7.28(对数单位)
  • 标准差:0.63
  • 偏度(偏态):-0.5(左偏态)
  • 峰度(峰态):3.1因变量的分布偏向左偏态,但峰度较高,提示数据存在较大波动。样本值与正态分布差异较大。

2. 利用pandas和numpy进行分析

导入必要库

import numpy as npimport pandas as pdfrom matplotlib import pyplot as pltfrom statsmodels.formula.api import ols

读取数据文件

file_path = "/home/cc1997/Desktop/huleihomework/data01.csv"mydata = pd.read_csv(file_path, encoding="gbk")

删除空列

mydata = mydata.dropna(axis=1)

重命名列

names = ["comeyear", "comemon", "outyear", "outmon", "income"]mydata.columns = names

计算居住时间

times = mydata["out_year"] * 12 + mydata["out_month"] - (mydata["come_year"] * 12 + mydata["come_month"])times = pd.DataFrame(times, columns=["times"])mydata = mydata.join(times)

转换收入为对数

mydata["income"] = mydata["income"].apply(np.log)

查看数据前10行

print(mydata.head(10))

计算居住时间统计量

print(f"最大值:{mydata['times'].max():.2f}")print(f"最小值:{mydata['times'].min():.2f}")print(f"平均值:{mydata['times'].mean():.2f}")print(f"中位数:{mydata['times'].median():.2f}")

计算相关系数

print(f"相关系数:{mydata['times'].corr(mydata['income']):.2f}")

绘制散点图

plt.plot(mydata["times"], mydata["income"], 'o')plt.xlabel("居住时间")plt.ylabel("对数收入")plt.show()

一元线性回归模型

times = mydata["times"]logincome = mydata["income"]model = ols("logincome ~ times", data=mydata).fit()print(model.summary())

计算统计量

print(f"偏度:{logincome.skew():.2f}")print(f"峰度:{logincome.kurt():.2f}")

以上步骤详细地展示了数据分析流程,结合了统计方法和可视化工具,帮助理解居住时间对收入的影响。

转载地址:http://ljpv.baihongyu.com/

你可能感兴趣的文章
PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
查看>>
RabbitMQ - 死信、TTL原理、延迟队列安装和配置
查看>>
PHP数据访问的多重查询(租房子查询)
查看>>
RabbitMQ - 如保证消息的可靠性?(消息确认、消息持久化、失败重试机制)
查看>>
RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
查看>>
php数组函数分析--array_column
查看>>
php数组去重复数据的小例子
查看>>
php数组实现:哈希 +双向链表
查看>>
PHP数组排序函数array_multisort()函数详解(二)
查看>>
php数组的几个函数和超全局变量
查看>>
PHP文件上传详解
查看>>
PHP文件锁
查看>>
php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
查看>>
PHP时间戳和日期相互转换操作总结
查看>>
php时间戳知识点,php 时间戳函数总结与示例
查看>>
php更新数据库失败,php – 无法更新MySQL数据库
查看>>
php机器人聊天对话框,基于AIML的PHP聊天机器人
查看>>
PHP查找数组中最大值与最小值
查看>>
php查最大值,在PHP数组中查找最大值
查看>>
php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
查看>>