Кореляція між оцінками OLS для перехоплення та нахилу


25

У простій регресійній моделі

y=β0+β1x+ε,

OLS-оцінки та співвідносяться.ββ^0OLSβ^1OLS

Формула кореляції між двома оцінювачами є (якщо я правильно її вивів):

Corr(β^0OLS,β^1OLS)=i=1nxini=1nxi2.

Запитання:

  1. Яке інтуїтивне пояснення наявності кореляції?
  2. Чи має наявність кореляції важливі наслідки?

Повідомлення було відредаговано, і твердження про те, що кореляція зникає з розміром вибірки, було знято. (Завдяки @whuber та @ChristophHanck.)


7
Формула правильна, але чи можете ви пояснити, яку асимптотику ви використовуєте? Адже в багатьох випадках кореляція не зникає - вона стабілізується. Розглянемо, наприклад , експеримент, в якому xi є двійковими, і припустимо, дані збираються шляхом чергування xi між 1 і 0 . Тоді xi=xi2n/2 і кореляція завжди буде близькою до 2/20 , незалежно від того, наскільки великим стає n .
whuber

1
Я б сказав, що це зникає, лише якщо E(X)=0 : написати
Corr(β^0OLS,β^1OLS)=1Ni=1NxiNi=1Nxi2N2=1Ni=1Nxii=1Nxi2N,
який плис до E(X)/E(X2) .
Крістоф Ганк

Дійсно, я пропустив один коли визначав поведінку кореляції у міру збільшення . Тож Уубер і Крістоф Ганк є правильними. Мені все ж цікаво інтуїтивне пояснення того, чому кореляція в першу чергу є нульовою, і будь-які корисні наслідки . (Я не кажу, що кореляція повинна інтуїтивно дорівнювати нулю, я просто не маю тут ніякої інтуїції.)nn
Річард Харді

3
Ваша формула чітко показує, наприклад, що для середньосереднього регресора кореляція з перехопленням зникає. x
Майкл М

Відповіді:


16

Дозвольте спробувати наступним чином (дійсно не впевнений, чи корисна інтуїція):

Виходячи з мого вище коментаря, кореляція буде приблизно Таким чином, якщо замість , більшість даних буде кластеризовано праворуч від нуля. Таким чином, якщо коефіцієнт нахилу збільшується, формула кореляції стверджує, що перехоплення має стати меншим - що має певний сенс. E(X)>0E(X)=0

E(X)E(X2)
E(X)>0E(X)=0

Я думаю про щось подібне:

У блакитному зразку оцінка нахилу є більш плоскою, а значить, оцінка перехоплення може бути більшою. Нахил золотого зразка дещо більший, тому перехоплення може бути дещо меншим, щоб компенсувати це.

введіть тут опис зображення

З іншого боку, якщо , ми можемо мати будь-який нахил без обмежень на перехоплення.E(X)=0

Знаменник формули також можна інтерпретувати за цими рядками: якщо за заданого середнього значення мінливість, виміряна збільшується, дані розмиваються над -осі, так що вона ефективно "виглядає "більш середній нуль знову, послабивши обмеження на перехопленні для заданих середнього .x XE(X2)xX

Ось код, який, сподіваюся, повністю пояснює фігуру:

n <- 30
x_1 <- sort(runif(n,2,3))
beta <- 2
y_1 <- x_1*beta + rnorm(n) # the golden sample

x_2 <- sort(runif(n,2,3)) 
beta <- 2
y_2 <- x_2*beta + rnorm(n) # the blue sample

xax <- seq(-1,3,by=.001)
plot(x_1,y_1,xlim=c(-1,3),ylim=c(-4,7),pch=19,col="gold",ylab="y",xlab="x")
abline(lm(y_1~x_1),col="gold",lwd=2)
abline(v=0,lty=2)
lines(xax,beta*xax) # the "true" regression line
abline(lm(y_2~x_2),col="lightblue",lwd=2)
points(x_2,y_2,pch=19,col="lightblue")

