Pilih salah satu ( xsaya) asalkan setidaknya dua dari mereka berbeda. Atur intercept β0 dan slope β1 dan tentukan
y0 i= β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) = β21var ( 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).
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
R
yβ= ( β0, β1)R20 ≤ R2≤ 1x
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.
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.