2016-12-12 1 views
1

Je voudrais demander de l'aide pour la fonction de prédiction. Je veux obtenir une ligne appropriée à mes données analogiques à abline(). Pour un système différent, j'ai utilisé cette approche auparavant.Erreur dans R - aucune méthode applicable pour 'prédire' appliqué à un objet de la classe "formule"

mod1<-glm(data$Lengthmm ~ data$qbH.yr.med, family=quasipoisson, 
    subset = data$Age==1) 

xv <- seq(min(data$qbH.yr.med), max(data$qbH.yr.med), 
    length.out = length(data$Lengthmm))    # poisson regression 

yv <- predict(mod1 ~ data$qbH.yr.med, family=quasipoisson, list(x = xv)) 

Erreur dans UseMethod ("prédire"): aucune méthode applicable pour 'prédire' appliqué à un objet de la classe "formule"

typeof(mod1) 
# [1] "list" 
typeof(xv) 
# [1] "double" 
class(mod1) 
# [1] "glm" "lm" 
class(xv) 
# [1] "numeric" 

Je ne sais pas pourquoi il demande la "formule" comme non de mes facteurs sont de cette classe ... Je serais heureux par l'aide, ou des idées pour cette erreur.

+2

Vous devriez utiliser votre objet modèle ('mod1') avec' predict() ', mais vous éviterez aussi d'utiliser' $ 'dans vos formules ou vous n'aurez probablement pas le résultat que vous voulez. Mais lorsque vous demandez de l'aide, assurez-vous d'inclure un [exemple reproductible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) avec des exemples de données afin que nous puissions exécutez le code. On ne sait pas comment cela aurait fonctionné avec d'autres modèles. Consultez probablement la page d'aide '? Predict' pour des exemples d'utilisation. – MrFlick

Répondre

0

Vous prédisez sur mod1 ~ data$qbH.yr.med c'est un objet de la formule de classe. Vous pouvez facilement identifier cela en remarquant le ~. Dans votre cas, vous voulez utiliser l'objet modèle que vous avez créé, c'est

2

Comme d'autres l'ont commenté, il est difficile de voir comment cela aurait pu fonctionner dans le passé. Il y a quelques points ici:

  • il est préférable pratique de fournir un argument data et utiliser uniquement les noms des variables (c.-à-Lengthhmm, non data$Lengthmm), surtout si vous voulez predict() et autres machines post-montage pour travailler
  • pour predict vous devez fournir le modèle ajusté et (éventuellement) un argument newdata qui correspond à la trame de données d'origine
  • c'est une bonne idée de ne pas appeler vos données data (ce masque une fonction R intégré, bien qu'il doesn 't habituellement causer des problèmes)

Faire un exemple reproductible:

set.seed(101) 
dd <- data.frame(Lengthmm=1:10,qbH.yr.med=rpois(10,1), 
       Age=rep(1,10)) 

Montage:

mod1 <- glm(Lengthmm ~ qbH.yr.med, family=quasipoisson, 
      data=dd, 
      subset = (Age==1)) 
xv <- with(dd, 
     data.frame(qbH.yr.med=seq(min(qbH.yr.med), max(qbH.yr.med), 
         length.out = length(Lengthmm)))) 
yv <- predict(mod1, newdata=xv) 

Par ailleurs, il semble un peu louche d'utiliser family=quasipoisson pour une réponse appelée Lengthmm - Je pense généralement que les longueurs seraient continues, et donc plus susceptibles d'être Normal ou Log-Normal (ou une autre transformation de Normal) plutôt que de Poisson-distribué ou distribué avec une variance proportionnelle à leur moyenne (c.-à-d. "quasi-Poisson" ...)