错误的输出多元线性回归统计模型

数据挖掘 Python 线性回归
2022-03-13 12:51:06

我最近转向 python 进行数据分析,显然我停留在基础知识上。我试图回归以下表达式的参数:z=20+x+3*y+noise,我得到了正确的截距,但 x 和 y 参数显然是错误的。我在做什么失踪?下面的代码:

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf 

# generate true values, and noise around them
np.random.seed(5)
x = np.arange(1, 101)
y = np.arange(1, 101)
z = 20 + x + 3* y + np.random.normal(0, 20, 100)

data = pd.DataFrame({'x':x, 'y':y, 'z': z})

lm = smf.ols(formula='z ~ x + y', data=data).fit()

# print the coefficients
lm.summary()

返回

在此处输入图像描述

其中 x 和 y 参数都是 1.5,而不是 1 和 3。怎么了?

1个回答

我认为您看到的是您所看到的,因为模型看到了数据框中每组点的关系,这些点由以下等式控制:

 z = 20 + x +3*y + noise 

但是模型看到的只是结果Z,而不是你知道的那个方程z

因此,它试图建立一个模型,考虑 Z 是如何在不知道有噪声的情况下完成的,同时知道 x 和 y 都在这个等式中,因为你明确告诉它在模型中。

根据这个数据。(至少这是我在没有种子的情况下得到的,当我运行你的数据时......所以由于不同的噪音,它可能与不同的 Z 接近)

x   y   z
1   1   32.824550
2   2   21.382597
3   3   80.615424
4   4   30.958157
5   5   42.192197
6   6   75.649622
7   7   29.815352
8   8   40.167267
9   9   59.752065
10  10  53.402601

因为xy对于每个点都是相同的,并且因为您的公式具有x + 3*y + noise, z也等于4*x+ noise4*y+ noise2*x +2*y+ noise对于每一行。有很多方法可以通过 x 和 y 以精确的比例加上一些噪声来对 Z 进行相同的更改。

因此,回归变量被分配了相同的影响力和相同的噪声份额。x这是对和的最简约的评价y

这不是你所期望知道的等式,但它是你应该得到的答案。如果您使用减少零影响变量的线性模型,您甚至可能得到 y 的 0 或 NA 值。

要测试它lm是否有效,只需颠倒y在该方程中更改 x 和 y 之间关系的顺序,您就会得到完全不同的结果。我想你正在寻找的那个。

y = np.arange(100,0,-1)


            coef    std err    t    P>|t|   [0.025  0.975]
Intercept   0.0439  0.000   119.009 0.000   0.043   0.045
x           1.2184  0.038   32.471  0.000   1.144   1.293
y           3.2130  0.038   85.629  0.000   3.139   3.288

您正确构建了模型,但在这种情况下,创建数据集的方式并不是为了测试您希望看到的内容……但这并没有错。