You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

简单线性回归残差分析:P-P图与书中示例不符问题问询

解决残差P-P图与示例不符的问题

核心问题分析

你的P-P图和书中示例不符,主要原因有两点:

  • 代码使用原始残差生成图像,而书籍示例大概率采用标准化残差(残差经均值0、标准差1的缩放处理),这是图型差异的核心原因
  • 代码存在语法错误(导入语句连写、中文引号误用),且列名与数据集实际列名不匹配,会直接导致运行失败

修正后的可运行代码

# 导入所需库
import pandas as pd
import numpy as np
import statsmodels.api as sm
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# 加载数据集
mba_salary_df = pd.read_csv('MBA Salary.csv')

# 添加常数项,匹配数据集实际列名
X = sm.add_constant(mba_salary_df['Percentage'])
Y = mba_salary_df['Salary']

# 按8:2划分训练集和测试集
train_X, test_X, train_y, test_y = train_test_split(X, Y, train_size=0.8, random_state=100)

# 拟合线性回归模型
mba_salary_lm = sm.OLS(train_y, train_X).fit()

# 计算标准化残差(与原始残差的核心区别)
standardized_resid = (mba_salary_lm.resid - mba_salary_lm.resid.mean()) / mba_salary_lm.resid.std()

# 生成正态P-P图
probplot = sm.ProbPlot(standardized_resid)
plt.figure(figsize=(8, 6))
probplot.ppplot(line='45')
plt.title("Normal P-P Plot of Regression Standardized Residuals")
plt.show()

关键修正点说明

  • 语法修复:将连写的导入语句拆分,替换中文引号为英文引号
  • 列名匹配:数据集实际列名为Percentage,修正代码中错误的列名Percentage in Grade 10
  • 标准化残差:标准化残差更适合用于正态性验证,是对齐书中示例图的关键

原始数据集

Percentage Salary
62  270000
76.33   200000
72  240000
60  250000
61  180000
55  300000
70  260000
68  235000
82.8    425000
59  240000
58  250000
60  180000
66  428000
83  450000
68  300000
37.33   240000
79  252000
68.4    280000
70  231000
59  224000
63  120000
50  260000
69  300000
52  120000
49  120000
64.6    250000
50  180000
74  218000
58  360000
67  150000
75  250000
60  200000
55  300000
78  330000
50.08   265000
56  340000
68  177600
52  236000
54  265000
52  200000
76  393000
64.8    360000
74.4    300000
74.5    250000
73.5    360000
57.58   180000
68  180000
69  270000
66  240000
60.8    300000

内容的提问来源于stack exchange,提问作者advaitketkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:54:50