为什么回归系数的引导置信区间始终比标准置信区间宽?

机器算法验证 置信区间 引导程序
2022-04-02 07:33:56

我对统计和分析非常陌生。我有一些基本的本科统计数据,现在正在学习 O'Reily 的 Practical Statistics for Data Science。我一直在对房屋销售数据进行一些引导练习,只是无法弄清楚为什么我的回归系数的引导置信区间始终比statsmodels每个系数给我的标准系数置信区间更宽。如果您能帮助我理解为什么会这样,如果缺少关键概念,我将非常感谢您的帮助,在哪里研究这些缺失的概念。我的数据框如下所示:

house[cols].head()

在此处输入图像描述 这是我的引导回归系数 CI 代码:

# Import resample from sklearn and statsmodels for regression
from sklearn.utils import resample
import statsmodels.api as sm

# Define bootstrap function
def bootstrap(data):
    """Returns the parameter coefficients of one set of bootstrapped data."""
    da = resample(data)
    model = sm.OLS.from_formula('AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade', data=da).fit()
    return model.params

# Create initial dataframe for model coefficients
params = pd.DataFrame(bootstrap(house[cols])).T

# Create bootstrap coefficients
for i in range(1000):
    params.loc[i] = bootstrap(house[cols])

# Find the 95% confint with percentile method
params.quantile([0.025, 0.975]).T

这是引导模型的结果: 在此处输入图像描述

这始终比来自简单 statsmodels OLS 结果的 95% CI 更宽:

house_model = sm.OLS.from_formula('AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade', data=house)
house_result = house_model.fit()
house_result.summary()

在此处输入图像描述 为什么会这样?非常感谢!

更新:感谢所有为我指明大方向的人。由于我被问及数据中的任何类型的依赖关系,我做了一个相关热图和一个残差拟合值图。见下文: 在此处输入图像描述 这里并没有超出预期。

在此处输入图像描述 该图中显示的异常值让我认为我应该对房价进行对数转换,但我不太确定如何处理价格方差的比例增加。尽管如此,我最初的问题已经得到解答。

请注意,我仍在学习绳索,但数据中的异方差和异常值很可能是罪魁祸首。此外,正如最高回复所指出的那样,鉴于房地产价格确实聚集在社区中,数据中的聚集肯定是另一个罪魁祸首。

3个回答

当您的数据不是独立的而是具有某种依赖结构时,就会发生这种情况。例如,考虑来自全国各地的房屋,其中一些位于昂贵的大城市,而另一些则位于更负担得起的小城镇。同一地区的房屋可能具有相似的价格,并且价格差异相似。

总的来说,我们可能并不明确关心给定的区域:我们只想要一个我们认为固定不变的模型,比如每平方英尺生活空间的售价。然后,我们可能会估计每个城镇或地区的固定效应,以补偿每平方英尺平均价格的差异。

然而,我们可能只关心价格/平方英尺与整体平均水平的差异,我们可能希望考虑到与地区相关的定价不确定性。对此进行建模的一种方法是对城镇或地区产生随机影响。这不会影响固定参数估计,但它确实倾向于说明并非所有数据都是独立的。(随机效应是一种进行相关建模的方法。)因此标准误差更大。

我怀疑如果您包含随机效应或进行了一些相关建模,您的置信区间会更接近您在引导程序中看到的。最后,您的数据不是独立的这一事实也可能会使 bootstrap 估计产生偏差。考虑相关性或随机效应的更好模型可能具有比您的引导区间更大的置信区间。

您始终必须小心您的数据与模型的基本假设的匹配程度。在您的线性回归中,与来自 OLS 的置信区间相比,严重的异方差性和偶尔出现的大异常值(大多数最大异常值往往是正数而不是负数)可能在自举置信区间扩大(相对较小)中起最大作用. 这些特征与关于作为 OLS 基础的错误的正态分布恒定方差假设不一致。另外,请记住,自举必然会忽略每个样本中大约 1/3 的数据点,而它会重复计算相似比例的数据。因此,忽略大异常值的样本的斜率可能与重复计算它们的斜率有很大不同,

在学习如何修复回归方面,不要害怕对价格进行对数转换。我怀疑任何实际价格是否为负数或 0,* 因此没有理论上的理由来避免这种转变。回归系数的解释很容易。假设您对价格进行 log2 转换。那么系数SqFtLot是每额外平方英尺的价格翻倍,而不是每额外平方英尺的额外美元(或其他货币金额)。回归系数的置信区间也将以 log2 标度表示。如果将它们转换回美元,它们将在点估计上出现偏差,但它们仍然是具有相同覆盖范围的置信区间。

对数转换还会阻止您预测某些交易的不切实际的负价格,就像您的模型一样。

在学习置信区间的引导估计方面,您应该意识到这些并不总是像起初看起来那么简单。如果您计算的数量不是所谓的关键数量(具有独立于未知参数值的分布),那么自举可能会导致不可靠的结果。当数量具有内在偏差时,这将成为一个特殊的问题。那么来自数据的点估计可能位于天真计算的引导 CI 之外有几种计算引导 CI 的方法通常(但不总是)可以缓解这些问题。请参阅此广泛讨论或本网站上标记为confidence-intervalbootstrap的数百个其他链接。


*可能有 0 价格销售,但这些通常是特殊交易,如家庭内部交易或财产互换,不应包含在此类分析中。根据预期分析适当地清理数据始终是重要的早期步骤。

OLS 的 CI 假设系数估计量呈正态分布。使用引导程序时,您正在表征系数估计量的经验分布(可能是非正态的)。因此,如果OLS假设存在一些偏差(条件正态性、同方差性和独立观察),系数估计量的经验分布将与理论正态分布不同,CI也会不同。

正如您的残差图显示您在 OLS 假设上存在问题。您是否对残差进行了正态性检验?我敢打赌,他们没有通过正态性检验。