моделировать данные из линии регрессии в Python - PullRequest
1 голос
/ 24 февраля 2012

Если у меня есть линия регрессии и r в квадрате, есть ли простая команда numpy (или какая-либо другая библиотека Python) для случайного отображения, скажем, значений y для x, которые согласуются с регрессией? Точно так же, как вы могли бы просто нарисовать случайное значение из распределения?

Спасибо!

edit: у меня есть уравнение для моей линии регрессии и значение r ^ 2. Это значение r ^ 2 должно предоставить некоторую информацию о распределении точек данных вокруг моей линии, не так ли? Если я просто назову это y = random.gauss () * x + b, не потерял ли я информацию в своем r ^ 2? Или это будет включено в STDV, если да, то как? Извините, я просто раньше не работал с регрессией.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

К счастью, нет необходимости в грубой силе :).Чтобы получить взаимосвязь между R^2 и стандартным отклонением остатков, проще всего начать с определения R^2:

R^2 = SSR / SST    (1)

, где SSR - это суммы квадратоврегрессия, т. е. (sum((y'-mean(y))^2), где y' - значения на линии регрессии, а SST - общая сумма квадратов, т. е. sum((y - mean(y))^2), где y - наблюдения.Таким образом, R^2 - это доля между общей суммой дисперсии и суммой дисперсии, объясненной регрессионной моделью (или линией).Для нашей цели нам нужно повторно выразить SSR как SST - SSE, где SSE - суммы квадратов между линией регрессии и наблюдениями.SSE - дисперсия, которая не объясняется регрессионной моделью.Перезапись (1):

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

выражение для SSE:

SSE = (1 - R^2) SST

Если мы заметим, что для вычисления сумм квадратов в дисперсию нам нужно разделить на N-1становится:

VAR_E = (1 - R^2) VAR_T

для получения стандартного отклонения от остатков:

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

и извлечения VAR из скобок:

SD_E = sqrt(1 - R^2) SD_T

Так что вам нужноR^2 и общее стандартное отклонение набора данных.Чтобы убедиться в этом, проверьте любую книгу вводной статистики.

1 голос
/ 24 февраля 2012

Если я просто назову это 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 для правильного теоретического подхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...