Saya memiliki garis paling cocok. Saya membutuhkan poin data yang tidak akan mengubah jalur paling cocok saya

15

Saya memberikan presentasi tentang pemasangan garis. Saya memiliki fungsi linier sederhana, . Saya mencoba untuk mendapatkan titik data yang tersebar yang bisa saya masukkan ke dalam sebar plot yang akan menjaga garis saya paling cocok dengan persamaan yang sama.y=1x+b

Saya ingin mempelajari teknik ini dalam R atau Excel - mana yang lebih mudah.

Ryan Chase
sumber
1
Kasus regresi berganda dengan set koefisien apa pun (di antaranya milik Anda merupakan kasus khusus) dibahas pada butir (2) dari jawaban ini . Mengikuti langkah-langkah di sana menyelesaikan kasus regresi sederhana. Pendekatan ini berfungsi di hampir semua paket di mana Anda dapat mensimulasikan nilai acak dari distribusi yang diinginkan, dan menyesuaikan model regresi.
Glen_b -Reinstate Monica
autodeskresearch.com/publications/samestats menyajikan generalisasi yang bagus tentang ini: simulated annealing digunakan untuk membuat sebar plot yang tidak hanya memiliki nilai statistik ringkasan yang diinginkan, tetapi mereka juga memiliki bentuk yang ditentukan (seperti "datasaurus"). Ini adalah karya Justin Matejka dan George Fitzmaurice berjudul Same Stats, Different Graphs: Menghasilkan Kumpulan Data dengan Penampilan Bervariasi dan Statistik Identik melalui Simulasi Annealing .
whuber

Jawaban:

28

Pilih salah satu (xsaya) asalkan setidaknya dua dari mereka berbeda. Atur intercept β0 dan slope β1 dan tentukan

y0saya=β0+β1xsaya.

Ini sangat cocok. Tanpa mengubah kecocokan, Anda dapat memodifikasi y0 menjadi y=y0+ε dengan menambahkan vektor kesalahan ε=(εsaya) untuk itu asalkan itu ortogonal baik untuk vektor x=(xsaya) dan vektor konstan (1,1,...,1) . Cara mudah untuk mendapatkan kesalahan seperti itu adalah untuk memilih setiap vektor e dan membiarkan ε menjadi residu pada kemunduran e terhadap x . Dalam kode di bawah ini,e dihasilkan sebagai seperangkat nilai normal acak independen dengan rata-rata 0 dan standar deviasi umum.

Selain itu, Anda bahkan dapat memilih jumlah sebaran, mungkin dengan menentukan apa yang seharusnya R2 . Membiarkan τ2=var(ysaya)=β12var(xsaya) , skala ulang residu tersebut untuk memiliki varian

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

Metode ini sepenuhnya umum: semua contoh yang mungkin (untuk satu setxsaya ) dapat dibuat dengan cara ini.


Contohnya

Kuartet Anscombe

Kita dapat dengan mudah mereproduksi Kuartet Anscombe dari empat dataset bivariat yang berbeda secara kualitatif yang memiliki statistik deskriptif yang sama (melalui urutan kedua).

Angka

Kode ini sangat sederhana dan fleksibel.

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)

Outputnya memberikan statistik deskriptif orde kedua untuk (x,y) untuk setiap dataset. Keempat garis itu identik. Anda dapat dengan mudah membuat lebih banyak contoh dengan mengubah x(koordinat x) dan e(pola kesalahan) sejak awal.

Simulasi

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

(Tidaklah sulit untuk mem-porting ini ke Excel - tetapi ini sedikit menyakitkan.)

(x,y)60 x nilai ,β=(1,-1/2)( Yaitu , mencegat1 dan kemiringan -1/2), dan R2=0,5.

Angka

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

Dengan mengeksekusi summary(fit)Anda dapat memeriksa bahwa koefisien yang diperkirakan persis seperti yang ditentukan dan kelipatannyaR2adalah nilai yang dimaksud. Statistik lain, seperti nilai p regresi, dapat disesuaikan dengan memodifikasi nilaixsaya.

whuber
sumber
1
Bagus sekali, terima kasih! Sayangnya, pendekatan Anda tampaknya tidak langsung berlaku untuk pertanyaan ini: Dataset Anscombe seperti dengan kotak dan plot kumis yang sama (rata-rata / std / median / MAD / min / maks) , bukan?
Stephan Kolassa
@Stephan Anda benar, karena itu masalah yang sangat tidak linier. Ini dapat diselesaikan dengan cara yang serupa - pada dasarnya dengan menemukan solusi yang layak untuk masalah optimasi terbatas - tetapi memerlukan rutin optimasi yang berbeda dan solusi tidak dijamin.
whuber