Chọn bất kỳ (xi) được cung cấp ít nhất hai trong số chúng khác nhau. Đặt đánh chặn β0 và dốc β1 và xác định
y0i=β0+β1xi.
Sự phù hợp này là hoàn hảo. Nếu không có thay đổi phù hợp, bạn có thể sửa đổi y0 đến y=y0+ε bằng cách thêm bất kỳ vector lỗi ε=(εi) để nó miễn là nó là trực giao cả cho vector x=(xi) và vector liên tục (1,1,…,1) . Một cách dễ dàng để có được lỗi này là để chọn bất kỳ vector e và để ε là dư khi suy thoái echống lại x . Trong mã dưới đây, e được tạo như một tập hợp các giá trị bình thường ngẫu nhiên độc lập với giá trị trung bình 0 và độ lệch chuẩn chung.
Hơn nữa, bạn thậm chí có thể chọn trước lượng phân tán, có lẽ bằng cách quy định R2 nên là gì. Cho τ2=var(yi)=β21var(xi) , rescale những dư để có một phương sai của
σ2=τ2(1/R2−1).
Phương pháp này hoàn toàn chung chung: tất cả các ví dụ có thể (đối với một tập xi ) có thể được tạo theo cách này.
Ví dụ
Bộ tứ của Anscombe
Chúng tôi có thể dễ dàng sao chép Bộ tứ của bốn bộ dữ liệu hai biến số định tính khác nhau có cùng số liệu thống kê mô tả (thông qua thứ tự thứ hai).
Mã này rất đơn giản và linh hoạt.
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)
Đầu ra đưa ra số liệu thống kê mô tả bậc hai cho dữ liệu ( x , y) cho mỗi tập dữ liệu. Tất cả bốn dòng là giống hệt nhau. Bạn có thể dễ dàng tạo thêm ví dụ bằng cách thay đổi x
(tọa độ x) và e
(các mẫu lỗi) ngay từ đầu.
Mô phỏng
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))
}
(Sẽ không khó để chuyển cái này sang Excel - nhưng hơi đau một chút.)
(x,y)60 xβ=(1,−1/2)1−1/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