Лінійна модель, де дані мають невизначеність, використовуючи R


9

Скажімо, у мене є дані, які мають певну невизначеність. Наприклад:

X  Y
1  10±4
2  50±3
3  80±7
4  105±1
5  120±9

Характер невизначеності може бути, наприклад, повторними вимірюваннями або експериментами, або невизначеністю вимірювального приладу, наприклад.

Я хотів би прилаштувати криву до неї, використовуючи R, те, що зазвичай я б робив lm. Однак це не враховує невизначеність даних, коли це дає мені невизначеність коефіцієнтів придатності, а отже, і інтервали прогнозування. Дивлячись на документацію, на lmсторінці є таке:

... ваги можуть бути використані для вказівки на те, що різні спостереження мають різні відхилення ...

Тож змушує мене думати, що, можливо, це має щось спільне з цим. Я знаю теорію робити це вручну, але мені було цікаво, чи можливо це зробити з lmфункцією. Якщо ні, чи є якась інша функція (або пакет), здатна це робити?

EDIT

Побачивши деякі коментарі, ось деяке уточнення. Візьмемо цей приклад:

x <- 1:10
y <- c(131.4,227.1,245,331.2,386.9,464.9,476.3,512.2,510.8,532.9)
mod <- lm(y ~ x + I(x^2))
summary(mod)

Дає мені:

Residuals:
    Min      1Q  Median      3Q     Max 
-32.536  -8.022   0.087   7.666  26.358 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  39.8050    22.3210   1.783  0.11773    
x            92.0311     9.3222   9.872 2.33e-05 ***
I(x^2)       -4.2625     0.8259  -5.161  0.00131 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 18.98 on 7 degrees of freedom
Multiple R-squared:  0.986, Adjusted R-squared:  0.982 
F-statistic: 246.7 on 2 and 7 DF,  p-value: 3.237e-07

Отже, в основному, мої коефіцієнти a = 39,8 ± 22,3, b = 92,0 ± 9,3, c = -4,3 ± 0,8. Тепер скажемо, що для кожної точки даних помилка дорівнює 20. Я буду використовуватись weights = rep(20,10)у lmвиклику, і отримаю це замість цього:

Residual standard error: 84.87 on 7 degrees of freedom

але помилки std на коефіцієнтах не змінюються.

Вручну я знаю, як це зробити з обчисленням матриці коваріації за допомогою матричної алгебри та введенням там ваг / помилок та виведенням довірчих інтервалів за допомогою цього. Так чи є спосіб зробити це в самій функції lm чи в будь-якій іншій функції?


Якщо ви знаєте розподіл даних, ви можете завантажувати їх за допомогою bootпакету в R. Після цього ви можете дозволити лінійній регресії пробігати на завантаженому наборі даних.
Ферді

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

Дивіться також це питання тут: stats.stackexchange.com/questions/113987/…
jwimberley

Відповіді:


14

Цей тип моделі насправді набагато частіше зустрічається в певних галузях науки (наприклад, фізики) та техніки, ніж "нормальна" лінійна регресія. Так, у таких інструментах фізики, як ROOTробити цей тип пристосувань, є тривіальним, тоді як лінійна регресія не реалізована спочатку! Фізики, як правило, називають це просто "підходом" або мінімізацією чи-квадратом.

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

Lie12(yi(axi+b)σ)2
або рівнозначно його логарифм
log(L)=constant12σ2i(yi(axi+b))2
Звідси назва найменших квадратів - максимізація ймовірності така сама, як мінімізація суми квадратів, і σє неважливою константою, доки вона є постійною. З вимірюваннями, які мають різні відомі невизначеності, ви хочете досягти максимуму
Le12(y(ax+b)σi)2
або рівнозначно його логарифму
log(L)=constant12(yi(axi+b)σi)2
Отже, ви насправді хочете зважити вимірювання за зворотною дисперсією 1/σi2, а не дисперсія. Це має сенс - більш точне вимірювання має меншу невизначеність і йому слід надати більше ваги. Зауважте, що якщо ця вага є постійною, вона все-таки виходить із суми. Отже, це не впливає на оцінені значення, але воно повинно впливати на стандартні помилки, взяті з другої похідноїlog(L).

Однак тут ми стикаємося з іншою різницею між фізикою / наукою та загалом статистикою. Зазвичай у статистиці ви очікуєте, що може існувати кореляція між двома змінними, але рідко це буде точно. У фізиці та інших науках, з іншого боку, ви часто очікуєте, що кореляція або співвідношення будуть точними, якби тільки не було прихованих помилок вимірювання (наприклад,F=ma, не F=ma+ϵ). Здається, ваша проблема більше впадає у справу фізики / техніки. Отже, lmтлумачення невизначеностей, пов'язаних з вашими вимірюваннями та вагами, не зовсім те, що ви хочете. Це займе ваги, але він все ще вважає, що є загальнийσ2враховувати помилку регресії, яка не є тим, що ви хочете - ви хочете, щоб ваші помилки вимірювання були єдиним видом помилок. (Кінцевим результатом lmінтерпретації російської мови є те, що мають значення лише відносні значення ваг, саме тому постійні ваги, які ви додали як тест, не мали впливу). Питання та відповіді тут мають більше деталей:

lm ваги і стандартна помилка

