简单线性回归残差分析: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
相关产品推荐
相关产品推荐

