R kullanarak verilerin belirsizliği olan doğrusal model


9

Diyelim ki bazı belirsizliklere sahip verilerim var. Örneğin:

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

Belirsizliğin doğası, tekrar ölçümler veya deneyler veya örneğin ölçüm cihazı belirsizliği olabilir.

R'yi kullanarak normalde yapacağım bir eğri koymak istiyorum lm. Bununla birlikte, bu bana uygun katsayılardaki belirsizliği ve sonuç olarak tahmin aralıklarını verdiğinde verilerdeki belirsizliği dikkate almaz. Belgelere bakıldığında, lmsayfada şunlar bulunur:

... farklı gözlemlerin farklı sapmalara sahip olduğunu belirtmek için ağırlıklar kullanılabilir ...

Bu yüzden belki de bunun onunla bir ilgisi olduğunu düşündürüyor. Manuel olarak yapma teorisini biliyorum, ama bunu lmişlevle yapmanın mümkün olup olmadığını merak ediyordum . Değilse, bunu yapabilen başka bir işlev (veya paket) var mı?

DÜZENLE

Bazı yorumları görmek, burada bazı açıklamalar. Bu örneği ele alalım:

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)

Bana verir:

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

Temel olarak, katsayılarım a = 39.8 ± 22.3, b = 92.0 ± 9.3, c = -4.3 ± 0.8'dir. Şimdi her veri noktası için hata 20 olduğunu söyleyelim weights = rep(20,10). lmÇağrıda kullanacağım ve bunun yerine şunu alıyorum:

Residual standard error: 84.87 on 7 degrees of freedom

ancak katsayılardaki std hataları değişmez.

Manuel olarak, bunu matris cebri kullanarak kovaryans matrisini hesaplayarak ve ağırlıkları / hataları oraya koyarak ve bunu kullanarak güven aralıklarını elde ederek nasıl yapacağımı biliyorum. Öyleyse bunu lm işlevinde veya başka bir işlevde yapmanın bir yolu var mı?


Verilerin dağıtımını biliyorsanız, bootR'deki paketi kullanarak önyükleme yapabilirsiniz . Daha sonra önyüklemeli veri kümesi üzerinde doğrusal bir regresyonun çalışmasına izin verebilirsiniz.
Ferdi

lmnormalleştirilmiş varyansları ağırlık olarak kullanır ve ardından modelinizin parametrelerin belirsizliğini tahmin etmek için istatistiksel olarak geçerli olduğunu varsayar. Bunun böyle olmadığını düşünüyorsanız (hata çubukları çok küçük veya çok büyük), herhangi bir belirsizlik tahminine güvenmemelisiniz.
Pascal

Yanıtlar:


14

Bu tür bir model aslında bazı bilim dallarında (örneğin fizik) ve mühendislikte "normal" doğrusal regresyondan çok daha yaygındır. Bu nedenle, fizik araçlarında ROOT, bu tür bir uyum yapmak önemsizdir, lineer regresyon doğal olarak uygulanmaz! Fizikçiler bunu sadece "zinde" veya ki-kare minimize edici zinde olarak adlandırırlar.

Normal doğrusal regresyon modeli, genel bir varyans olduğunu varsayar. σher ölçüme bağlı. Daha sonra olasılığı en üst düzeye çıkarır

LαΠbene-12(yben-(birxben+b)σ)2
veya eşdeğer olarak logaritması
günlük(L)=cÖnstbirnt-12σ2Σben(yben-(birxben+b))2
Bu nedenle, en küçük kareler adı - olasılığı en üst düzeye çıkarmak, karelerin toplamını en aza indirmekle aynıdır ve σyeter ki gibi bir önemsiz sabittir olduğu sabittir. Bilinen farklı belirsizlikleri olan ölçümlerle, maksimize etmek isteyeceksiniz
LαΠe-12(y-(birx+b)σben)2
veya eşdeğer olarak logaritması
günlük(L)=cÖnstbirnt-12Σ(yben-(birxben+b)σben)2
Yani, aslında ölçümleri ters varyansla ağırlıklandırmak istiyorsunuz 1/σben2, varyans değil. Bu mantıklıdır - daha doğru bir ölçüm daha küçük belirsizliğe sahiptir ve daha fazla ağırlık verilmelidir. Bu ağırlık sabitse, yine de toplamın dışında olduğunu unutmayın. Yani, tahmin değerleri etkilemez, ancak gerektiği ikinci türevi alınan standart hataları, etkileyengünlük(L).

Bununla birlikte, burada fizik / bilim ve genel olarak istatistikler arasında bir başka farka geliyoruz. Tipik olarak istatistiklerde, iki değişken arasında bir korelasyon olabileceğini beklersiniz, ancak nadiren kesin olur. Öte yandan fizik ve diğer bilimlerde, sadece sinir bozucu ölçüm hataları için olmasaydı, genellikle bir korelasyon veya ilişkinin kesin olmasını beklersiniz (ör.F=mbir, değil F=mbir+ε). Sorununuz daha çok fizik / mühendislik olayına giriyor gibi görünüyor. Sonuç olarak, lmölçümlerinize ve ağırlıklarınıza bağlı belirsizlikleri yorumlamak istediğinizle tam olarak aynı değildir. Ağırlıkları alacak, ama yine de genel olarak var olduğunu düşünüyorσ2regresyon hatasını hesaba katmak, ki bu istediğiniz şey değil - ölçüm hatalarınızın var olan tek hata olmasını istiyorsunuz. ( lmYorumunun sonucu, yalnızca ağırlıkların göreceli değerlerinin önemli olduğudur, bu nedenle test olarak eklediğiniz sabit ağırlıkların hiçbir etkisi yoktur). Buradaki soru ve cevap daha fazla ayrıntıya sahiptir:

