Лінійна модель, де дані мають невизначеність, використовуючи 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робити цей тип пристосувань, є тривіальним, тоді як лінійна регресія не реалізована спочатку! Фізики, як правило, називають це просто "підходом" або мінімізацією чи-квадратом.

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

L∝∏ie−12(yi−(axi+b)σ)2
або рівнозначно його логарифм
log⁡(L)=constant−12σ2∑i(yi−(axi+b))2
Звідси назва найменших квадратів - максимізація ймовірності така сама, як мінімізація суми квадратів, і σє неважливою константою, доки вона є постійною. З вимірюваннями, які мають різні відомі невизначеності, ви хочете досягти максимуму
L∝∏e−12(y−(ax+b)σi)2
або рівнозначно його логарифму
log⁡(L)=constant−12∑(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.