इनमें से कम से कम दो अलग-अलग दिए गए किसी भी (xi) चुनें । एक अवरोधन सेट β0 और ढलान β1 और परिभाषित
y0i=β0+β1xi.
यह फिट एकदम सही है। फिट बदल रहा बिना, आप संशोधित कर सकते हैं y0 करने के लिए y= य0+ ε किसी भी त्रुटि वेक्टर जोड़कर ε = ( ε)मैं) के लिए यह प्रदान की यह दोनों वेक्टर के लिए ओर्थोगोनल है x = ( x)मैं) और निरंतर वेक्टर ( 1 , 1 , … , 1 ) । एक आसान तरीका है इस तरह के एक त्रुटि प्राप्त करने के लिए लेने के लिए है किसी भी वेक्टर इ और जाने ε regressing पर बच गया हो इएक्स खिलाफ । नीचे दिए गए कोड में, इ मतलब 0 और सामान्य मानक विचलन के साथ स्वतंत्र यादृच्छिक सामान्य मूल्यों के एक सेट के रूप में उत्पन्न होता है ।
इसके अलावा, आप तितर-बितर की मात्रा को भी कम कर सकते हैं, शायद यह निर्धारित करके कि आर2 क्या होना चाहिए। दे τ2= वर ( यमैं) = β21var ( x)मैं) , उन बच rescale के विचरण के लिए
σ2= τ2( 1 / आर2( 1 ) ।
यह विधि पूरी तरह से सामान्य है: सभी संभावित उदाहरण ( एक्समैं दिए गए सेट के लिए ) इस तरह से बनाए जा सकते हैं।
उदाहरण
Anscombe की चौकड़ी
हम आसानी से एक ही वर्णनात्मक आंकड़ों (दूसरे क्रम के माध्यम से) वाले चार गुणात्मक रूप से अलग-अलग द्विभाजित डेटासेट के Anscombe की चौकड़ी को पुन: पेश कर सकते हैं ।
कोड उल्लेखनीय रूप से सरल और लचीला है।
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)
आउटपुट प्रत्येक डेटासेट के लिए ( एक्स , वाई) डेटा के लिए दूसरे क्रम का वर्णनात्मक आँकड़े देता है । सभी चार लाइनें समान हैं। आप आसानी से x
(x- निर्देशांक) और e
(त्रुटि पैटर्न) बदलकर ( शुरुआत में) पैटर्न को और अधिक उदाहरण बना सकते हैं ।
सिमुलेशन
R
yβ= ( β0, β1)आर20 ≤ आर2≤ १एक्स
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))
}
(इसे एक्सेल में पोर्ट करना मुश्किल नहीं होगा - लेकिन यह थोड़ा दर्दनाक है।)
( एक्स , वाई)60 एक्सβ= ( 1 , - 1 / 2 )1- 1 / 2आर2= 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)
आर2एक्समैं।