lm ağırlıkları ve standart hata

Oradaki cevaplarda birkaç olası çözüm var. Özellikle, anonim bir cevap,

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

Temel olarak, lmkovaryans matrisini tahminiσve bunu geri almak istiyorsunuz. Daha sonra istediğiniz bilgileri düzeltilmiş kovaryans matrisinden alabilirsiniz. Bunu deneyin, ancak manuel lineer cebir ile yapabiliyorsanız tekrar kontrol etmeye çalışın. Ve ağırlıkların ters varyanslar olması gerektiğini unutmayın.

DÜZENLE

Bu tür bir şeyi çok yapıyorsanız, kullanmayı düşünebilirsiniz ROOT(ki bunu doğal olarak yapıyor lmve glmyapmıyor gibi görünüyor ). İşte bunun nasıl yapılacağına dair kısa bir örnek ROOT. Öncelikle, ROOTC ++ veya Python ile kullanılabilir ve büyük bir indirme ve yükleme. Sen, bir Jüpiter Notebook üzerinden bağlantıyı takip tarayıcıda deneyebilirsiniz burada sağda "Bağlayıcı" seçerek ve soldaki "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()

Belirsizlik olarak kare köklere koydum ydeğerler. Uygun çıktı

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    

ve güzel bir arsa üretilir:

quadfit

KÖK tesisatçısı aynı zamanda xmuhtemelen daha da hacklenmesi gereken değerler lm. Herkes R bunu yapmak için yerel bir yol biliyorsa, ben öğrenmek istiyorum.

İKİNCİ DÜZENLEME

@Wolfgang'ın aynı önceki sorunun diğer cevabı daha da iyi bir çözüm sunuyor: paketteki rmaaraç metafor(Başlangıçta bu cevaptaki metni, kesişimin hesaplanmadığı anlamına geldiği için yorumladım, ancak durum böyle değil). Y ölçümlerindeki varyansların basitçe y olması:

> 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

Bu kesinlikle bulduğum regresyon türü için en iyi saf R aracı.


Ölçeklendirmeyi geri almanın temelde yanlış olduğunu düşünüyorum lm. Bunu yaparsanız, ki kare gibi doğrulama istatistikleri kapalı olur. Kalıntılarınızın dağılımı hata çubuklarınızla eşleşmiyorsa, istatistiksel modelde bir sorun var (model seçimi veya hata çubukları veya normal hipotez ...). Her iki durumda da, parametrelerin belirsizlikleri güvenilir olmayacaktır !!!
Pascal

@PascalPERNOT Ben bu konuda henüz değil; Yorumlarınızı düşüneceğim. Dürüst olmak gerekirse, genel anlamda, en iyi çözümün, lmdoğru çıktıyı elde etmek için kesmek yerine, bu sorunu doğru bir şekilde çözmeyi garanti eden fizik veya mühendislik yazılımlarını kullanmak olduğunu düşünüyorum . (Merak eden biri varsa, bunu nasıl yapacağımı göstereceğim ROOT).
jwimberley

1
İstatistiğin soruna yaklaşımının potansiyel bir avantajı, farklı düzeylerdeki gözlemler arasında varyans tahminlerinin bir araya getirilmesine izin vermesidir. Altta yatan varyans sabitse veya Poisson süreçlerinde olduğu gibi ölçümlerle tanımlanmış bir ilişkisi varsa, analiz her veri noktası için ölçülen varyansın doğru ve dolayısıyla haksız ağırlıklandırması (tipik olarak gerçekçi olmayan) varsayımından elde ettiğinize kıyasla tipik olarak geliştirilecektir. bazı veri noktaları. OP verilerinde, sürekli varyans varsayımının daha iyi olabileceğini tahmin ediyorum.
EdM

1
@jwimberley sanırım σparametreler kovaryans matrisi hesaplanmadan önce Ağırlıklı kalıntılar standart hatasının 1 olarak yeniden ölçeklendirilmesini sağlar. Ağırlıklarınızı çarparak kontrol edebilirimσ2ve "Artıklar standart hatası" çıktısının nasıl etkilendiğine bakın. Örneğinizde, 1.088'den 1'e değişir. Kurulumunuz istatistiksel olarak geçerliyse, ölçeklemenin parametrelerin belirsizlikleri üzerinde sadece küçük bir etkisi vardır ...
Pascal

1
Andreon, S. ve Weaver, B. (2015) Fizik bilimleri için Bayesci yöntemlerin 8. Bölümünde bu konular hakkında iyi bir tartışma vardır. Springer. springer.com/us/book/9783319152868
Tony Ladson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.