У меня есть линия наилучшего соответствия. Мне нужны данные, которые не изменят мою линию наилучшего соответствия

15

Я делаю презентацию о примерочных линиях. У меня есть простая линейная функция, . Я пытаюсь получить разбросанные точки данных, которые я могу поместить в график рассеяния, чтобы моя линия лучше соответствовала тому же уравнению.y=1x+b

Я хотел бы изучить эту технику в R или Excel - в зависимости от того, что проще.

Райан Чейз
источник
1
Случай множественной регрессии с любым набором коэффициентов (из которых ваш является частным случаем) обсуждается в пункте (2) этого ответа . Выполнение этих шагов разрешает случай простой регрессии. Подход работает практически в любом пакете, где вы можете моделировать случайные значения желаемого распределения и подгонять регрессионные модели.
Glen_b
autodeskresearch.com/publications/samestats представляет собой хорошее обобщение этого: имитированный отжиг используется для создания диаграмм рассеяния, которые не только имеют требуемые значения суммарной статистики, но и имеют определенную форму (например, «datasaurus»). Это работа Джастина Матейки и Джорджа Фицмориса, озаглавленная « Одинаковая статистика, разные графики: создание наборов данных с различным внешним видом и идентичной статистикой с помощью имитации отжига» .
whuber

Ответы:

28

Выберите любой если хотя бы два из них отличаются. Установите и slope и определите(xi)β0β1

y0i=β0+β1xi.

Это подходит идеально. Не меняя подгонку, вы можете изменить на , добавив к нему любой вектор ошибок при условии, что он ортогонален как вектору и вектору констант . Простой способ получить такую ​​ошибку - выбрать любой вектор и позволить быть остатками при регрессии против . В приведенном ниже коде генерируется как набор независимых случайных нормальных значений со средним и общим стандартным отклонением.y0y=y0+εε=(εi)x=(xi)(1,1,,1)e ε e x e 0eεexe0

Кроме того, вы даже можете предварительно выбрать количество разброса, возможно, указав, какой должен быть . Позволяя , измените масштаб этих остатков, чтобы иметь дисперсиюR2τ2=var(yi)=β12var(xi)

σ2=τ2(1/R21).

Этот метод является полностью общим: все возможные примеры (для данного набора ) могут быть созданы таким образом.xi


Примеры

Анскомб квартет

Мы можем легко воспроизвести квартет Анскомба из четырех качественно различных двумерных наборов данных, имеющих одинаковую описательную статистику (через второй порядок).

фигура

Код удивительно прост и гибок.

set.seed(17)
rho <- 0.816                                             # Common correlation coefficient
x.0 <- 4:14
peak <- 10
n <- length(x.0)

# -- Describe a collection of datasets.
x <- list(x.0, x.0, x.0, c(rep(8, n-1), 19))             # x-values
e <- list(rnorm(n), -(x.0-peak)^2, 1:n==peak, rnorm(n))  # residual patterns
f <- function(x) 3 + x/2                                 # Common regression line

par(mfrow=c(2,2))
xlim <- range(as.vector(x))
ylim <- f(xlim + c(-2,2))
s <- sapply(1:4, function(i) {
  # -- Create data.
  y <- f(x[[i]])                                         # Model values
  sigma <- sqrt(var(y) * (1 / rho^2 - 1))                # Conditional S.D.
  y <- y + sigma * scale(residuals(lm(e[[i]] ~ x[[i]]))) # Observed values

  # -- Plot them and their OLS fit.
  plot(x[[i]], y, xlim=xlim, ylim=ylim, pch=16, col="Orange", xlab="x")
  abline(lm(y ~ x[[i]]), col="Blue")

  # -- Return some regression statistics.
  c(mean(x[[i]]), var(x[[i]]), mean(y), var(y), cor(x[[i]], y), coef(lm(y ~ x[[i]])))
})
# -- Tabulate the regression statistics from all the datasets.
rownames(s) <- c("Mean x", "Var x", "Mean y", "Var y", "Cor(x,y)", "Intercept", "Slope")
t(s)

Выходные данные дают описательную статистику второго порядка для данных для каждого набора данных. Все четыре строки идентичны. Вы можете легко создать больше примеров, изменив (x-координаты) и (шаблоны ошибок) в самом начале.(x,y)xe

Симуляторы

Эта Rфункция генерирует векторы соответствии со спецификациями и (с ), учитывая набор значений .yβ=(β0,β1)R20R21x

simulate <- function(x, beta, r.2) {
  sigma <- sqrt(var(x) * beta[2]^2 * (1/r.2 - 1))
  e <- residuals(lm(rnorm(length(x)) ~ x))
  return (y.0 <- beta[1] + beta[2]*x + sigma * scale(e))
}

(Нетрудно перенести это в Excel - но это немного больно.)

В качестве примера его использования, вот четыре моделирования данных с использованием общего набора значений, ( то есть , отсекаемые и наклон ) и .(x,y)60 xβ=(1,1/2)11/2R2=0.5

фигура

n <- 60
beta <- c(1,-1/2)
r.2 <- 0.5   # Between 0 and 1

set.seed(17)
x <- rnorm(n)

par(mfrow=c(1,4))
invisible(replicate(4, {
  y <- simulate(x, beta, r.2)
  fit <- lm(y ~ x)
  plot(x, y)
  abline(fit, lwd=2, col="Red")
}))

Выполнив, summary(fit)вы можете проверить, что оценочные коэффициенты точно такие, как указано, и кратное является предполагаемым значением. Другие статистические данные, такие как значение р-регрессии, могут быть скорректированы путем изменения значений .R2xi

Whuber
источник
1
Очень мило спасибо! К сожалению, ваш подход, по-видимому, не имеет непосредственного отношения к этому вопросу: анскомбоподобные наборы данных с тем же блоком и графиком усов (среднее / стандартное / среднее / MAD / мин / макс) , не так ли?
Стефан Коласса
@ Стефан Вы правы, что это не так, потому что это очень нелинейная проблема. Это может быть решено аналогичным образом - по существу, путем поиска возможных решений для ограниченной задачи оптимизации - но требует другой процедуры оптимизации, и решения не гарантируются.
whuber