Bạn có thể muốn theo dõi Giới thiệu về Kinh tế lượng của Dougherty , có lẽ xem xét cho đến bây giờ là biến không ngẫu nhiên và xác định độ lệch bình phương trung bình của x là MSD ( x ) = 1xx. Lưu ý rằng MSD được đo bằng bình phương của các đơn vị củax(ví dụ: nếuxlà trongcmthì MSD là trongcm2), trong khi các gốc độ lệch bình phương trung bình,RMSD(x)=√MSD(x)=1n∑ni=1(xi−x¯)2xxcmcm2 là trên quy mô ban đầu. Sản lượng nàyRMSD(x)=MSD(x)−−−−−−−√
Corr(β^OLS0,β^OLS1)=−x¯MSD(x)+x¯2−−−−−−−−−−−√
Điều này sẽ giúp bạn thấy mức độ tương quan bị ảnh hưởng bởi cả giá trị trung bình của (đặc biệt là mối tương quan giữa độ dốc và công cụ ước tính chặn của bạn được loại bỏ nếu biến x được căn giữa) và cả sự lây lan của nó . (Sự phân hủy này cũng có thể đã làm cho sự tiệm cận trở nên rõ ràng hơn!)xx
Tôi sẽ nhắc lại tầm quan trọng của kết quả này: nếu không có nghĩa là 0, chúng ta có thể biến đổi nó bằng cách trừ ˉ x để bây giờ nó được căn giữa. Nếu chúng ta điều chỉnh một đường hồi quy của y trên x - ˉ x độ dốc và các ước tính đánh chặn là không tương quan - thì việc đánh giá thấp hoặc đánh giá quá cao ở một điểm không có xu hướng đánh giá thấp hoặc đánh giá quá cao ở bên kia. Nhưng dòng hồi quy này chỉ đơn giản là bản dịch của dòng hồi quy y trên x ! Sai số chuẩn của các đánh chặn của y trên x - ˉ x dòng chỉ đơn giản là một biện pháp không chắc chắn của yxx¯yx−x¯yxyx−x¯y^khi biến dịch của bạn ; khi dòng đó được dịch trở lại vị trí ban đầu của nó, trở lại trạng này để trở thành sai số chuẩn của y tại x = ˉ x . Tổng quát hơn, sai số chuẩn của y tại bất kỳ x giá trị chỉ là sai số chuẩn của các đánh chặn của hồi quy của y trên một dịch một cách thích hợp x ; sai số chuẩn của y tại x = 0 là tất nhiên sai số chuẩn của các đánh chặn trong bản gốc, hồi quy chưa được dịch.x−x¯=0y^x=x¯y^xyxy^x=0
Vì chúng ta có thể dịch , trong một nghĩa nào đó không có gì là đặc biệt về x = 0 và do đó không có gì đặc biệt về β 0 . Với một chút suy nghĩ, những gì tôi sắp nói công trình cho y ở bất kỳ giá trị của x , đó là hữu ích nếu bạn đang tìm kiếm cái nhìn sâu sắc vào khoảng tin cậy ví dụ cho câu trả lời trung bình từ đường hồi quy của bạn. Tuy nhiên, chúng ta đã thấy rằng có là một cái gì đó đặc biệt về y tại x = ˉ x , vì chính nơi đây mà sai sót trong chiều cao ước tính của đường hồi quy - đó là tất nhiên ước đạtxx=0β^0y^xy^x=x¯ - và các lỗi trong độ dốc ước tính của đường hồi quy không liên quan gì đến nhau. Đánh chặn ước tính của bạn là β 0= ˉ y - β 1 ˉ x và sai sót trong tính toán của nó phải xuất phát từ một trong hai việc ước lượng ˉ y hoặc việc ước lượng β 1(vì chúng ta coixlà không ngẫu nhiên); bây giờ chúng ta biết hai nguồn những lỗi không tương quan rõ ràng đại số lý do tại sao cần có một mối tương quan nghịch giữa độ dốc ước tính và đánh chặn (đánh giá quá cao dốc sẽ có xu hướng đánh chặn đánh giá thấp, chừng nào ˉy¯β^0=y¯−β^1x¯y¯β^1x) nhưng một mối tương quan tích cực giữa đánh chặn ước tính và dự kiến đáp ứng trung bình y = ˉ y tạix= ˉ x . Nhưng có thể thấy những mối quan hệ như vậy mà không có đại số quá.x¯<0y^=y¯x=x¯
Hãy tưởng tượng đường hồi quy ước tính như một thước đo. Người cai trị mà phải đi qua . Chúng ta vừa thấy rằng có hai yếu tố không chắc chắn về cơ bản không liên quan ở vị trí của đường này, mà tôi hình dung về mặt thẩm mỹ là độ không chắc chắn "xoắn" và độ không chắc chắn "trượt song song". Trước khi bạn xoay thước kẻ, giữ nó ở ( ˉ x , ˉ y )(x¯,y¯)(x¯,y¯)như một trục, sau đó cung cấp cho nó một twang thịnh soạn liên quan đến sự không chắc chắn của bạn trong độ dốc. Thước đo sẽ có độ lắc tốt, dữ dội hơn vì vậy nếu bạn không chắc chắn về độ dốc (thực sự, độ dốc dương trước đó sẽ hoàn toàn có thể bị âm nếu độ không chắc chắn của bạn lớn) nhưng lưu ý rằng chiều cao của đường hồi quy tại không thay đổi bởi loại không chắc chắn này, và hiệu ứng của twang đáng chú ý hơn nữa từ ý nghĩa mà bạn nhìn.x=x¯
Để "trượt" thước, giữ chặt nó và di chuyển nó lên và xuống, chú ý giữ cho nó song song với vị trí ban đầu - không thay đổi độ dốc! Làm thế nào mạnh mẽ để dịch chuyển nó lên và xuống tùy thuộc vào mức độ không chắc chắn của bạn về chiều cao của đường hồi quy khi nó đi qua điểm trung bình; hãy nghĩ về lỗi tiêu chuẩn của đánh chặn sẽ là gì nếu đã được dịch sao cho y -axis đi qua điểm trung bình. Ngoài ra, vì chiều cao ước tính của đường hồi quy ở đây chỉ đơn giản là ˉ y , đó cũng là lỗi tiêu chuẩn của ˉ y . Lưu ý rằng loại không chắc chắn "trượt" này ảnh hưởng đến tất cả các điểm trên đường hồi quy theo cách tương đương, không giống như "twang".xyy¯y¯
Hai bất trắc áp dụng một cách độc lập (tốt, uncorrelatedly, nhưng nếu chúng ta giả định sai số phân phối bình thường sau đó họ nên được độc lập về mặt kỹ thuật) để chiều cao y của tất cả các điểm trên đường hồi quy của bạn bị ảnh hưởng bởi một "twanging" không chắc chắn đó là zero tại có nghĩa là và trở nên tồi tệ hơn từ nó, và một sự không chắc chắn "trượt" giống nhau ở mọi nơi. (Bạn có thể thấy mối quan hệ với các khoảng tin cậy hồi quy mà tôi đã hứa trước đó, đặc biệt là độ rộng của chúng hẹp nhất ở ˉ x không?)y^x¯
Điều này bao gồm sự không chắc chắn trong y tại x = 0 , trong đó chủ yếu là những gì chúng tôi có nghĩa là bởi sai số chuẩn trong β 0 . Bây giờ giả sử ˉ x ở bên phải của x = 0 ; sau đó vặn đồ thị lên độ dốc ước tính cao hơn có xu hướng giảm khả năng đánh chặn ước tính của chúng tôi vì một bản phác thảo nhanh sẽ tiết lộ. Đây là mối tương quan nghịch được dự đoán bởi - ˉ xy^x=0β^0x¯x=0 khiˉxdương. Ngược lại, nếuˉxlà bên trái củax=0,bạn sẽ thấy độ dốc ước tính cao hơn có xu hướng tăng đánh chặn ước tính của chúng tôi, phù hợp vớitương quandươngmà phương trình của bạn dự đoán khiˉxâm. Lưu ý rằng nếuˉxlà một khoảng cách dài từ 0, phép ngoại suy của một đường hồi quy của độ dốc không chắc chắn ra về phíay−x¯MSD(x)+x¯2√x¯x¯x=0x¯x¯y-axis ngày càng trở nên bấp bênh (biên độ của "twang" xấu đi khỏi giá trị trung bình). Các lỗi "twanging" trong - hạn sẽ ồ ạt vượt lỗi "trượt" trong ˉ y hạn, vì vậy các lỗi trong β 0 được gần như hoàn toàn xác định bởi bất kỳ lỗi trong β 1 . Như bạn có thể dễ dàng xác minh đại số, nếu chúng ta hãy ˉ x → ± ∞ mà không thay đổi MSD hoặc độ lệch chuẩn của lỗi s u , mối tương quan giữa β 0 và−β^1x¯y¯β^0β^1x¯→±∞suβ^0có xu hướng∓1.β^1∓1
Để minh họa điều này (Bạn có thể muốn nhấp chuột phải vào hình ảnh và lưu nó hoặc xem kích thước đầy đủ trong một tab mới nếu tùy chọn đó có sẵn cho bạn) Tôi đã chọn xem xét các lần lấy mẫu lặp lại của , trong đó u i ∼ N ( 0 , 10 2 ) là iid, trên một tập hợp các giá trị x cố định với ˉ x = 10 , do đó E ( ˉ y ) = 25yi=5+2xi+uiui∼N(0,102)xx¯=10E(y¯)=25. Trong thiết lập này, có một mối tương quan âm khá mạnh giữa độ dốc ước tính và đánh chặn và mối tương quan dương yếu hơn giữa , đáp ứng trung bình ước tính tại x = ˉ x và đánh chặn ước tính. Hoạt hình cho thấy một số mẫu mô phỏng, với đường hồi quy mẫu (vàng) được vẽ trên đường hồi quy thật (màu đen). Các show hàng thứ hai những gì bộ sưu tập của dòng hồi quy ước lượng đã có thể nhìn như thế nào nếu có lỗi duy nhất trong ước tính ˉ y và sườn phù hợp độ dốc đúng ( "trượt" lỗi); sau đó, nếu có lỗi chỉ ở sườn và ˉ yy¯x=x¯y¯y¯phù hợp với giá trị dân số của nó (lỗi "twanging"); và cuối cùng, tập hợp các dòng ước tính thực sự trông như thế nào, khi cả hai nguồn lỗi được kết hợp. Chúng được mã hóa màu bằng kích thước của phần chặn được ước tính thực sự (không phải là phần chặn được hiển thị trên hai biểu đồ đầu tiên trong đó một trong các nguồn lỗi đã được loại bỏ) từ màu xanh lam cho phần chặn thấp thành màu đỏ cho phần chặn cao. Lưu ý rằng từ màu sắc một mình chúng ta có thể thấy rằng mẫu với thấp có xu hướng sản xuất hạ chặn ước tính, cũng như mẫu với độ caoy¯độ dốc ước tính. Hàng tiếp theo hiển thị các phân phối lấy mẫu mô phỏng (biểu đồ) và lý thuyết (đường cong thông thường) của các ước tính và hàng cuối cùng hiển thị các sơ đồ phân tán giữa chúng. Quan sát cách không có mối tương quan giữa và độ dốc ước tính, một mối tương quan nghịch giữa đánh chặn ước tính và độ dốc, và một tương quan tích cực giữa chặn và ˉ y .y¯y¯
MSD đang làm gì trong mẫu số của ? Lan rộng ra phạm vi củaxgiá trị bạn đo trên là nổi tiếng để cho phép bạn để ước lượng độ dốc một cách chính xác hơn, và trực giác là rõ ràng từ một phác thảo, nhưng nó không cho phép bạn ước tínhˉybất kỳ tốt hơn. Tôi đề nghị bạn hình dung việc đưa MSD về gần 0 (tức là các điểm lấy mẫu chỉ rất gần với giá trị trung bình củax), để sự không chắc chắn của bạn trong độ dốc trở nên lớn: nghĩ rằng những khúc ngoặt lớn, nhưng không thay đổi độ không chắc chắn trượt của bạn. Nếuy-axiscủa bạnlà bất kỳ khoảng cách nào từˉx(nói cách khác, nếuˉx≠0- x¯MSD(x)+x¯2√xy¯xyx¯x¯≠0) bạn sẽ thấy rằng sự không chắc chắn trong đánh chặn của bạn trở nên hoàn toàn bị chi phối bởi lỗi xoắn liên quan đến độ dốc. Ngược lại, nếu bạn tăng mức độ lan truyền của các phép đo của mình , mà không thay đổi giá trị trung bình, bạn sẽ cải thiện ồ ạt độ chính xác của ước tính độ dốc của mình và chỉ cần đưa các twang nhẹ nhàng nhất vào đường của bạn. Chiều cao đánh chặn của bạn hiện bị chi phối bởi độ không chắc chắn trượt của bạn, điều này không liên quan gì đến độ dốc ước tính của bạn. Kiểm đếm này với thực tế đại số mà mối tương quan giữa độ dốc ước tính và đánh chặn có xu hướng không như MSD ( x ) → ± ∞ và khi ˉ x ≠ 0 , hướng tới ± 1xMSD(x)→±∞x¯≠0±1(dấu hiệu ngược lại với dấu của ) là MSD ( x ) → 0 .x¯MSD(x)→0
Tương quan độ dốc và ước lượng đánh chặn là một hàm của cả và MSD (hoặc RMSD) của x , vậy làm thế nào để đóng góp tương đối của chúng tăng lên? Trên thực tế, tất cả những gì quan trọng là tỷ lệ ˉ x so với RMSD của x . Một trực giác hình học là RMSD cung cấp cho chúng ta một loại "đơn vị tự nhiên" cho x ; nếu chúng ta rescale các x trục sử dụng w i = x i / RMSD ( x ) thì đây là một căng ngang mà lá đánh chặn ước tính và ˉ y không thay đổi, cho chúng ta một mớix¯xx¯xxxwi=xi/RMSD(x)y¯ và nhân độ dốc ước tính với RMSD của x . Công thức cho mối tương quan giữa độ dốc mới và các công cụ ước tính đánh chặn chỉ dựa trên RMSD ( w ) , là một và ˉ w , là tỷ lệ ˉ xRMSD(w)=1xRMSD(w)w¯ . Do ước tính đánh chặn không thay đổi và ước tính độ dốc chỉ nhân với hằng số dương, nên mối tương quan giữa chúng không thay đổi: do đó, mối tương quan giữađộ dốcban đầuvà đánh chặn cũng chỉ phụ thuộc vào ˉ xx¯RMSD(x) . Theo đại số chúng ta có thể thấy điều này bằng cách chia đỉnh và đáy của- ˉ xx¯RMSD(x) bởiRMSD(x)để có đượcCorr( β 0, β 1)=-( ˉ x /RMSD(x))−x¯MSD(x)+x¯2√RMSD(x) .Corr(β^0,β^1)=−(x¯/RMSD(x))1+(x¯/RMSD(x))2√
Để tìm mối tương quan giữa β 0 và ˉ y , hãy xem xét CoV ( β 0 , ˉ y ) = cov ( ˉ y - β 1 ˉ x , ˉ y ) . Bởi bilinearity của CoV đây là CoV ( ˉ y , ˉ y ) - ˉ x cov ( β 1 , ˉ y )β^0y¯Cov(β^0,y¯)=Cov(y¯−β^1x¯,y¯)CovCov(y¯,y¯)−x¯Cov(β^1,y¯). Nhiệm kỳ đầu tiên là trong khi thuật ngữ thứ hai chúng tôi thiết lập trước đó bằng không. Từ đó chúng tôi suy luậnVar(y¯)=σ2un
Corr(β^0,y¯)=11+(x¯/RMSD(x))2−−−−−−−−−−−−−−−−√
Vì vậy, mối tương quan này cũng chỉ phụ thuộc vào tỷ lệ . Lưu ý rằng các ô vuông củaCorr( β 0, β 1)vàCorr( β 0, ˉ y )cộng lại thành một: chúng tôi hy vọng điều này kể từ khitất cả cácbiến thể lấy mẫu (đối với cố địnhx) trong β 0là do một trong hai thay đổi theo từng trong β 1hoặc sự thay đổi trong ˉ y , và các nguồn dao động được không tương quan với nhau. Dưới đây là một biểu đồ của các mối tương quan so với tỷ lệx¯RMSD(x)Corr(β^0,β^1)Corr(β^0,y¯)xβ^0β^1y¯ .x¯RMSD(x)
Biểu đồ cho thấy rõ ràng khi cao so với RMSD , các lỗi trong ước tính chặn phần lớn là do lỗi trong ước tính độ dốc và hai tương quan chặt chẽ với nhau, trong khi khi ˉ x thấp so với RMSD , đó là lỗi trong ước tính ˉ y chiếm ưu thế, và mối quan hệ giữa đánh chặn và độ dốc yếu hơn. Lưu ý rằng mối tương quan của đánh chặn với độ dốc là một hàm lẻ của tỷ lệ ˉ xx¯x¯y¯ , vì vậy dấu của nó phụ thuộc vào dấu của ˉ x và nó bằng 0 nếu ˉ x =0, trong khi đó mối tương quan của đánh chặn với ˉ y luôn dương và là hàm chẵn của tỷ lệ, nghĩa là không vấn đề về phía nào củay-axis mà ˉ x là. Các mối tương quan đều bình đẳng về độ lớn nếu ˉ x là một RMSD khỏiytrục, khiCorr( β 0, ˉ y )=1x¯RMSD(x)x¯x¯=0y¯yx¯x¯yvàCorr(β0,β1)=±1Corr(β^0,y¯)=12√≈0.707trong đó dấu đối diện vớiˉx. Trong ví dụ trong mô phỏng ở trên,ˉx=10vàRMSD(x)≈5.16nên giá trị trung bình là khoảng1,93RMSD từy-axis; ở tỷ lệ này, mối tương quan giữa đánh chặn và độ dốc mạnh hơn, nhưng tương quan giữa đánh chặn vàˉyvẫn không đáng kể.Corr(β^0,β^1)=±12√≈±0.707x¯x¯=10RMSD(x)≈5.161.93yy¯
Bên cạnh đó, tôi muốn nghĩ về công thức cho lỗi tiêu chuẩn của phần chặn,
s.e.(β^OLS0)=s2u(1n+x¯2nMSD(x))−−−−−−−−−−−−−−−−−√
như , và như trên cho các công thức cho sai số chuẩn của y tạix=x0(sử dụng cho khoảng tin cậy cho các phản ứng trung bình, và trong đó đánh chặn chỉ là một trường hợp đặc biệt như tôi đã giải thích trước đó qua một bản dịch tranh luận),sliding error+twanging error−−−−−−−−−−−−−−−−−−−−−−−√y^x=x0
s.e.(y^)=s2u(1n+(x0−x¯)2nMSD(x))−−−−−−−−−−−−−−−−−√
Mã R cho các ô
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)
Đối với biểu đồ tương quan so với tỷ lệ so với RMSD:x¯
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")))