大师兄的应用回归分析学习笔记(十四):自变量选择与逐步回归(二)

大师兄的应用回归分析学习笔记(十三):自变量选择与逐步回归(一)
大师兄的应用回归分析学习笔记(十五):自变量选择与逐步回归(三)

二、所有子集回归

3. 实际案例
3.1 案例一
  • y表示某种消费品的销售额
  • x_1表示居民可支配收入
  • x_2表示该类消费品的价格指数
  • x_3表示其他消费品平均价格指数
  • n=18,m=3,所有自变量子集=2^m-1=7
# import lib
import pandas as pd
import statsmodels.api as sm
from itertools import combinations

# 加载数据
data = pd.read_csv(r"C:\Users\Sunxiaoran\Desktop\data.csv")
y = data["y百万元"]
X = data[["x1元", "x2元", "x3元"]]

# 拟合全模型
X_full = sm.add_constant(X)  # 添加截距项
full_model = sm.OLS(y, X_full).fit()
mse_full = full_model.mse_resid  # 全模型的均方误差 (MSE)

# 最佳子集回归
def best_subset(X, y):
    results = []
    n = len(y)  # 样本量
    for k in range(1, X.shape[1] + 1):
        for combo in combinations(X.columns, k):
            X_subset = sm.add_constant(X[list(combo)])
            model = sm.OLS(y, X_subset).fit()
            sse_p = model.ssr  # 当前模型的残差平方和 (SSE)
            p = len(model.params)  # 当前模型的参数个数
            cp = (sse_p / mse_full) - (n - 2 * p)  # 计算 C_p
            results.append({
                "Variables": combo,
                "R2": model.rsquared,
                "Adj R2": model.rsquared_adj,
                "AIC": model.aic,
                "BIC": model.bic,
                "Cp": cp
            })
    return pd.DataFrame(results)

results = best_subset(X, y)
print(results)
  • 通过计算得:
         Variables        R2    Adj R2        AIC        BIC         Cp
0           (x1元,)  0.972836  0.971138  41.114074  42.894817   6.327737
1           (x2元,)  0.955912  0.953156  49.831504  51.612247  18.992754
2           (x3元,)  0.950818  0.947744  51.799435  53.580179  22.804403
3       (x1元, x2元)  0.974617  0.971233  41.893196  44.564312   6.994696
4       (x1元, x3元)  0.978405  0.975526  38.984021  41.655136   4.159998
5       (x2元, x3元)  0.957071  0.951348  51.351593  54.022708  20.124733
6  (x1元, x2元, x3元)  0.981292  0.977283  38.401352  41.962839   4.000000
  • R^2的数值随自变量增大而增大,只能作为参考。
  • AIC准则、C_p准则的数值都是全模型最优。
  • BIC准则是x_1,x_3最优,课件BIC准则加大了对自变量数目的惩罚力度。
  • 综合全模型最优,回归方程:\hat y=-10.23+0.101x_1-0.314x_2+0.415x_3
  • 在实际选择模型中,应综合考虑:
  • 有时希望模型各项衡量准则较优,得到的模型又能给出合理的经济解释;
  • 有时只从拟合角度考虑;
  • 有时只从预测角度考虑,并不计较回归方程能否有合理的解释;
  • 有时要求模型的各个衡量准则较优,而模型最好简单些,涉及的变量少些;
  • 有时还看回归模型参数估计的标准差大小等。
3.2 R语言寻找最优子集
  • y表示某种消费品的销售额
  • x_1表示居民可支配收入
  • x_2表示该类消费品的价格指数
  • x_3表示其他消费品平均价格指数
  • 用调整的付判定系数R^2_\alpha准则选择最优自己回归模型。
# 加载 leaps 包,用于最佳子集回归分析
>>>library(leaps)
>>>
>>># 读取数据文件
# 文件路径为 "C:\\Users\\Sunxiaoran\\Desktop\\data.csv"
>>># head=TRUE 表示第一行是列名
>>>data <- read.csv("C:\\Users\\Sunxiaoran\\Desktop\\data.csv", head = TRUE)
>>>
>>># 使用 regsubsets 函数进行最佳子集回归分析
>>># y百万元 ~ x1元 + x2元 + x3元 是回归公式,表示 y百万元 是因变量,x1元、x2元、x3元 是自变量
>>># data = data 指定数据集
>>># nbest = 1 表示对每个子集大小(变量个数)只保留一个最佳模型
>>># really.big = T 允许处理较大的数据集
>>>exps <- regsubsets(y百万元 ~ x1元 + x2元 + x3元, data = data, nbest = 1, really.big = TRUE)
>>>
>>># 提取回归结果的摘要信息
>>>expres <- summary(exps)
>>>
>>># 将结果转换为数据框,并添加调整后的 R 方(adjr2)作为一列
>>># expres$outmat 是一个矩阵,显示每个模型中包含的变量
>>># expres$adjr2 是每个模型的调整后的 R 方
>>>res <- data.frame(expres$outmat, adjr2 = expres$adjr2)
>>>
>>># 打印结果
>>>print(res)
         x1元 x2元 x3元     adjr2
1  ( 1 )    *           0.9711381
2  ( 1 )    *         * 0.9755260
3  ( 1 )    *    *    * 0.9772828
  • C_p准则和BIC准则寻找最优子集回归模型:
>>>data.frame(expres$outmat,Cp=expres$cp)
         x1元 x2元 x3元       Cp
1  ( 1 )    *           6.327737
2  ( 1 )    *         * 4.159998
3  ( 1 )    *    *    * 4.000000
>>>data.frame(expres$outmat,BIC=expres$bic)
         x1元 x2元 x3元       BIC
1  ( 1 )    *           -59.12471
2  ( 1 )    *         * -60.36439
3  ( 1 )    *    *    * -60.05669
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容