1
Для практичного наслідку розглянемо розробку та використання калібрувальної кривої для лабораторного приладу. Для розробки калібрування відомі значення випробовуються за допомогою приладу та вимірюються вихідні значення приладу з наступною лінійною регресією. Потім до приладу застосовується невідомий зразок, і нове значення використовується для прогнозування невідомого на основі калібрування лінійної регресії. Аналіз помилок оцінки невідомого включав би кореляцію між оцінками нахилу регресії та перехоплення. y y x xxyyxx
EdM

17

Можливо, ви хочете слідкувати за Введенням Дугерті в економетрії , можливо, враховуючи наразі, що є змінною, і визначаючи середнє квадратичне відхилення від до . Зауважте, що MSD вимірюється у квадраті одиниць (наприклад, якщо знаходиться у тоді MSD знаходиться у ), тоді як середнє кореневе відхилення знаходиться у вихідній шкалі. Це даєx MSD ( x ) = 1xxxxcmcm2RMSD(x)=MSD(x)=1ni=1n(xix¯)2xxcmcm2RMSD(x)=MSD(x)

Corr(β^0OLS,β^1OLS)=x¯MSD(x)+x¯2

Це повинно допомогти вам побачити, як на кореляцію впливає як середнє значення (зокрема, кореляція між вашим оцінкою нахилу та перехопленням видаляється, якщо змінна по центру), а також її поширенням . (Це розкладання також може зробити асимптотики більш очевидними!)хxx

Я ще раз зазначу важливість цього результату: якщо не має середнього нуля, ми можемо перетворити його, віднімаючи так, щоб він був по центру. Якщо ми помістимо лінію регресії на нахили та оцінки перехоплення є некорельованими - недооцінка в одному не має тенденції створювати заниження або завищення в іншому. Але ця лінія регресії - це просто переклад лінії на регресії! Стандартна помилка перехоплення на - це просто міра невизначеності коли ваша перекладена зміннаˉ х у й - ˉ х у й у й - ˉ х у й - ˉ х = 0 у й = ˉ х у й у й у й = 0xx¯yxx¯yxyxx¯y^xx¯=0; коли цей рядок переведений у вихідне положення, це повертається до стандартної помилки у . Більш загально, стандартна помилка при будь-якому значенні є лише стандартною помилкою перехоплення регресії на відповідно переведеному ; стандартна помилка при , звичайно, є стандартною помилкою перехоплення в оригінальній неперекладеній регресії.y^x=x¯y^xyxy^x=0

Оскільки ми можемо перекласти , у певному сенсі немає нічого особливого щодо а отже, нічого особливого щодо . Трохи задумавшись, те, що я збираюся сказати, працює для при будь-якому значенні , що корисно, якщо ви шукаєте розуміння, наприклад, інтервалі довіри для середніх відповідей з вашої лінії регресії. Однак ми бачили, що у на є щось особливе , бо саме тут виникають помилки у розрахунковій висоті лінії регресії - що, звичайно, оцінюється ух = 0 β 0 у й у й = ˉ х ˉ у β 0 = ˉ у - β 1 ˉ х ˉ у β - х ˉ х < 0 у = ˉ у й = ˉ хxx=0β^0y^xy^x=x¯y¯- і помилки в оціненому нахилі лінії регресії не мають нічого спільного. Очікуваний перехоплення - і помилки в його оцінці повинні випливати або з оцінки або з оцінки (оскільки ми вважали як не -стохастичний); тепер ми знаємо, що ці два джерела помилки є некорельованими, але алгебраїчно зрозуміло, чому має бути негативна кореляція між передбачуваним нахилом та перехопленням (завищений нахил, як правило, недооцінює перехоплення, доки ), але позитивна кореляція між оцінними перехоплюють і оцінюють середню відповідь приβ^0=y¯β^1x¯y¯β^1xx¯<0y^=y¯x=x¯. Але можна побачити такі стосунки і без алгебри.

