Ho una linea della migliore vestibilità. Ho bisogno di punti dati che non cambieranno la mia linea di adattamento migliore


15

Sto dando una presentazione sulle linee di adattamento. Ho una semplice funzione lineare, . Sto cercando di ottenere punti di dati sparsi che posso inserire in un diagramma a dispersione che manterrà la mia linea più adatta alla stessa equazione.y=1x+b

Mi piacerebbe imparare questa tecnica in R o Excel, a seconda di quale sia la più semplice.


1
Il caso di regressione multipla con qualsiasi set di coefficienti (di cui il tuo è un caso speciale) è discusso nell'articolo (2) di questa risposta . Seguendo i passaggi lì risolve il semplice caso di regressione. L'approccio funziona praticamente in qualsiasi pacchetto in cui è possibile simulare valori casuali della distribuzione desiderata e adattarsi a modelli di regressione.
Glen_b -Restate Monica

autodeskresearch.com/publications/samestats presenta una buona generalizzazione di questo: la ricottura simulata viene utilizzata per creare grafici a dispersione che non solo hanno valori desiderati di statistiche riassuntive, ma hanno anche una forma determinata (come il "datasaurus"). Questo è il lavoro di Justin Matejka e George Fitzmaurice intitolato Stesse statistiche, grafici diversi: generazione di set di dati con aspetto diverso e statistiche identiche tramite ricottura simulata .
whuber

Risposte:


28

Scegli una (Xio) purché almeno due differiscano. Impostare un'intercetta β0 e la pendenza β1 e definire

y0io=β0+β1Xio.

Questa vestibilità è perfetta. Senza modificare l'adattamento, è possibile modificare y0 in y=y0+ε aggiungendo qualsiasi vettore di errore ε=(εio) a condizione che sia ortogonale sia al vettore x=(xi) che al vettore costante (1,1,,1) . Un modo semplice per ottenere un tale errore è quello di selezionare qualsiasi vettore e e lasciare ε siano i residui dopo aver regredito econtro X . Nel codice seguente, e viene generato come un insieme di valori normali casuali indipendenti con media 0 e deviazione standard comune.

Inoltre, puoi anche preselezionare la quantità di scatter, magari stabilendo quale dovrebbe essere R2 . Lasciare τ2=var(yio)=β12var(Xio) , ridimensionare i residui per avere una varianza di

σ2=τ2(1/R2-1).

Questo metodo è del tutto generale: tutti i possibili esempi (per un dato set di Xio ) possono essere creati in questo modo.


Esempi

Quartetto di Anscombe

Possiamo facilmente riprodurre il Quartetto di Anscombe di quattro set di dati bivariati qualitativamente distinti con le stesse statistiche descrittive (attraverso il secondo ordine).

figura

Il codice è straordinariamente semplice e flessibile.

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)

L'output fornisce le statistiche descrittive del secondo ordine per i dati (X,y) per ciascun set di dati. Tutte e quattro le linee sono identiche. Puoi facilmente creare altri esempi modificando x(le coordinate x) e e(i modelli di errore) all'inizio.

simulazioni

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

(Non sarebbe difficile portarlo su Excel - ma è un po 'doloroso.)

(X,y)60 Xβ=(1,-1/2)( ovvero intercetta1 e pendenza -1/2), e R2=0.5.

figura

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

Eseguendo summary(fit)è possibile verificare che i coefficienti stimati siano esattamente come specificato e il multiploR2è il valore desiderato. Altre statistiche, come il valore p di regressione, possono essere regolate modificando i valori diXio.


1
Molto bello, grazie! Sfortunatamente, il tuo approccio non sembra essere immediatamente applicabile a questa domanda: set di dati simili a Anscombe con lo stesso riquadro e trama di baffi (media / std / mediana / MAD / min / max) , vero?
Stephan Kolassa,

@Stephan Hai ragione che non lo è, perché è un problema altamente non lineare. Può essere risolto in modo simile - essenzialmente trovando soluzioni fattibili a un problema di ottimizzazione vincolato - ma richiede una diversa routine di ottimizzazione e le soluzioni non sono garantite.
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.