如何通过多元回归分析covid数据中submission_date、经纬度与new_case的关联
新冠病例数多元回归分析实操步骤(面向新手)
以下步骤基于Python主流数据分析工具链实现,全程代码可直接复制调整后运行:
第一步:提前安装依赖库
你需要提前安装3个核心工具库:数据处理用pandas,数值计算用numpy,回归建模用statsmodels(统计结果输出更友好,适合新手理解)。如果未安装,直接在终端运行以下命令:
pip install pandas numpy statsmodels
第二步:数据预处理
你的数据集需要先做几个基础处理才能放入回归模型:
submission_date目前是字符串格式,要转成数值型:我们可以转换为「距离数据集最早日期的天数」,比如最早的2020-06-01记为0,之后每天递增1- 先确认
submission_date、latitude、longitude、new_case这四个你需要用到的字段没有缺失值,如果有缺失直接删除对应行即可 - 过滤
new_case的异常值:如果有小于0的统计错误值,直接删除对应记录
预处理代码示例
import pandas as pd import numpy as np import statsmodels.api as sm # 读取你的covid数据集,如果你是csv格式就用read_csv,其他存储格式对应调整读取方法 df = pd.read_csv("你的covid数据集本地文件路径.csv") # 1. 转换日期为数值型 df['submission_date'] = pd.to_datetime(df['submission_date']) min_date = df['submission_date'].min() df['days_since_start'] = (df['submission_date'] - min_date).dt.days # 2. 筛选目标字段并删除缺失值 use_cols = ['days_since_start', 'latitude', 'longitude', 'new_case'] df_clean = df[use_cols].dropna() # 3. 过滤new_case异常值 df_clean = df_clean[df_clean['new_case'] >= 0]
第三步:构建多元回归模型
我们用普通最小二乘法(OLS)做多元线性回归,输出的统计指标齐全,适合判断变量关联关系。
注意线性回归默认不带截距项,我们需要手动给自变量加一列常数项。
建模代码示例
# 设定自变量X和因变量y X = df_clean[['days_since_start', 'latitude', 'longitude']] X = sm.add_constant(X) # 手动添加截距项 y = df_clean['new_case'] # 训练模型 model = sm.OLS(y, X).fit() # 输出完整分析结果 print(model.summary())
第四步:结果解读(新手核心关注点)
输出的报告里重点看三个指标即可:
- R-squared:取值范围0-1,数值越大说明你选的三个自变量能解释的
new_case波动比例越高,比如0.3就说明这三个变量可以解释30%的新增病例变化 - P>|t|列:对应每个自变量的统计显著性,如果数值小于0.05,说明该变量和
new_case的关联是统计显著的,如果大于0.05说明关联大概率是随机波动导致的,没有统计意义 - coef列:对应每个自变量的回归系数,正数说明变量数值越大
new_case越高,负数说明变量数值越大new_case越低。比如days_since_start的系数是2,就说明每过1天,新增病例平均增加2例;latitude系数是-10,就说明纬度每升高1度,新增病例平均减少10例
可选优化方向
你当前选的三个自变量对新增病例的解释力可能有限,后续可以尝试调整提升效果:
- 对
new_case做对数变换(np.log1p(df_clean['new_case'])),病例数本身是右偏分布,取对数后更符合线性回归的正态分布假设 - 把state作为分类变量加入模型,控制不同州的固有防疫、人口基数差异
- 加入时间周期性特征,比如周几、月份,疫情统计通常有明显的周度报告规律
内容的提问来源于stack exchange,提问作者craigcarpenter2
相关产品推荐
相关产品推荐

