Quelles sont les valeurs prédites retournées par la fonction Predict () dans R lors de l'utilisation de données d'origine en entrée?

11

Après avoir exécuté une régression du formulaire reg <- lm(y ~ x1 + x2, data=example)sur un ensemble de données, je peux obtenir des valeurs prédites en utilisant

predict(reg, example, interval="prediction", level=0.95)

Je me demande à quoi les valeurs prédites se réfèrent réellement lorsque j'utilise la régression pour prédire l'ensemble de données réel. Ne devrais-je pas obtenir les valeurs d'origine?

au dessus
la source

Réponses:

18

Le modèle avec lequel vous travaillez prend la forme

yi=μ+β1x1i+β2x2i+ϵi (1)

où est un terme d'erreur supposé provenir d'une distribution normale moyenne nulle.ϵi

Vous avez ajusté le modèle et vous avez obtenu des estimations: , et . β 1 β 2μ^β^1β^2

Maintenant, si vous fixez des valeurs de covariables dans leur plage, disons et , une valeur prédite pour peut être obtenue en calculant x 2 i y ix1ix2iyi

yi=μ^+β^1x1i+β^2x2i (2)

Si votre modèle correspond parfaitement à vos données, les valeurs prédites sont des valeurs réelles. Mais, en général, les valeurs ne peuvent pas être obtenues exactement comme une simple combinaison linéaire de valeurs (" Tous les modèles sont faux, mais certains sont utiles "). En d'autres termes, la variance du terme d'erreur dans (1) n'est pas nulle en général. Mais, fondamentalement, le modèle (1) est une bonne approximation si les résidus (ou une version mise à l'échelle de ceux-ci) sont "petits".x y i - y iyxyiyi

Éditer

Dans vos commentaires, vous avez demandé ce qui predict()se passe réellement. Voici un exemple illustratif simple.

    #generate a simple illustrative data set
> x <- runif(10)
> y <- 5 + 2.7 * x + rnorm(10, mean=0, sd=sqrt(0.15))
> 
>   #fit the model and store the coefficients
> regLin <- lm(y~x)
> coef <- coef(regLin)
> 
>   #use the predict() function
> y_star2 <- predict(regLin)
>   #use equation (2)
> y_star1 <- coef[1] + coef[2] * x
>   #compare
> cbind(y, y_star1, y_star2) 
          y  y_star1  y_star2
1  7.100217 6.813616 6.813616
2  6.186333 5.785473 5.785473
3  7.141016 7.492979 7.492979
4  5.121265 5.282990 5.282990
5  4.681924 4.849776 4.849776
6  6.102339 6.106751 6.106751
7  7.223215 7.156512 7.156512
8  5.158546 5.253380 5.253380
9  7.160201 7.198074 7.198074
10 5.555289 5.490793 5.490793
ocram
la source
1
(1) Notez que le modèle (1) comme il est écrit que suppose x1et x2sont des prédicteurs continus, pas ceux catégoriques. (Pourquoi ne pas désigner l'interception par ?)β0
chl
@ocram alors que fait exactement la fonction de prédiction lorsque j'utilise le même ensemble de données et l'équation de régression correspondante?
dessus du
@chl, cela signifie-t-il que la prévision ne devrait pas être sur un modèle glm (ou glm.nb) avec des prédicteurs catégoriques? Par exemple: dat <- data.frame (y = as.numeric (c (10,15,12,1,0,2,180,200,188,181,300,288)), p = as.factor (c (rep ("yes", 6), rep ("no", 6))), t = as.factor (c (rep ("tp1", 3), rep ("tp2", 3), rep ("tp1", 3), rep ("tp2" , 3)))) require (MASS) nb_fit <- glm.nb (y ~ p * t, data = dat) pre_fit <- predict (nb_fit, type = "response")
Arun
@chl: Vous avez raison: mon ne doit pas être confondu avec la moyenne d'une distribution normale. est certainement une meilleure notation. β 0μβ0
ocram
1
@Arun Non, c'est le type de variable de réponse qui guide le choix du modèle, pas (nécessairement) l'échelle de mesure des prédicteurs. Avec un résultat binaire, vous pouvez utiliser une régression logistique (un GLM parmi d'autres), quels que soient les prédicteurs. Je voulais juste souligner le fait que pour un prédicteur catégorique avec niveaux, nous aurons des coefficients de régression . k - 1kk-1
chl