Python代码

# 导入必要的库
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
 
# 1. 加载数据
data = pd.read_csv('111.csv', encoding='utf-8-sig')
 
# 2. 数据预处理
print(data.head())  # 查看数据的前几行
print(data.isnull().sum())  # 检查缺失值
 
# 填补缺失值或删除缺失值
data.dropna(inplace=True)  # 删除缺失值
 
# 3. 定义自变量和因变量
Y = data[['Y1', 'Y2', 'Y3']]  # 多个因变量
X = data[['X1', 'X2', 'X3', 'X4']]
 
# 4. 添加常数项
X = sm.add_constant(X)  # 添加截距项
 
# 5. 建立多重响应回归模型
from statsmodels.multivariate.manova import MANOVA
manova = MANOVA(endog=Y, exog=X)
 
# 6. 查看模型结果
print(manova.mv_test())  # 输出多元方差分析结果
 
# 7. 计算拟合值和残差
model_Y1 = sm.OLS(Y['Y1'], X).fit()  # 对第一个因变量进行线性回归
residuals_Y1 = model_Y1.resid
fitted_Y1 = model_Y1.fittedvalues
 
model_Y2 = sm.OLS(Y['Y2'], X).fit()  # 对第二个因变量进行线性回归
residuals_Y2 = model_Y2.resid
fitted_Y2 = model_Y2.fittedvalues
 
model_Y3 = sm.OLS(Y['Y3'], X).fit()  # 对第三个因变量进行线性回归
residuals_Y3 = model_Y3.resid
fitted_Y3 = model_Y3.fittedvalues
 
# 8. 结果可视化
# 残差图:对于每个因变量,绘制残差图
for i, (fitted, residuals) in enumerate(zip([fitted_Y1, fitted_Y2, fitted_Y3], 
                                             [residuals_Y1, residuals_Y2, residuals_Y3])):
    plt.figure(figsize=(10, 6))
    sns.scatterplot(x=fitted, y=residuals)
    plt.axhline(0, linestyle='--', color='red')
    plt.title(f'残差图 - Y{i + 1}')
    plt.xlabel('拟合值')
    plt.ylabel('残差')
    plt.show()
 
# 9. 将模型评估结果输出到 Markdown 文件
with open('模型评估结果.md', 'w', encoding='utf-8') as f:
    f.write("# 模型评估结果\n\n")
    
    f.write("## Y1 的模型摘要\n")
    f.write("```\n")
    f.write(str(model_Y1.summary()))
    f.write("```\n\n")
    
    f.write("## Y2 的模型摘要\n")
    f.write("## Y2 的模型摘要\n")
    f.write("```\n")
    f.write(str(model_Y2.summary()))
    f.write("```\n\n")
    
    f.write("## Y3 的模型摘要\n")
    f.write("```\n")
    f.write(str(model_Y3.summary()))
    f.write("```\n\n")
 
    f.write("## 残差分析\n")
    f.write("### Y1 残差\n")
    f.write("残差图已在可视化部分展示。\n\n")
 
    f.write("### Y2 残差\n")
    f.write("残差图已在可视化部分展示。\n\n")
 
    f.write("### Y3 残差\n")
    f.write("残差图已在可视化部分展示。\n\n")
 
    f.write("## 其他信息\n")
    f.write("可视化和模型结果提供了对模型性能的深入理解。\n")
 
# 结束
print("模型评估结果已输出到 '模型评估结果.md' 文件中。")

主要功能和解释

功能

该脚本用于进行多元线性回归分析,主要通过对多个因变量(Y1、Y2、Y3)与多个自变量(X1、X2、X3、X4)之间的关系进行建模和评估。它包括数据加载、预处理、模型建立、结果可视化和模型评估的输出。

解释

  1. 加载数据:使用 pandas 库的 read_csv 函数读取 CSV 文件中的数据。
  2. 数据预处理:先使用 head() 查看数据的前几行,再使用 isnull().sum() 检查缺失值的数量,最后通过 dropna() 删除含有缺失值的行,以确保后续分析的准确性。
  3. 定义自变量和因变量:将数据框中的特定列分配给因变量(Y)和自变量(X)。
  4. 添加常数项:使用 sm.add_constant() 函数添加常数项,以便更好地拟合数据。
  5. 建立多重响应回归模型:使用 statsmodels 库中的 MANOVA 类构建多元方差分析(MANOVA)模型,以评估多个因变量与自变量之间的关系。
  6. 查看模型结果:调用 mv_test() 方法查看模型的统计结果,以评估自变量对因变量的影响。
  7. 计算拟合值和残差:为每个因变量建立线性回归模型,计算其拟合值和残差。
  8. 结果可视化:通过绘制残差图来可视化模型的拟合效果。
  9. 将模型评估结果输出到 Markdown 文件:使用文件写入操作,将模型摘要和分析结果写入 .md 文件。