Digamos que tengo datos que tienen cierta incertidumbre. Por ejemplo:
X Y
1 10±4
2 50±3
3 80±7
4 105±1
5 120±9
La naturaleza de la incertidumbre podría ser repetir mediciones o experimentos, o medir la incertidumbre del instrumento, por ejemplo.
Me gustaría ajustar una curva con R, algo que normalmente haría con lm
. Sin embargo, esto no tiene en cuenta la incertidumbre en los datos cuando me da la incertidumbre en los coeficientes de ajuste y, en consecuencia, los intervalos de predicción. Mirando la documentación, la lm
página tiene esto:
... los pesos se pueden usar para indicar que diferentes observaciones tienen diferentes variaciones ...
Entonces me hace pensar que quizás esto tenga algo que ver con eso. Conozco la teoría de hacerlo manualmente, pero me preguntaba si es posible hacerlo con la lm
función. Si no, ¿hay alguna otra función (o paquete) que sea capaz de hacer esto?
EDITAR
Al ver algunos de los comentarios, aquí hay algunas aclaraciones. Toma este ejemplo:
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)
Me da
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
Básicamente, mis coeficientes son a = 39.8 ± 22.3, b = 92.0 ± 9.3, c = -4.3 ± 0.8. Ahora digamos que para cada punto de datos, el error es 20. Usaré weights = rep(20,10)
en la lm
llamada y en su lugar obtendré esto:
Residual standard error: 84.87 on 7 degrees of freedom
pero los errores estándar en los coeficientes no cambian.
Manualmente, sé cómo hacerlo calculando la matriz de covarianza usando álgebra matricial y colocando los pesos / errores allí, y derivando los intervalos de confianza usando eso. Entonces, ¿hay alguna manera de hacerlo en la función lm misma o en cualquier otra función?
fuente
boot
paquete en R. Luego, puede dejar que una regresión lineal se ejecute sobre el conjunto de datos de inicialización.lm
utilizará las variaciones normalizadas como pesos y luego asumirá que su modelo es estadísticamente válido para estimar la incertidumbre de los parámetros. Si cree que este no es el caso (barras de error demasiado pequeñas o demasiado grandes), no debe confiar en ninguna estimación de incertidumbre.Respuestas:
Este tipo de modelo es en realidad mucho más común en ciertas ramas de la ciencia (por ejemplo, física) e ingeniería que la regresión lineal "normal". Por lo tanto, en herramientas de física como
ROOT
, hacer este tipo de ajuste es trivial, ¡mientras que la regresión lineal no se implementa de forma nativa! Los físicos tienden a llamar a esto solo un "ajuste" o un chi-cuadrado que minimiza el ajuste.lm
lm
lm pesos y el error estándar
Hay un par de posibles soluciones en las respuestas allí. En particular, una respuesta anónima allí sugiere usar
vcov(mod)/summary(mod)$sigma^2
lm
EDITAR
Si está haciendo mucho este tipo de cosas, podría considerar usarlas
ROOT
(lo que parece hacer de forma nativalm
yglm
no). Aquí hay un breve ejemplo de cómo hacer estoROOT
. En primer lugar,ROOT
se puede usar a través de C ++ o Python, y es una gran descarga e instalación. Puede probarlo en el navegador usando un cuaderno de Júpiter, siguiendo el enlace aquí , eligiendo "Binder" a la derecha y "Python" a la izquierda.y se produce una buena trama:
lm
SEGUNDA EDICION
La otra respuesta de la misma pregunta anterior de @Wolfgang ofrece una solución aún mejor: la
rma
herramienta delmetafor
paquete (originalmente interpreté el texto en esa respuesta para significar que no calculó la intercepción, pero ese no es el caso). Tomando las variaciones en las medidas y como simplemente y:Esta es definitivamente la mejor herramienta R pura para este tipo de regresión que he encontrado.
fuente
lm
. Si hace esto, las estadísticas de validación, como el chi-cuadrado, estarán desactivadas. Si la dispersión de sus residuos no coincide con sus barras de error, algo está mal en el modelo estadístico (ya sea la elección del modelo o las barras de error o la hipótesis normal ...). En cualquier caso, las incertidumbres de los parámetros no serán confiables.lm
para obtener la salida correcta. (Si alguien tiene curiosidad, le mostraré cómo hacerloROOT
).