Angenommen, ich habe Daten mit Unsicherheiten. Beispielsweise:
X Y
1 10±4
2 50±3
3 80±7
4 105±1
5 120±9
Die Art der Unsicherheit kann beispielsweise Wiederholungsmessungen oder -experimente oder Messinstrumentenunsicherheit sein.
Ich möchte mit R eine Kurve daran anpassen, was ich normalerweise tun würde lm
. Dies berücksichtigt jedoch nicht die Unsicherheit in den Daten, wenn es mir die Unsicherheit in den Anpassungskoeffizienten und folglich die Vorhersageintervalle gibt. In der Dokumentation finden Sie auf der lm
Seite Folgendes:
... Gewichte können verwendet werden, um anzuzeigen, dass unterschiedliche Beobachtungen unterschiedliche Varianzen aufweisen ...
Ich denke also, dass das vielleicht etwas damit zu tun hat. Ich kenne die Theorie, es manuell zu machen, aber ich habe mich gefragt, ob es möglich ist, dies mit der lm
Funktion zu tun . Wenn nicht, gibt es eine andere Funktion (oder ein anderes Paket), die dazu in der Lage ist?
BEARBEITEN
Nach einigen Kommentaren finden Sie hier einige Erläuterungen. Nehmen Sie dieses Beispiel:
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)
Gibt mir:
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
Grundsätzlich sind meine Koeffizienten a = 39,8 ± 22,3, b = 92,0 ± 9,3, c = -4,3 ± 0,8. Nehmen wir nun an, dass für jeden Datenpunkt der Fehler 20 ist. Ich werde ihn weights = rep(20,10)
im lm
Aufruf verwenden und erhalte stattdessen Folgendes:
Residual standard error: 84.87 on 7 degrees of freedom
Die Standardfehler der Koeffizienten ändern sich jedoch nicht.
Manuell weiß ich, wie man das macht, indem man die Kovarianzmatrix unter Verwendung der Matrixalgebra berechnet und die Gewichte / Fehler dort einfügt und die Konfidenzintervalle daraus ableitet. Gibt es eine Möglichkeit, dies in der lm-Funktion selbst oder in einer anderen Funktion zu tun?
quelle
boot
Paket in R booten. Anschließend können Sie eine lineare Regression über den Bootstrap-Datensatz laufen lassen.lm
verwendet die normalisierten Varianzen als Gewichte und geht dann davon aus, dass Ihr Modell statistisch gültig ist, um die Unsicherheit der Parameter abzuschätzen. Wenn Sie der Meinung sind, dass dies nicht der Fall ist (Fehlerbalken zu klein oder zu groß), sollten Sie keiner Unsicherheitsschätzung vertrauen.Antworten:
Diese Art von Modell ist in bestimmten Bereichen der Wissenschaft (z. B. Physik) und Ingenieurwissenschaften weitaus häufiger als die "normale" lineare Regression. In Physik-Tools wie
ROOT
ist diese Art der Anpassung trivial, während die lineare Regression nicht nativ implementiert ist! Physiker neigen dazu, dies nur als "Anpassung" oder als Chi-Quadrat-Minimierungsanpassung zu bezeichnen.lm
lm
lm Gewichte und der Standardfehler
In den Antworten gibt es einige mögliche Lösungen. Insbesondere schlägt eine anonyme Antwort dort die Verwendung vor
vcov(mod)/summary(mod)$sigma^2
lm
BEARBEITEN
Wenn Sie so etwas häufig tun, sollten Sie es in Betracht ziehen
ROOT
(was dies nativ zu tun scheintlm
undglm
nicht). Hier ist ein kurzes Beispiel dafürROOT
. Zunächst einmalROOT
kann über C ++ oder Python verwendet werden, und es ist ein riesiger Download und Installation. Sie können es im Browser mit einem Jupiter-Notizbuch versuchen, indem Sie dem Link hier folgen und rechts "Binder" und links "Python" auswählen.und eine schöne Handlung wird produziert:
lm
ZWEITE BEARBEITUNG
Die andere Antwort aus derselben vorherigen Frage von @Wolfgang bietet eine noch bessere Lösung: das
rma
Tool aus demmetafor
Paket (ich habe den Text in dieser Antwort ursprünglich so interpretiert, dass er den Achsenabschnitt nicht berechnet hat, aber das ist nicht der Fall). Nehmen Sie die Varianzen in den Messungen y einfach als y:Dies ist definitiv das beste reine R-Tool für diese Art von Regression, die ich gefunden habe.
quelle
lm
. Wenn Sie dies tun, sind Validierungsstatistiken wie das Chi-Quadrat deaktiviert. Wenn die Streuung Ihrer Residuen nicht mit Ihren Fehlerbalken übereinstimmt, stimmt etwas im statistischen Modell nicht (entweder die Modellauswahl oder die Fehlerbalken oder die normale Hypothese ...). In beiden Fällen sind die Parameterunsicherheiten unzuverlässig !!!lm
, um die richtige Ausgabe zu erhalten. (Wenn jemand neugierig ist, zeige ich, wie das gehtROOT
).