Є кілька можливих рішень, наведених у відповідях. Зокрема, анонімну відповідь там пропонують використовувати

vcov(mod)/summary(mod)$sigma^2

В основному, lmмасштабує матрицю коваріації на основі її оціночноїσ, і ви хочете скасувати це. Потім ви можете отримати потрібну інформацію з виправленої матриці коваріації. Спробуйте це, але спробуйте двічі перевірити, чи можете ви використовувати ручну лінійну алгебру. І пам’ятайте, що ваги повинні мати зворотні відхилення.

EDIT

Якщо ви робите такого роду речі багато ви могли б розглянути питання про використання ROOT(який , здається, робить це з самого початку в той час як lmі glmне чинить). Ось короткий приклад того, як це зробити в ROOT. По-перше, ROOTйого можна використовувати через C ++ або Python, і це величезна завантаження та встановлення. Ви можете спробувати його в браузері за допомогою ноутбука Юпітера, перейшовши за посиланням тут , вибравши "Біндер" праворуч і "Пітон" зліва.

import ROOT
from array import array
import math
x = range(1,11)
xerrs = [0]*10
y = [131.4,227.1,245,331.2,386.9,464.9,476.3,512.2,510.8,532.9]
yerrs = [math.sqrt(i) for i in y]
graph = ROOT.TGraphErrors(len(x),array('d',x),array('d',y),array('d',xerrs),array('d',yerrs))
graph.Fit("pol2","S")
c = ROOT.TCanvas("test","test",800,600)
graph.Draw("AP")
c.Draw()

Я поставив квадратні корені як невизначеність yзначення. Вихід підгонки є

Welcome to JupyROOT 6.07/03

****************************************
Minimizer is Linear
Chi2                      =       8.2817
NDf                       =            7
p0                        =      46.6629   +/-   16.0838     
p1                        =       88.194   +/-   8.09565     
p2                        =     -3.91398   +/-   0.78028    

і виходить чудовий сюжет:

квадфіт

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

ДРУГА РЕДАКТА

Інша відповідь з того ж попереднього запитання від @Wolfgang дає ще краще рішення: rmaінструмент із metaforпакета (я спочатку інтерпретував текст у цій відповіді, що означає, що він не обчислював перехоплення, але це не так). Вважаючи відхилення в вимірюваннях y просто простими y:

> rma(y~x+I(x^2),y,method="FE")

Fixed-Effects with Moderators Model (k = 10)

Test for Residual Heterogeneity: 
QE(df = 7) = 8.2817, p-val = 0.3084

Test of Moderators (coefficient(s) 2,3): 
QM(df = 2) = 659.4641, p-val < .0001

Model Results:

         estimate       se     zval    pval    ci.lb     ci.ub     
intrcpt   46.6629  16.0838   2.9012  0.0037  15.1393   78.1866   **
x         88.1940   8.0956  10.8940  <.0001  72.3268  104.0612  ***
I(x^2)    -3.9140   0.7803  -5.0161  <.0001  -5.4433   -2.3847  ***

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Це, безумовно, найкращий чистий інструмент R для такого типу регресії, який я знайшов.


Я думаю, що в основному неправильним є скасування масштабування lm. Якщо ви це зробите, статистика перевірки, наприклад, чі-квадрат, буде вимкнена. Якщо дисперсія ваших залишків не відповідає вашим смугам помилок, у статистичній моделі щось не так (або вибір моделі, або смуги помилок, або звичайна гіпотеза ...). У будь-якому випадку невизначеність параметрів буде ненадійною !!!
Паскаль

@PascalPERNOT Я не хотів про це; Я подумаю над вашими коментарями. Якщо чесно, то я погоджуюся в загальному сенсі в тому, що я вважаю, що найкращим рішенням є використання фізичного чи інженерного програмного забезпечення, яке гарантовано правильно вирішує цю проблему, а не злом lmдля отримання правильного результату. (Якщо комусь цікаво, я покажу, як це зробити в ROOT).
jwimberley

1
Однією з потенційних переваг підходу статистики до проблеми є те, що він дозволяє об'єднати оцінки дисперсії серед спостережень на різних рівнях. Якщо основна дисперсія є постійною або має певне відношення до вимірювань, як у процесах Пуассона, то аналіз, як правило, буде покращений порівняно з тим, що ви отримуєте з (як правило, нереалістичного) припущення, що виміряна дисперсія для кожної точки даних є правильною і, таким чином, несправедливо зважує деякі точки даних. За даними ОП, я здогадуюсь, що припущення про постійну дисперсію може бути кращим.
EdM

1
@jwimberley Я припускаю, що σзабезпечує обчислення стандартної помилки зважених залишків до 1 перед обчисленням матриці коваріації параметрів. Ви можете перевірити це, помноживши ваги наσ2і подивіться, як впливає на вихід "Залишкова стандартна помилка". У вашому прикладі вона змінюється від 1,088 до 1. Якщо ваша установка є статистично достовірною, масштабування має лише незначний вплив на невизначеність параметрів ...
Паскаль,

1
Ці питання добре обговорюються в главі 8 Andreon, S. and Weaver, B. (2015) Байєсові методи фізичних наук. Спрингер. springer.com/us/book/9783319152868
Тоні Лідсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.