Уявіть оцінену лінію регресії як лінійку. Ця лінійка повинна пройти через . Ми щойно побачили, що в розташуванні цієї лінії є дві, по суті, невизначеності, які я кінестетично візуалізую як невизначеність "смикання" та невизначеність "паралельного ковзання". Перш ніж скрутити лінійку, потримайте її на як шарнір, а потім надайте їй сердечний дзвінок, пов’язаний із вашою невизначеністю у схилі. Лінійка буде мати гарне коливання, більш бурхливо, тому, якщо ви дуже невпевнені в нахилі (дійсно, попередній позитивний нахил цілком може бути негативним, якщо ваша невизначеність велика), але зауважте, що висота лінії регресії при( ˉ x , ˉ y ) x = ˉ x(x¯,y¯)(x¯,y¯)x=x¯не змінюється такий вид невизначеності, і ефект дрогання помітніше, чим далі від середнього вигляду, який ви шукаєте.

Щоб "ковзати" лінійку, міцно стискайте її і зміщуючи її вгору-вниз, дбаючи про те, щоб вона була паралельною початковому положенню - не змінюйте нахил! Наскільки енергійно зміщувати її вгору і вниз залежить від того, наскільки ви невпевнені у висоті лінії регресії, коли вона проходить через середню точку; подумайте, якою була б стандартна помилка перехоплення, якби було переведено так, щоб -ось проходила через середню точку. Крім того, оскільки розрахункова висота лінії регресії тут просто , це також є стандартною помилкою . Зауважимо, що така «невимушена» невизначеність впливає на всі точки регресійної лінії рівним чином, на відміну від «дрангування».y ˉ y ˉ yxyy¯y¯

