如果我有一个回归线,并且r平方是否有一个简单的numpy(或其他一些python库)命令来随机绘制,比如x的y值与回归一致?你可以用同样的方式从分布中绘制一个随机值吗?
谢谢!
编辑:我有我的回归线和r ^ 2值的等式。那个r ^ 2值应该提供一些关于我的线周围数据点分布的信息,不是吗?如果我只是称之为y = random.gauss()* x + b还没有丢失我的r ^ 2中的信息?或者这会被纳入stdv,如果是这样的话怎么样?对不起,我之前没有使用回归。
答案 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对正确理论方法的回答。