模拟python中回归线的数据

时间:2012-02-24 08:42:20

标签: regression python

如果我有一个回归线,并且r平方是否有一个简单的numpy(或其他一些python库)命令来随机绘制,比如x的y值与回归一致?你可以用同样的方式从分布中绘制一个随机值吗?

谢谢!

编辑:我有我的回归线和r ^ 2值的等式。那个r ^ 2值应该提供一些关于我的线周围数据点分布的信息,不是吗?如果我只是称之为y = random.gauss()* x + b还没有丢失我的r ^ 2中的信息?或者这会被纳入stdv,如果是这样的话怎么样?对不起,我之前没有使用回归。

2 个答案:

答案 0 :(得分:2)

幸运的是,没有必要暴力:)。要获得R^2与残差标准差之间的关系,最简单的方法是从R^2的定义开始:

R^2 = SSR / SST    (1)

其中SSR是回归的平方和,即(sum((y'-mean(y))^2),其中y'是回归线上的值,而SST是平方的总和,即{{ 1}}其中sum((y - mean(y))^2)是观察结果。因此y是有效的方差总和与回归模型(或线)解释的方差量之间的分数。出于我们的目的,我们需要将R^2表达为SSR,其中SST - SSE是回归线和观察值之间的平方和。 SSE是方差,回归模型无法解释。重写(1):

SSE

表达R^2 = (SST - SSE) / SST = 1 - SSE / SST

SSE

如果我们注意到要求方差的和,我们需要除以SSE = (1 - R^2) SST ,这就变成了:

N-1

获得残差的标准差:

VAR_E = (1 - R^2) VAR_T

并从括号中取出VAR:

SD_E = sqrt((1 - R^2) VAR_T)

因此,您需要SD_E = sqrt(1 - R^2) SD_T 和数据集的总标准偏差。要验证这一点,请查看任何介绍性统计手册。

答案 1 :(得分:1)

  

如果我只是称之为y = random.gauss()* x + b还没有丢失我的r ^ 2中的信息?

显然。

然而

阅读文档,我们看到random.gauss有两个参数。平均值和标准差。

平均值必须为零。

但是,标准偏差需要调整以匹配您的r ** 2.

当r ** 2 == 0时,标准偏差很高。它应该在样本数据的原始范围内产生任何值。

当r ** 2接近1时,标准偏差变小。

如何计算再现r ** 2的标准偏差值?

蛮力。

m, b = regression_model( some_data )
deviations = list( y - m*x+b for x, y in some_data )

这个偏差列表是标准差公式中的基本要素。

sd = math.sqrt( sum( d**2 for d in deviations ) / (len(some_data)-1) )

现在,您可以使用random.gauss(0,sd)重现原始数据中的偏差。

请参阅@PaulHiemstra对正确理论方法的回答。