Ці дві невизначеності застосовуються незалежно (добре, некорельовано, але якщо припустити нормально розподілені умови помилки, то вони повинні бути технічно незалежними), тому на висоту усіх точок на вашій лінії регресії впливає невизначеність "смикання", яка дорівнює нулю при середнє значення і стає гірше від нього, і "ковзаюча" невизначеність, яка однакова скрізь. (Чи можете ви бачити взаємозв'язок з інтервалами довіри регресії, які я обіцяв раніше, особливо, наскільки їх ширина є найменшою на ?) ˉ хy^x¯

Сюди входить невизначеність у при , що по суті означає те, що ми маємо на увазі під стандартною помилкою в . Тепер припустимо, що знаходиться праворуч від ; то скручування графіка до більш високого оціночного схилу має тенденцію зменшити наш передбачуваний перехоплення, оскільки швидкий ескіз виявить. Це негативна кореляція, передбачувана коли додатний. І навпаки, якщо зліва від ви побачите, що більш високий оцінений нахил, як правило, збільшує наш передбачуваний перехоплення, що відповідає позитивному ї=0 β - ˉ х х=0- ˉ хy^x=0β^0x¯x=0 ˉхˉхх=0ˉхˉху-β1ˉхˉуβ0β1ˉхplusmnзUβ0β11x¯MSD(x)+x¯2x¯x¯x=0співвідношення ваше рівняння прогнозує, коли від'ємний. Зауважимо, що якщо знаходиться на великій відстані від нуля, екстраполяція регресійної лінії невизначеного градієнта назустріч осі стає все більш нестабільною (амплітуда "дрянки" погіршується від середнього). Помилка "twanging" у терміні значно переважає помилку "ковзання" терміні , тому помилка майже повністю визначається будь-якою помилкою в . Як ви можете легко перевірити алгебраїчно, якщо ми візьмемо без зміни MSD або стандартного відхилення помилокx¯x¯yβ^1x¯y¯β^0β^1x¯±su , кореляція між та має тенденцію до .β^0β^11

Модельовані схили та перехоплення

Щоб проілюструвати це (Ви можете скористатися правою кнопкою миші на зображенні та зберегти його або переглянути його в повному розмірі на новій вкладці, якщо така опція доступна для вас) Я вирішив розглянути повторні вибірки , де - iid, над фіксованим набором значень з , тому . У цій налаштуваннях існує досить сильна негативна кореляція між передбачуваним нахилом та перехопленням і слабша позитивна кореляція між , оціненою середньою реакцією приu iN ( 0 , 10 2 ) x ˉ x = 10 E ( ˉ y ) = 25 ˉ y x = ˉ x ˉ y ˉ y ˉ y ˉ y ˉ yyi=5+2xi+uiuiN(0,102)xx¯=10E(y¯)=25y¯x=x¯, і підрахунок перехоплення. В анімації показано кілька модельованих зразків, із зразком (золотою) регресійною лінією, проведеною через справжню (чорну) лінію регресії. Другий рядок показує, як виглядав би збірник оціночних регресійних ліній, якби помилка була лише в оціненому а схили відповідали справжньому схилу ("помилка ковзання"); тоді, якщо помилка була лише на схилах і відповідала її популяційному значенню (помилка "twanging"); і нарешті, як насправді виглядала колекція оціночних ліній, коли обидва джерела помилок поєднувалися. Вони були кольоровими за розміром фактично оціненого перехопленняy¯y¯(не перехоплення, показані на перших двох графіках, де одне з джерел помилок було усунено) від синього для низьких перехоплювачів до червоного для високих перехоплення. Зауважимо, що лише з кольорів ми бачимо, що зразки з низьким значенням мали тенденцію створювати менші оцінені перехоплення, як і зразки з високими оцінними нахилами. У наступному рядку показано модельоване (гістограма) та теоретичне (нормальна крива) вибіркове розподіл оцінок, а в останньому рядку показано діаграми розсіювання між ними. Поспостерігайте, як немає кореляції між та передбачуваним нахилом, негативна кореляція між передбачуваним перехопленням та нахилом та позитивна кореляція між перехопленням та .y¯y¯y¯

Що MSD робить у знаменнику ? Розширення діапазону значень ви вимірюєте, добре відоме, що дозволяє точніше оцінювати нахил, і інтуїція зрозуміла з ескізу, але це не дозволяє краще оцінити . Я пропоную вам візуалізувати підведення MSD до майже нуля (тобто точки відбору проб лише дуже близько середнього значення ), щоб ваша невпевненість у схилі стала величезною: подумайте про великі гірки, але без зміни вашої невизначеності ковзання. Якщо ваш -ось - це будь-яка відстань від (іншими словами, якщо xˉyxyˉxˉx0xMSD(x)±ˉx0±1ˉxMSD(x)0x¯MSD(x)+x¯2xy¯xyx¯x¯0) ви побачите, що невизначеність у вашому перехопленні стає надзвичайно домінуючою помилкою похитування, пов'язаної зі схилом. На противагу цьому, якщо ви збільшите розкид ваших вимірювань , не змінюючи середнього значення, ви значно підвищите точність вашої оцінки схилу і вам потрібно буде взяти до своєї лінії лише найменші батоги. Зараз висота вашого перехоплення переважає ваша невизначеність ковзання, яка не має нічого спільного з вашим прогнозованим нахилом. Це співпадає з алгебраїчним фактом, що кореляція між передбачуваним нахилом та перехопленням має тенденцію до нуля як а, коли , до (знак протилежний знак ) якxMSD(x)±x¯0±1x¯MSD(x)0.

Кореляція оцінок нахилу та перехрестя була функцією як і MSD (або RMSD) , так як збільшується їх відносний внесок? Власне, все, що має значення, - це відношення до RMSD . Геометрична інтуїція полягає в тому, що RMSD дає нам своєрідну "природну одиницю" для ; якщо ми змінимо масштаб використовуючи то це горизонтальна розтяжка, яка залишає передбачуваний перехоплення та незмінним, дає нам новий і множить оцінене нахил за RMSD х ˉ х хххшя=хя/RMSD(х) ° у СКО(ш)=1хСКО(ш) ˉ ш ˉ хx¯xx¯xxxwi=xi/RMSD(x)y¯RMSD(w)=1x. Формула кореляції між новими оцінювачами нахилу та перехоплення складається лише з , що є одним, і , що є відношенням . Оскільки оцінка перехоплення була незмінною, а оцінка нахилу просто помножена на позитивну константу, то кореляція між ними не змінилася: отже, кореляція між початковим нахилом та перехопленням також повинна залежати лише від . Алгебраїчно ми можемо бачити це, розділивши верхню і нижню частину на для отриманняRMSD(w)w¯ˉ xx¯RMSD(x) - ˉ xx¯RMSD(x) СКО(х)Кор( β 0, β 1)=-( ˉ х /СКО(х))x¯MSD(x)+x¯2RMSD(x)Corr(β^0,β^1)=(x¯/RMSD(x))1+(x¯/RMSD(x))2 .

Щоб знайти кореляцію між та , розгляньте . За білінарності це . Перший член - тоді як другий член, який ми встановили раніше, дорівнював нулю. З цього ми виводимо ˉ у Cov( ββ^0y¯Cov Cov ( ˉ у , ˉ у ) - ˉ х COV ( β 1 , ˉ у ) Var ( ˉ y ) = σ 2 uCov(β^0,y¯)=Cov(y¯β^1x¯,y¯)CovCov(y¯,y¯)x¯Cov(β^1,y¯)Var(y¯)=σu2n

Corr(β^0,y¯)=11+(x¯/RMSD(x))2

Тож ця кореляція також залежить лише від співвідношення . Зауважте, що квадрати та дорівнюють одному: ми очікуємо цього, оскільки всі варіації вибірки (для фіксованого ) у пояснюється або варіацією або варіацією , і ці джерела варіації є непов'язаними між собою. Ось графік співвідношень відношення . Кор( β 0, & beta ; 1)Corr( β 0, ˉ у )х β 0 β 1 ˉ у ˉ хx¯RMSD(x)Corr(β^0,β^1)Corr(β^0,y¯)xβ^0β^1y¯x¯RMSD(x)

Кореляція перехоплення та нахилу, перехоплення та середнього значення y, відношення середнього х до RMSD

На графіку чітко видно, що коли високий відносно RMSD , помилки в оцінці перехоплення значною мірою пов'язані з помилками в оцінці нахилу, і дві тісно взаємозв’язані, тоді як коли низький щодо RMSD , це - це похибка в оцінці що переважає, і зв'язок між перехопленням і нахилом слабший. Зауважте, що кореляція перехоплення зі схилом є непарною функцією відношення , тому його знак залежить від знаку і дорівнює нулю, якщо , тоді як кореляція перехоплення зˉ x ˉ y ˉ xx¯x¯y¯ˉ х ˉ х =0 ˉ у у ˉ х ˉ х уКор( β 0, ˉ у )=1x¯RMSD(x)x¯x¯=0y¯завжди позитивний і є рівномірною функцією співвідношення, тобто не має значення, яка сторона -осі, що . Кореляції рівні за величиною, якщо - одна RMSD від осі, коли і де знак протилежний знаку . У наведеному вище прикладі моделювання та тому середнє значення становило приблизно RMSD зyx¯x¯yКор(β0,β1)=±1Corr(β^0,y¯)=120.707ˉхˉх=10СКО(х)5,161,93гˉуCorr(β^0,β^1)=±12±0.707x¯x¯=10RMSD(x)5.161.93y-ось; при цьому співвідношенні кореляція між перехопленням і нахилом є сильнішою, але кореляція між перехопленням і все ще не є незначною.y¯

Як осторонь, мені подобається думати про формулу стандартної помилки перехоплення,

s.e.(β^0OLS)=su2(1n+x¯2nMSD(x))

як , і точково для формули стандартної помилки при (використовується для довірчих інтервалів для середньої відповіді, і з яких перехоплення - це лише особливий випадок, як я пояснював раніше через аргумент перекладу),у й=х0sliding error+twanging errory^x=x0

s.e.(y^)=su2(1n+(x0x¯)2nMSD(x))

R код сюжетів

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)

Для графіку співвідношення співвідношення до 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")))

1
"Блискавка" та "слайд" - це мої терміни. Це моя власна візуальна інтуїція, і не така, яку я ніколи не бачив у жодному підручнику, хоча основні ідеї тут - це стандартний матеріал. Доброта знає, чи є більш технічна назва, ніж "twang" та "slide"! Цю відповідь я ґрунтував із пам’яті на відповіді на відповідне запитання, яке я ніколи не обходив до кінця та публікації. Це мали більш повчальні графіки, які (якщо я можу відстежити R-код на своєму старому комп’ютері або знайти час для відтворення) я додам.
Срібна рибка

1
Яка робота! Велике спасибі! Тепер моє розуміння має бути в набагато кращій формі.
Річард Харді

@RichardHardy Я помістив імітаційну анімацію, яка повинна зробити речі яснішими.
Срібна рибка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.