Możesz podążać za wprowadzeniem Dougherty'ego do ekonometrii , być może biorąc pod uwagę, że jest zmienną niestochastyczną, i określając średnie odchylenie kwadratowe x jako MSD ( x ) = 1xx. Należy zauważyć, że MSD jest mierzony w kwadracie jednostekx(np. Jeślixjest wcm,to MSD jest wcm2), podczas gdy średnie odchylenie kwadratowe pierwiastka,RMSD(x)=√MSD(x)=1n∑ni=1(xi−x¯)2xxcmcm2 jest w oryginalnej skali. To dajeRMSD(x)=MSD(x)−−−−−−−√
Corr(β^OLS0,β^OLS1)=−x¯MSD(x)+x¯2−−−−−−−−−−−√
To powinno pomóc zobaczyć jak korelacja ma wpływ zarówno na średnią z (w szczególności, korelacja między nachylenie i przecięcie estymatorów jest usuwany, jeśli x zmienna jest wyśrodkowany), a także przez jego rozprzestrzeniania . (Ten rozkład mógł również uczynić asymptotyki bardziej oczywistymi!)xx
Ponownie podkreślę znaczenie tego wyniku: jeśli nie ma oznaczającego zera, możemy go przekształcić, odejmując ˉ x , aby był teraz wyśrodkowany. Jeśli dopasujemy linię regresji y na x - ˉ x, szacunki nachylenia i przecięcia są nieskorelowane - niedoszacowanie lub przeszacowanie w jednym nie powoduje zwykle niedoszacowania lub przeszacowania w drugim. Ale ta linia regresji jest po prostu tłumaczeniem linii regresji y na x ! Błąd standardowy punktu przecięcia z y na x - ° x linii jest po prostu miarą niepewności yxx¯yx−x¯yxyx−x¯y^kiedy twoja przetłumaczona zmienna ; gdy ta linia jest tłumaczony z powrotem do jego pierwotnego położenia, ten powraca do stanu błąd standardowy Y przy x = ˉ x . Bardziej ogólnie, błąd standardowy Y w każdej x wartości jest tylko błąd standardowy przecięcia regresji Y w odpowiednio tłumaczone x ; Błąd standardowy y przy x = 0 jest oczywiście błędu standardowego punktu przecięcia w oryginalnych, nie podlegającym translacji regresji.x−x¯=0y^x=x¯y^xyxy^x=0
Ponieważ możemy tłumaczyć , w pewnym sensie nie ma nic szczególnego w x = 0 , a zatem nic szczególnego P 0 . Przy odrobinie myślenia, co mam do powiedzenia prace dla Y na każdej wartości x , co jest przydatne, jeśli szukasz wgląd np przedziały ufności dla średnich odpowiedzi od linii regresji. Jednak widzieliśmy, że tam jest coś szczególnego y przy x = ˉ x , bo jest tu, że błędy w szacowanej wysokości linii regresji - co jest oczywiście szacuje się naxx=0β^0y^xy^x=x¯ - a błędy w szacowanym nachyleniu linii regresji nie mają ze sobą nic wspólnego. Szacowany przechwytujący jest β 0= °° y - β 1 ˉ x i błędy w estymacji musi wynikać albo z oszacowania °° Y lub estymacji beta 1(ponieważ uważanyXjak wolny stochastyczny); teraz wiemy, że te dwa źródła błędów są nieskorelowane, algebraicznie jasne jest, dlaczego powinna istnieć ujemna korelacja między szacowanym nachyleniem a przecięciem (przeszacowanie nachylenia będzie miało tendencję do niedoceniania przechwytywania, o ile ˉy¯β^0=y¯−β^1x¯y¯β^1x), ale dodatnia korelacja między szacowaną przecięcia i estymowanej odpowiedzi Y = ˉ Y przyx= ˉ x . Ale widzą takie relacje również bez algebry.x¯<0y^=y¯x=x¯
Wyobraź sobie oszacowaną linię regresji jako linijkę. Ten władca musi przejść . Właśnie widzieliśmy, że istnieją dwie zasadniczo niezwiązane ze sobą niepewności w lokalizacji tej linii, które wizualizuję kinestetycznie jako niepewność „drgającą” i „równoległą przesuwającą się”. Zanim otoczysz linijkę, przytrzymaj ją w ( ˉ x , ˉ y )(x¯,y¯)(x¯,y¯)jako czop, a następnie nadaj mu mocny odgłos związany z twoją niepewnością na zboczu. Linijka będzie się dobrze kołysać, bardziej gwałtownie, więc jeśli jesteś bardzo niepewny co do nachylenia (rzeczywiście, poprzednio dodatnie nachylenie będzie całkiem prawdopodobne, że będzie ujemne, jeśli twoja niepewność jest duża), ale zwróć uwagę, że wysokość linii regresji przy pozostaje niezmieniony przez tego rodzaju niepewność, a efekt twangu jest bardziej zauważalny w dalszej odległości od środka, na który patrzysz.x=x¯
Aby „zsunąć” linijkę, chwyć ją mocno i przesuń w górę i w dół, uważając, aby równolegle do pierwotnej pozycji - nie zmieniać nachylenia! To, jak energicznie przesuwać go w górę i w dół, zależy od tego, jak niepewna jest wysokość linii regresji, gdy przechodzi ona przez punkt średni; pomyśl o tym, jaki byłby standardowy błąd punktu przecięcia, gdyby został przetłumaczony, aby oś y przechodziła przez punkt średni. Alternatywnie, ponieważ szacowana wysokość linii regresji wynosi po prostu ˉ y , jest to również błąd standardowy ˉ y . Zauważ, że ten rodzaj „przesuwającej się” niepewności wpływa na wszystkie punkty linii regresji w jednakowy sposób, w przeciwieństwie do „twangu”.xyy¯y¯
Te dwie niewiadome zastosowanie niezależnie (dobrze, uncorrelatedly, ale jeśli założymy, zazwyczaj dystrybuowane warunki błędach to powinny one być technicznie niezależny) tak Wysokości y wszystkich punktów na linii regresji są dotknięte przez „twanging” niepewności, który jest zero u wredne i coraz gorzej, a „przesuwająca się” niepewność, która jest wszędzie taka sama. (Czy widzisz związek z przedziałami ufności regresji, które obiecałem wcześniej, szczególnie to, że ich szerokość jest węższa przy ˉ x ?)y^x¯
Obejmuje to niepewność y przy x = 0 , co jest w zasadzie to, co rozumiemy przez standardowego błędu P 0 . Załóżmy teraz, że ˉ x jest po prawej stronie x = 0 ; następnie zmiana wykresu na wyższy szacowany spadek ma tendencję do zmniejszania naszego szacowanego punktu przecięcia, co ujawni szybki szkic. Jest to korelacja ujemna przewidywana przez - ˉ xy^x=0β^0x¯x=0 gdyˉxjest dodatnie. I odwrotnie, jeśliˉxjest na lewo odx=0, zobaczysz, że wyższe oszacowane nachylenie ma tendencję do zwiększania naszego szacowanego przecięcia, zgodnie zdodatniąkorelacją, którą twoje równanie przewiduje, gdyˉxjest ujemne. Zauważ, że jeśliˉxjest daleko od zera, ekstrapolacja linii regresji niepewnego gradientu w kierunkuy−x¯MSD(x)+x¯2√x¯x¯x=0x¯x¯y-osi stają się coraz bardziej niepewne (amplituda „twang” pogarsza się od średniej). Przycisków „twanging” błąd w - perspektywie znacznie przewyższają „ślizgową” błąd w °° a perspektywie więc błąd p 0 jest prawie całkowicie określona przez każdy błąd p 1 . Jak można łatwo zweryfikować algebraicznie, jeśli weźmiemy ˉ x → ± ∞ bez zmiany MSD lub odchylenie standardowe błędy s u , korelacja pomiędzy P 0 i−β^1x¯y¯β^0β^1x¯→±∞suβ^0ma tendencję do∓1.β^1∓1
Aby to zilustrować (możesz kliknąć obraz prawym przyciskiem myszy i zapisać go lub wyświetlić go w pełnym rozmiarze w nowej karcie, jeśli ta opcja jest dla Ciebie dostępna). Wybrałem rozważenie powtarzania próbek , gdzie u i ∼ N ( 0 , 10 2 ) to iid, w stosunku do ustalonego zestawu wartości x przy ˉ x = 10 , więc E ( ˉ y ) = 25yi=5+2xi+uiui∼N(0,102)xx¯=10E(y¯)=25. W tym układzie istnieje dość silna korelacja ujemna między szacowanym nachyleniem i przecięciem, a słabsza dodatnia korelacja między , szacunkową średnią odpowiedzią przy x = ˉ x i oszacowanym przecięciem. Animacja pokazuje kilka symulowanych próbek, z linią regresji próbki (złota) narysowaną nad rzeczywistą (czarną) linią regresji. Drugi rząd pokazuje, jak wyglądałby zbiór oszacowanych linii regresji, gdyby wystąpił błąd tylko w szacowanym ˉ y, a nachylenia pasowały do prawdziwego nachylenia (błąd „przesuwu”); wtedy, jeśli wystąpił błąd tylko na zboczach i ˉ yy¯x=x¯y¯y¯dopasował jego wartość populacji (błąd „wykręcania”); i wreszcie, jak rzeczywiście wyglądał zbiór linii szacunkowych, gdy oba źródła błędów zostały połączone. Zostały one zakodowane kolorami według wielkości faktycznie oszacowanego przechwytywania (nie przechwytywania pokazanego na pierwszych dwóch wykresach, na których wyeliminowano jedno ze źródeł błędów) od niebieskiego dla niskich przechwyceń do czerwonego dla wysokich przechwyceń. Należy pamiętać, że od samych kolorach widzimy, że próbki z niskiego tendencję do wytwarzania obniżyć szacowane przechwytuje, podobnie jak próbki z wysokiegoy¯szacowane stoki. Następny rząd pokazuje symulowane (histogram) i teoretyczne (krzywa normalna) rozkłady prób oszacowań, a ostatni rząd pokazuje wykresy rozrzutu między nimi. Zauważ, że nie ma korelacji między a szacowanym nachyleniem, ujemna korelacja między szacowanym przecięciem a nachyleniem oraz dodatnia korelacja między przecięciem a ˉ y .y¯y¯
Co robi MSD w mianowniku ? Rozkładanie zakresxwartości zmierzyć się jest dobrze znany, co pozwala na bardziej precyzyjne oszacowanie nachylenia, a intuicja jest jasne od szkicu, ale nie pozwalają oszacowaćˉylepiej. Sugeruję wizualizację zbliżenia MSD do zera (tj. Punkty próbkowania tylko bardzo blisko średniejx), aby twoja niepewność na zboczu stała się ogromna: pomyśl wielkie wielkie twangi, ale bez zmiany niepewności poślizgu. Jeśli twojaośyjest jakąkolwiek odległością odˉx(innymi słowy, jeśliˉx≠0−x¯MSD(x)+x¯2√xy¯xyx¯x¯≠0) przekonasz się, że niepewność w twoim punkcie przechwytywania całkowicie zdominowana jest przez błąd skrętu związany ze spadkiem. W przeciwieństwie do tego, jeśli zwiększysz rozpiętość swoich pomiarów , bez zmiany średniej, znacznie poprawisz precyzję oszacowania nachylenia i potrzebujesz tylko delikatnych twangów do linii. Wysokość przechwytywania jest teraz zdominowana przez niepewność poślizgu, która nie ma nic wspólnego z szacowanym nachyleniem. Jest to zgodne z faktem algebraicznym, że korelacja między szacowanym nachyleniem i przecięciem dąży do zera jako MSD ( x ) → ± ∞, a gdy ˉ x ≠ 0 , w kierunku ± 1xMSD(x)→±∞x¯≠0±1(znak jest przeciwieństwem znaku ) jako MSD ( x ) → 0 .x¯MSD(x)→0
Korelacja estymatorów nachylenia i przecięcia była funkcją zarówno i MSD (lub RMSD) x , więc w jaki sposób zwiększają się ich względne udziały? W rzeczywistości liczy się tylko stosunek ˉ x do RMSD x . Zgodnie z intuicją geometryczną RMSD daje nam rodzaj „jednostki naturalnej” dla x ; jeśli przeskalujemy oś x za pomocą w i = x i / RMSD ( x ), to jest to odcinek poziomy, który pozostawia szacowany punkt przecięcia i ˉ y bez zmian, daje nam nowyx¯xx¯xxxwi=xi/RMSD(x)y¯ i mnoży szacunkowe nachylenie przez RMSD x . Wzór na korelację między nowymi estymatorami nachylenia i przecięcia dotyczy tylko RMSD ( w ) , który wynosi jeden, i ˉ w , który jest stosunkiem ˉ xRMSD(w)=1xRMSD(w)w¯ . Ponieważ oszacowanie przecięcia pozostało niezmienione, a oszacowanie nachylenia zostało jedynie pomnożone przez stałą dodatnią, korelacja między nimi nie uległa zmianie: stąd korelacja międzypierwotnymnachyleniem a przecięciem musi również zależeć tylko od ˉ xx¯RMSD(x)x¯RMSD(x)−x¯MSD(x)+x¯2√RMSD(x)Corr(β^0,β^1)=−(x¯/RMSD(x))1+(x¯/RMSD(x))2√.
To find the correlation between β^0 and y¯, consider Cov(β^0,y¯)=Cov(y¯−β^1x¯,y¯). By bilinearity of Cov this is Cov(y¯,y¯)−x¯Cov(β^1,y¯). The first term is Var(y¯)=σ2un while the second term we established earlier to be zero. From this we deduce
Corr(β^0,y¯)=11+(x¯/RMSD(x))2−−−−−−−−−−−−−−−−√
So this correlation also depends only on the ratio x¯RMSD(x). Note that the squares of Corr(β^0,β^1) and Corr(β^0,y¯) sum to one: we expect this since all sampling variation (for fixed x) in β^0 is due either to variation in β^1 or to variation in y¯, and these sources of variation are uncorrelated with each other. Here is a plot of the correlations against the ratio x¯RMSD(x).
The plot clearly shows how when x¯ is high relative to the RMSD, errors in the intercept estimate are largely due to errors in the slope estimate and the two are closely correlated, whereas when x¯ is low relative to the RMSD, it is error in the estimation of y¯ that predominates, and the relationship between intercept and slope is weaker. Note that the correlation of intercept with slope is an odd function of the ratio x¯RMSD(x), so its sign depends on the sign of x¯ and it is zero if x¯=0, whereas the correlation of intercept with y¯ is always positive and is an even function of the ratio, i.e. it doesn't matter what side of the y-axis that x¯ is. The correlations are equal in magnitude if x¯ is one RMSD away from the y-axis, when Corr(β^0,y¯)=12√≈0.707 and Corr(β^0,β^1)=±12√≈±0.707 where the sign is opposite that of x¯. In the example in the simulation above, x¯=10 and RMSD(x)≈5.16 so the mean was about 1.93 RMSDs from the y-axis; at this ratio, the correlation between intercept and slope is stronger, but the correlation between intercept and y¯ is still not negligible.
As an aside, I like to think of the formula for the standard error of the intercept,
s.e.(β^OLS0)=s2u(1n+x¯2nMSD(x))−−−−−−−−−−−−−−−−−√
as sliding error+twanging error−−−−−−−−−−−−−−−−−−−−−−−√, and ditto for the formula for the standard error of y^ at x=x0 (used for confidence intervals for the mean response, and of which the intercept is just a special case as I explained earlier via a translation argument),
s.e.(y^)=s2u(1n+(x0−x¯)2nMSD(x))−−−−−−−−−−−−−−−−−√
R code for plots
require(graphics)
require(grDevices)
require(animation
#This saves a GIF so you may want to change your working directory
#setwd("~/YOURDIRECTORY")
#animation package requires ImageMagick or GraphicsMagick on computer
#See: http://www.inside-r.org/packages/cran/animation/docs/im.convert
#You might only want to run up to the "STATIC PLOTS" section
#The static plot does not save a file, so need to change directory.
#Change as desired
simulations <- 100 #how many samples to draw and regress on
xvalues <- c(2,4,6,8,10,12,14,16,18) #used in all regressions
su <- 10 #standard deviation of error term
beta0 <- 5 #true intercept
beta1 <- 2 #true slope
plotAlpha <- 1/5 #transparency setting for charts
interceptPalette <- colorRampPalette(c(rgb(0,0,1,plotAlpha),
rgb(1,0,0,plotAlpha)), alpha = TRUE)(100) #intercept color range
animationFrames <- 20 #how many samples to include in animation
#Consequences of previous choices
n <- length(xvalues) #sample size
meanX <- mean(xvalues) #same for all regressions
msdX <- sum((xvalues - meanX)^2)/n #Mean Square Deviation
minX <- min(xvalues)
maxX <- max(xvalues)
animationFrames <- min(simulations, animationFrames)
#Theoretical properties of estimators
expectedMeanY <- beta0 + beta1 * meanX
sdMeanY <- su / sqrt(n) #standard deviation of mean of Y (i.e. Y hat at mean x)
sdSlope <- sqrt(su^2 / (n * msdX))
sdIntercept <- sqrt(su^2 * (1/n + meanX^2 / (n * msdX)))
data.df <- data.frame(regression = rep(1:simulations, each=n),
x = rep(xvalues, times = simulations))
data.df$y <- beta0 + beta1*data.df$x + rnorm(n*simulations, mean = 0, sd = su)
regressionOutput <- function(i){ #i is the index of the regression simulation
i.df <- data.df[data.df$regression == i,]
i.lm <- lm(y ~ x, i.df)
return(c(i, mean(i.df$y), coef(summary(i.lm))["x", "Estimate"],
coef(summary(i.lm))["(Intercept)", "Estimate"]))
}
estimates.df <- as.data.frame(t(sapply(1:simulations, regressionOutput)))
colnames(estimates.df) <- c("Regression", "MeanY", "Slope", "Intercept")
perc.rank <- function(x) ceiling(100*rank(x)/length(x))
rank.text <- function(x) ifelse(x < 50, paste("bottom", paste0(x, "%")),
paste("top", paste0(101 - x, "%")))
estimates.df$percMeanY <- perc.rank(estimates.df$MeanY)
estimates.df$percSlope <- perc.rank(estimates.df$Slope)
estimates.df$percIntercept <- perc.rank(estimates.df$Intercept)
estimates.df$percTextMeanY <- paste("Mean Y",
rank.text(estimates.df$percMeanY))
estimates.df$percTextSlope <- paste("Slope",
rank.text(estimates.df$percSlope))
estimates.df$percTextIntercept <- paste("Intercept",
rank.text(estimates.df$percIntercept))
#data frame of extreme points to size plot axes correctly
extremes.df <- data.frame(x = c(min(minX,0), max(maxX,0)),
y = c(min(beta0, min(data.df$y)), max(beta0, max(data.df$y))))
#STATIC PLOTS ONLY
par(mfrow=c(3,3))
#first draw empty plot to reasonable plot size
with(extremes.df, plot(x,y, type="n", main = "Estimated Mean Y"))
invisible(mapply(function(a,b,c) { abline(a, b, col=c) },
estimates.df$Intercept, beta1,
interceptPalette[estimates.df$percIntercept]))
with(extremes.df, plot(x,y, type="n", main = "Estimated Slope"))
invisible(mapply(function(a,b,c) { abline(a, b, col=c) },
expectedMeanY - estimates.df$Slope * meanX, estimates.df$Slope,
interceptPalette[estimates.df$percIntercept]))
with(extremes.df, plot(x,y, type="n", main = "Estimated Intercept"))
invisible(mapply(function(a,b,c) { abline(a, b, col=c) },
estimates.df$Intercept, estimates.df$Slope,
interceptPalette[estimates.df$percIntercept]))
with(estimates.df, hist(MeanY, freq=FALSE, main = "Histogram of Mean Y",
ylim=c(0, 1.3*dnorm(0, mean=0, sd=sdMeanY))))
curve(dnorm(x, mean=expectedMeanY, sd=sdMeanY), lwd=2, add=TRUE)
with(estimates.df, hist(Slope, freq=FALSE,
ylim=c(0, 1.3*dnorm(0, mean=0, sd=sdSlope))))
curve(dnorm(x, mean=beta1, sd=sdSlope), lwd=2, add=TRUE)
with(estimates.df, hist(Intercept, freq=FALSE,
ylim=c(0, 1.3*dnorm(0, mean=0, sd=sdIntercept))))
curve(dnorm(x, mean=beta0, sd=sdIntercept), lwd=2, add=TRUE)
with(estimates.df, plot(MeanY, Slope, pch = 16, col = rgb(0,0,0,plotAlpha),
main = "Scatter of Slope vs Mean Y"))
with(estimates.df, plot(Slope, Intercept, pch = 16, col = rgb(0,0,0,plotAlpha),
main = "Scatter of Intercept vs Slope"))
with(estimates.df, plot(Intercept, MeanY, pch = 16, col = rgb(0,0,0,plotAlpha),
main = "Scatter of Mean Y vs Intercept"))
#ANIMATED PLOTS
makeplot <- function(){for (i in 1:animationFrames) {
par(mfrow=c(4,3))
iMeanY <- estimates.df$MeanY[i]
iSlope <- estimates.df$Slope[i]
iIntercept <- estimates.df$Intercept[i]
with(extremes.df, plot(x,y, type="n", main = paste("Simulated dataset", i)))
with(data.df[data.df$regression==i,], points(x,y))
abline(beta0, beta1, lwd = 2)
abline(iIntercept, iSlope, lwd = 2, col="gold")
plot.new()
title(main = "Parameter Estimates")
text(x=0.5, y=c(0.9, 0.5, 0.1), labels = c(
paste("Mean Y =", round(iMeanY, digits = 2), "True =", expectedMeanY),
paste("Slope =", round(iSlope, digits = 2), "True =", beta1),
paste("Intercept =", round(iIntercept, digits = 2), "True =", beta0)))
plot.new()
title(main = "Percentile Ranks")
with(estimates.df, text(x=0.5, y=c(0.9, 0.5, 0.1),
labels = c(percTextMeanY[i], percTextSlope[i],
percTextIntercept[i])))
#first draw empty plot to reasonable plot size
with(extremes.df, plot(x,y, type="n", main = "Estimated Mean Y"))
invisible(mapply(function(a,b,c) { abline(a, b, col=c) },
estimates.df$Intercept, beta1,
interceptPalette[estimates.df$percIntercept]))
abline(iIntercept, beta1, lwd = 2, col="gold")
with(extremes.df, plot(x,y, type="n", main = "Estimated Slope"))
invisible(mapply(function(a,b,c) { abline(a, b, col=c) },
expectedMeanY - estimates.df$Slope * meanX, estimates.df$Slope,
interceptPalette[estimates.df$percIntercept]))
abline(expectedMeanY - iSlope * meanX, iSlope,
lwd = 2, col="gold")
with(extremes.df, plot(x,y, type="n", main = "Estimated Intercept"))
invisible(mapply(function(a,b,c) { abline(a, b, col=c) },
estimates.df$Intercept, estimates.df$Slope,
interceptPalette[estimates.df$percIntercept]))
abline(iIntercept, iSlope, lwd = 2, col="gold")
with(estimates.df, hist(MeanY, freq=FALSE, main = "Histogram of Mean Y",
ylim=c(0, 1.3*dnorm(0, mean=0, sd=sdMeanY))))
curve(dnorm(x, mean=expectedMeanY, sd=sdMeanY), lwd=2, add=TRUE)
lines(x=c(iMeanY, iMeanY),
y=c(0, dnorm(iMeanY, mean=expectedMeanY, sd=sdMeanY)),
lwd = 2, col = "gold")
with(estimates.df, hist(Slope, freq=FALSE,
ylim=c(0, 1.3*dnorm(0, mean=0, sd=sdSlope))))
curve(dnorm(x, mean=beta1, sd=sdSlope), lwd=2, add=TRUE)
lines(x=c(iSlope, iSlope), y=c(0, dnorm(iSlope, mean=beta1, sd=sdSlope)),
lwd = 2, col = "gold")
with(estimates.df, hist(Intercept, freq=FALSE,
ylim=c(0, 1.3*dnorm(0, mean=0, sd=sdIntercept))))
curve(dnorm(x, mean=beta0, sd=sdIntercept), lwd=2, add=TRUE)
lines(x=c(iIntercept, iIntercept),
y=c(0, dnorm(iIntercept, mean=beta0, sd=sdIntercept)),
lwd = 2, col = "gold")
with(estimates.df, plot(MeanY, Slope, pch = 16, col = rgb(0,0,0,plotAlpha),
main = "Scatter of Slope vs Mean Y"))
points(x = iMeanY, y = iSlope, pch = 16, col = "gold")
with(estimates.df, plot(Slope, Intercept, pch = 16, col = rgb(0,0,0,plotAlpha),
main = "Scatter of Intercept vs Slope"))
points(x = iSlope, y = iIntercept, pch = 16, col = "gold")
with(estimates.df, plot(Intercept, MeanY, pch = 16, col = rgb(0,0,0,plotAlpha),
main = "Scatter of Mean Y vs Intercept"))
points(x = iIntercept, y = iMeanY, pch = 16, col = "gold")
}}
saveGIF(makeplot(), interval = 4, ani.width = 500, ani.height = 600)
For the plot of correlation versus ratio of x¯ to RMSD:
require(ggplot2)
numberOfPoints <- 200
data.df <- data.frame(
ratio = rep(seq(from=-10, to=10, length=numberOfPoints), times=2),
between = rep(c("Slope", "MeanY"), each=numberOfPoints))
data.df$correlation <- with(data.df, ifelse(between=="Slope",
-ratio/sqrt(1+ratio^2),
1/sqrt(1+ratio^2)))
ggplot(data.df, aes(x=ratio, y=correlation, group=factor(between),
colour=factor(between))) +
theme_bw() +
geom_line(size=1.5) +
scale_colour_brewer(name="Correlation between", palette="Set1",
labels=list(expression(hat(beta[0])*" and "*bar(y)),
expression(hat(beta[0])*" and "*hat(beta[1])))) +
theme(legend.key = element_blank()) +
ggtitle(expression("Correlation of intercept estimates with slope and "*bar(y))) +
xlab(expression("Ratio of "*bar(X)/"RMSD(X)")) +
ylab(expression(paste("Correlation")))