Tengo una línea de mejor ajuste. Necesito puntos de datos que no cambien mi línea de mejor ajuste

15

Estoy dando una presentación sobre líneas de ajuste. Tengo una función lineal simple, y=1x+b . Estoy tratando de obtener puntos de datos dispersos que puedo poner en un diagrama de dispersión que mantendrá mi línea de mejor ajuste en la misma ecuación.

Me encantaría aprender esta técnica en R o Excel, lo que sea más fácil.

Ryan Chase
fuente
1
El caso de regresión múltiple con cualquier conjunto de coeficientes (de los cuales el suyo es un caso especial) se discute en el ítem (2) de esta respuesta . Siguiendo los pasos allí resuelve el caso de regresión simple. El enfoque funciona en casi cualquier paquete en el que pueda simular valores aleatorios de la distribución deseada y ajustar modelos de regresión.
Glen_b -Reinstale a Monica
autodeskresearch.com/publications/samestats presenta una buena generalización de esto: el recocido simulado se usa para crear diagramas de dispersión que no solo tienen valores deseados de estadísticas de resumen, sino que también tienen una forma determinada (como el "datasaurus"). Este es un trabajo de Justin Matejka y George Fitzmaurice titulado Las mismas estadísticas, diferentes gráficos: generación de conjuntos de datos con apariencia variada y estadísticas idénticas a través del recocido simulado .
whuber

Respuestas:

28

Elija cualquiera (xi) siempre que al menos dos de ellos difieran. Establezca una intersección β0 y una pendiente β1 y defina

y0i=β0+β1xi.

Este ajuste es perfecto. Sin cambiar el ajuste, puede modificar y0 a y=y0+ε agregando cualquier vector de error ε=(εi) siempre que sea ortogonal tanto al vector x=(xi) como al vector constante (1,1,,1) . Una manera fácil de obtener este tipo de error es escoger cualquier vector de e y dejar que ε sea los residuos sobre la regresión de econtra x . En el siguiente código, e se genera como un conjunto de valores normales aleatorios independientes con media 0 y desviación estándar común.

Además, incluso puede preseleccionar la cantidad de dispersión, tal vez estipulando lo que debe ser R2 . Dejando τ2=var(yi)=β12var(xi) , reescalar esos residuos para tener una varianza de

σ2=τ2(1/R21).

Este método es completamente general: todos los ejemplos posibles (para un conjunto dado de xi ) se pueden crear de esta manera.


Ejemplos

Cuarteto de Anscombe

Podemos reproducir fácilmente el Cuarteto de Anscombe de cuatro conjuntos de datos bivariados cualitativamente distintos que tienen las mismas estadísticas descriptivas (a través del segundo orden).

Figure

El código es notablemente simple y flexible.

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)

La salida proporciona las estadísticas descriptivas de segundo orden para los datos (x,y) de cada conjunto de datos. Las cuatro líneas son idénticas. Puede crear fácilmente más ejemplos alterando x(las coordenadas x) y e(los patrones de error) desde el principio.

Simulaciones

Ryβ=(β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))
}

(No sería difícil portar esto a Excel, pero es un poco doloroso).

(x,y)60 xβ=(1,1/2)11/2R2=0.5

Figure

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")
}))

Al ejecutar summary(fit), puede verificar que los coeficientes estimados son exactamente como se especifica y los múltiplesR2es el valor pretendido Otras estadísticas, como el valor p de regresión, se pueden ajustar modificando los valores deXyo.

whuber
fuente
1
¡Muy bien, gracias! Desafortunadamente, su enfoque no parece ser inmediatamente aplicable a esta pregunta: conjuntos de datos similares a Anscombe con la misma gráfica de cuadro y bigotes (media / estándar / mediana / MAD / min / máx) , ¿verdad?
Stephan Kolassa
@Stephan Tienes razón en que no lo es, porque ese es un problema altamente no lineal. Se puede resolver de manera similar, esencialmente mediante la búsqueda de soluciones viables a un problema de optimización restringido, pero requiere una rutina de optimización diferente y no se garantizan las soluciones.
whuber