Rを使用した、データに不確実性がある線形モデル


9

不確実なデータがあるとしましょう。例えば:

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

不確かさの性質としては、繰り返し測定や実験、測定器の不確かさなどがあります。

Rを使用してカーブをフィットさせたいのですが、通常はで行いlmます。ただし、これは、フィット係数の不確実性、したがって予測区間の不確実性を私に与える場合、データの不確実性を考慮に入れていません。ドキュメントを見ると、lmページにはこれがあります:

...重みは、異なる観測値に異なる分散があることを示すために使用できます...

だから、多分これは何か関係があるのではないかと思います。私はそれを手動で行う理論を知っていますが、lm関数でそれを行うことが可能かどうか疑問に思っていました。そうでない場合、これを実行できる他の関数(またはパッケージ)はありますか?

編集

コメントのいくつかを見て、ここにいくつかの明確化があります。この例を見てみましょう:

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正規化された分散を重みとして使用し、モデルが統計的に有効であると仮定してパラメーターの不確実性を推定します。これが当てはまらない(エラーバーが小さすぎる、または大きすぎる)と思われる場合は、不確実性の見積もりを信頼すべきではありません。
Pascal

ここにも、この質問を参照してください: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/σi2log(L)

F=maF=ma+ϵlmσ2lm

lmの重みと標準誤差

そこに回答で与えられたいくつかの可能な解決策があります。特に、そこでの匿名の回答は、

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

lmσ

編集

あなたがこの種のことをたくさんしているなら、あなたは使用を検討するかもしれませんROOT(これはネイティブでそうしているようで、そうではlmありglmません)。これをで行う方法の簡単な例を次に示しROOTます。まず、ROOTC ++またはPythonを介して使用でき、その巨大なダウンロードとインストールが可能です。Jupiter Notebookを使用してブラウザで試すことができます。ここにあるリンクをたどり、右側で「Binder」、左側で「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    

そして素晴らしいプロットが生成されます:

Quadfit

xlm

二次編集

@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。これを行うと、カイ二乗などの検証統計がオフになります。残差の分散がエラーバーと一致しない場合は、統計モデルに問題があります(モデルの選択、エラーバー、または通常の仮説のいずれか)。どちらの場合でも、パラメーターの不確かさは信頼できなくなります!!!
Pascal

@PascalPERNOT私はこれについてはまだしていません。私はあなたのコメントについて考えます。正直に言うとlm、正しい出力を得るためにハックするのではなく、この問題を正しく解決することが保証されている物理ソフトウェアまたはエンジニアリングソフトウェアを使用することが最善の解決策であると私は考えています。(もし誰かが興味があれば、これを行う方法をで示しますROOT)。
jwimberley 2016

1
問題に対する統計家のアプローチの潜在的な利点の1つは、さまざまなレベルの観測値間の分散推定値をプールできることです。基礎となる分散が一定であるか、ポアソンプロセスのように測定値に対して何らかの定義された関係がある場合、分析は通常、各データポイントの測定された分散が正確であり、したがって不当な重み付けであるという(通常は非現実的な)仮定から得られるものに対して改善されますいくつかのデータポイント。OPのデータでは、一定分散の仮定の方が良いと思います。
EdM 2016

1
σσ2

1
Andreon、S.とWeaver、B.(2015)の物理科学のためのベイズの方法の第8章でこれらの問題の良い議論があります。スプリンガー。springer.com/us/book/9783319152868
Tony Ladson、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.