Disons que j'ai des données qui ont une certaine incertitude. Par exemple:
X Y
1 10±4
2 50±3
3 80±7
4 105±1
5 120±9
La nature de l'incertitude pourrait être des mesures ou des expériences répétées, ou la mesure de l'incertitude des instruments par exemple.
Je voudrais lui adapter une courbe en utilisant R, quelque chose que je ferais normalement avec lm
. Cependant, cela ne prend pas en compte l'incertitude dans les données lorsqu'elle me donne l'incertitude sur les coefficients d'ajustement, et par conséquent les intervalles de prédiction. En regardant la documentation, la lm
page a ceci:
... les poids peuvent être utilisés pour indiquer que différentes observations ont des variances différentes ...
Cela me fait donc penser que cela a peut-être quelque chose à voir avec cela. Je connais la théorie de le faire manuellement, mais je me demandais s'il était possible de le faire avec la lm
fonction. Sinon, existe-t-il une autre fonction (ou package) capable de le faire?
ÉDITER
En voyant certains des commentaires, voici quelques éclaircissements. Prenez cet exemple:
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)
Donne moi:
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
Donc, fondamentalement, mes coefficients sont a = 39,8 ± 22,3, b = 92,0 ± 9,3, c = -4,3 ± 0,8. Disons maintenant que pour chaque point de données, l'erreur est de 20. J'utiliserai weights = rep(20,10)
dans l' lm
appel et j'obtiens ceci à la place:
Residual standard error: 84.87 on 7 degrees of freedom
mais les erreurs std sur les coefficients ne changent pas.
Manuellement, je sais comment le faire en calculant la matrice de covariance en utilisant l'algèbre matricielle et en y mettant les poids / erreurs, et en dérivant les intervalles de confiance en utilisant cela. Existe-t-il un moyen de le faire dans la fonction lm elle-même, ou dans toute autre fonction?
la source
boot
package dans R. Ensuite, vous pouvez laisser une régression linéaire s'exécuter sur l'ensemble de données amorcé.lm
utilisera les variances normalisées comme poids, puis supposera que votre modèle est statistiquement valide pour estimer l'incertitude des paramètres. Si vous pensez que ce n'est pas le cas (barres d'erreur trop petites ou trop grandes), vous ne devriez pas faire confiance à une estimation d'incertitude.Réponses:
Ce type de modèle est en réalité beaucoup plus courant dans certaines branches de la science (par exemple la physique) et de l'ingénierie que la régression linéaire "normale". Donc, dans les outils de physique comme
ROOT
, faire ce type d'ajustement est trivial, tandis que la régression linéaire n'est pas implémentée en mode natif! Les physiciens ont tendance à appeler cela juste un "ajustement" ou un ajustement minimisant le chi carré.lm
lm
poids lm et l'erreur standard
Il y a quelques solutions possibles données dans les réponses. En particulier, une réponse anonyme suggère d'utiliser
vcov(mod)/summary(mod)$sigma^2
lm
ÉDITER
Si vous faites beaucoup de choses de ce genre, vous pourriez envisager d'utiliser
ROOT
(ce qui semble le faire nativement pendantlm
etglm
non). Voici un bref exemple de la façon de procéder dansROOT
. Tout d'abord,ROOT
peut être utilisé via C ++ ou Python, et c'est un énorme téléchargement et installation. Vous pouvez l'essayer dans le navigateur à l'aide d'un bloc-notes Jupiter, en suivant le lien ici , en choisissant "Binder" à droite et "Python" à gauche.et une belle intrigue est produite:
lm
DEUXIÈME ÉDITION
L'autre réponse de la même question précédente de @Wolfgang donne une solution encore meilleure: l'
rma
outil dumetafor
package (j'ai à l'origine interprété le texte dans cette réponse pour signifier qu'il n'a pas calculé l'interception, mais ce n'est pas le cas). Prendre les variances dans les mesures y pour être simplement y:C'est certainement le meilleur outil R pur pour ce type de régression que j'ai trouvé.
la source
lm
. Si vous faites cela, les statistiques de validation, telles que le chi carré, seront désactivées. Si la dispersion de vos résidus ne correspond pas à vos barres d'erreur, quelque chose ne va pas dans le modèle statistique (que ce soit le choix du modèle ou les barres d'erreur ou l'hypothèse normale ...). Dans les deux cas, les incertitudes des paramètres ne seront pas fiables !!!lm
pour obtenir la sortie correcte. (Si quelqu'un est curieux, je vais vous montrer comment faire celaROOT
).