2010-11-16 10 views
9

En utilisant predict() on peut obtenir la valeur prédite de la variable dépendante (y) pour une certaine valeur de la variable indépendante (x) pour un modèle donné. Y at-il une fonction qui prédit x pour un donné y?inverse de la fonction 'predict'

Par exemple:

kalythos <- data.frame(x = c(20,35,45,55,70), 
    n = rep(50,5), y = c(6,17,26,37,44)) 
kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y) 
model <- glm(Ymat ~ x, family = binomial, data = kalythos) 

Si nous voulons connaître la valeur prédite du modèle pour x=50:

predict(model, data.frame(x=50), type = "response") 

Je veux savoir qui fait xy=30, par exemple.

+4

La prédiction est toujours dans le contexte d'un modèle statistique. Il faut des hypothèses distributionnelles et structurelles avant que la variable puisse être "prédite". Dans le cas de fonctions telles que lm et glm, les variables indépendantes sont supposées être fixes (c'est-à-dire déterministes), de sorte que la prédiction de celles-ci est dénuée de sens.Si vous voulez faire une inférence sur X, vous devrez utiliser une approche hiérarchique pour rendre X stochastique. Très probablement, vous allez vous retrouver dans un cadre bayésien qui vous donnera le postérieur pour votre X, qui à son tour vous pouvez utiliser pour les prédictions. – VitoshKa

+2

Vous devriez préciser exactement ce que vous voulez. Avec 1 x, c'est faisable. Avec 2 x, vous avez une quantité infinie de réponses possibles. Donc je me demande vraiment pourquoi exactement vous avez besoin de la prédiction inverse. Est-ce à des fins d'étalonnage ou à peu près? - edit: voir aussi le commentaire de VitoshKa. –

+0

vous pouvez construire un modèle inverse, quelque chose comme 'invM1 <- lm (x ~ y, data)' et ensuite utiliser 'predict' sur votre nouveau prédicteur' y'. Maintenant, avant de vous lancer et de le faire, je recommande de prendre en compte ce que @vitoshKa a commenté plus haut. – PavoDive

Répondre

8

Scie la réponse précédente est supprimée. Dans votre cas, étant donné n = 50 et le modèle est binomiale, vous devez calculer x y donné en utilisant:

f <- function (y,m) { 
    (logit(y/50) - coef(m)[["(Intercept)"]])/coef(m)[["x"]] 
} 
> f(30,model) 
[1] 48.59833 

Mais en le faisant, il vaut mieux consulter un statisticien pour vous montrer comment calculer l'intervalle de prédiction inverse. Et s'il vous plaît, tenez compte des considérations de VitoshKa.

1

Il vous suffit de réorganiser l'équation de régression, mais comme les commentaires ci-dessus l'indiquent, cela peut s'avérer difficile et ne pas nécessairement avoir une interprétation significative.

Cependant, pour le cas que vous avez présenté, vous pouvez utiliser:

(1/coef(model)[2])*(model$family$linkfun(30/50)-coef(model)[1]) 

Remarque J'ai fait la division par le coefficient x premier à permettre l'attribut name soit correct.

0

Pour une vue rapide (sans intervalles et sans tenir compte de problèmes supplémentaires), vous pouvez utiliser la fonction TkPredict du module TeachingDemos. Il ne le fait pas directement, mais vous permet de modifier dynamiquement la ou les valeurs x et de voir quelle est la valeur y prédite, donc il serait assez simple de déplacer x jusqu'à ce que le Y désiré soit trouvé (pour des valeurs données de x), cela montrera aussi probablement des problèmes avec plusieurs x qui fonctionneraient pour le même y.

0

Le paquet chemcal a une fonction inverse.predict(), qui travaille pour des crises de la forme y ~ x et y ~ x - 1

1

suis tombé sur ce vieux fil, mais pensé que je voudrais ajouter une autre information. Le paquet MASS a la fonction dose.p pour les modèles logit/probit. SE est via la méthode delta.

> dose.p(model,p=.6) 
      Dose  SE 
p = 0.6: 48.59833 1.944772 

Montage du modèle inverse (x ~ y) ne fait sens ici parce que, comme le dit @VitoshKa, nous supposons x et y est fixé (la réponse 0/1) est aléatoire. En outre, si les données n'étaient pas groupées, vous auriez seulement 2 valeurs de la variable explicative: 0 et 1. Mais même si nous supposons que x est fixe, il est logique de calculer un intervalle de confiance pour la dose x pour un p donné , contrairement à ce que dit @VitoshKa. Tout comme nous pouvons reparameter le modèle en termes de DE50, nous pouvons le faire pour ED60 ou tout autre quantile. Les paramètres sont fixes, mais nous calculons toujours les CI pour eux.