Predict() - Peut-être que je ne suis pas le comprendre
Je posté plus tôt aujourd'hui agit d'une erreur, j'ai été d'obtenir avec l'aide de la predict
fonction. J'ai été en mesure d'obtenir ce corrigé, et je pensais que j'étais sur la bonne voie.
J'ai un certain nombre d'observations (réelles) et j'ai un peu de points de données que j'ai envie d'extrapoler ou de prévoir. J'ai utilisé lm
pour créer un modèle, puis j'ai essayé d'utiliser predict
à la valeur réelle qui servira de facteur prédictif d'entrée.
Ce code est tout répété à partir de mon post précédent, mais ici il est:
df <- read.table(text = '
Quarter Coupon Total
1 "Dec 06" 25027.072 132450574
2 "Dec 07" 76386.820 194154767
3 "Dec 08" 79622.147 221571135
4 "Dec 09" 74114.416 205880072
5 "Dec 10" 70993.058 188666980
6 "Jun 06" 12048.162 139137919
7 "Jun 07" 46889.369 165276325
8 "Jun 08" 84732.537 207074374
9 "Jun 09" 83240.084 221945162
10 "Jun 10" 81970.143 236954249
11 "Mar 06" 3451.248 116811392
12 "Mar 07" 34201.197 155190418
13 "Mar 08" 73232.900 212492488
14 "Mar 09" 70644.948 203663201
15 "Mar 10" 72314.945 203427892
16 "Mar 11" 88708.663 214061240
17 "Sep 06" 15027.252 121285335
18 "Sep 07" 60228.793 195428991
19 "Sep 08" 85507.062 257651399
20 "Sep 09" 77763.365 215048147
21 "Sep 10" 62259.691 168862119', header=TRUE)
str(df)
'data.frame': 21 obs. of 3 variables:
$ Quarter : Factor w/ 24 levels "Dec 06","Dec 07",..: 1 2 3 4 5 7 8 9 10 11 ...
$ Coupon: num 25027 76387 79622 74114 70993 ...
$ Total: num 132450574 194154767 221571135 205880072 188666980 ...
Code:
model <- lm(df$Total ~ df$Coupon, data=df)
> model
Call:
lm(formula = df$Total ~ df$Coupon)
Coefficients:
(Intercept) df$Coupon
107286259 1349
Prédire code (sur la base de précédentes aider):
(Ce sont les valeurs prédictives je veux utiliser pour obtenir la valeur prédite)
Quarter = c("Jun 11", "Sep 11", "Dec 11")
Total = c(79037022, 83100656, 104299800)
Coupon = data.frame(Quarter, Total)
Coupon$estimate <- predict(model, newdate = Coupon$Total)
Maintenant, quand je le lance, j'obtiens ce message d'erreur:
Error in `$<-.data.frame`(`*tmp*`, "estimate", value = c(60980.3823396919, :
replacement has 21 rows, data has 3
Mon premier bloc de données que j'ai utilisé pour construire le modèle a 21 observations. Je suis maintenant essayer de prédire les 3 valeurs en fonction du modèle.
Je ne pas vraiment comprendre cette fonction, ou une erreur dans mon code.
Aide serait appréciée.
Grâce
- Vous avez presque certainement besoin d'utiliser l'
data
argumentlm
t obtenir que cela fonctionne, c'est à diremodel <- lm(Total ~ Coupon, data=df)
. Alors je suggère d'Coupon$estimate <- predict(model, newdata = Coupon)$Total
- Je suis d'accord sur la première partie, pas si sûr de la seconde. Je pense que
predict(model, newdata = Coupon)
doit être ce qu'il veut. - oui, je pense que vous avez raison.
- Mis à jour le code pour refléter les
data=df
que Ben l'a suggéré. Même résultat. Ensuite, j'ai mis à jour pour joran la suggestion. Même erreur. - Vous n'avez pas de mise à jour comme Ben indiqué. Remarquer une différence dans votre formule spécifications?
df$Total
contre seulementTotal
. Votre façon, lorsque vous utilisezpredict
, sa recherche d'une variable nomméedf$Coupon
plutôt que de simplementCoupon
(je pense). À tout le moins, les noms ne correspondent pas. - Aussi, allez jeter un autre coup d'oeil à ma réponse à votre question. Je vous avais donné d'informations incorrectes w/ ma première réponse, mais mis à jour il y a plusieurs heures. Je pense que la réponse est aujourd'hui assez bon, et fait de la suggestion supplémentaire (en accord avec
?predict.lm
) quenewdata
devrait être un données.image contenant laCoupon
ou toutes les autres variables prédictives. Désolé -- pensé DONC automatiquement vous informer de la modification de ma réponse et ajout d'un commentaire.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous voulez utiliser
pas
model <-lm(df$Total ~ df$Coupon, data=df)
.Deuxième, en disant
lm(Total ~ Coupon)
, vous êtes à côté d'un modèle qui utiliseTotal
que la variable de réponse, avecCoupon
que le prédicteur. C'est, votre modèle est de la formeTotal = a + b*Coupon
, aveca
etb
les coefficients estimés. Notez que la réponse va sur le côté gauche de la~
, et la prédiction(s) sur la droite.De ce fait, lorsque vous demandez R pour vous donner des valeurs prédites par le modèle, vous devez fournir un ensemble de nouvelles prédicteur valeurs, c'est à dire de nouvelles valeurs de
Coupon
, pasTotal
.Troisième, à en juger par votre cahier des charges de
newdata
, on dirait que vous êtes en fait d'après un modèle pour l'adapter àCoupon
en fonction deTotal
, pas l'inverse. Pour ce faire:new.df
doit contenirCoupon
au lieu deTotal
. Aussi, ma réponse à la question d'origine qui fonctionne aussi bien 😉Total
. Cela impliquerait qu'il s'agit en fait d'après un modèle permettant de prédireCoupon
.Total
LHS de la formule, que pensez-vous de l'ouverture de la ligne de votre post! Sauf si je suis incroyablement confus,Coupon
est censé être le prédicteur. (Non pas que cela importe près autant que les concepts que vous tentez de passer à travers).~
la variable de réponse est censé être sur. Je vais mettre à jour ma réponse.Coupon
, pasTotal
, alors, toutes mes excuses si je suis confus tout le monde. Je n'ai que Hong aménagé et n'a le faire fonctionner. Merci pour cela. Cependant, lorsque je lancepredict(model, new.df)
, je reçois encore des 21 des observations au lieu des 3 que j'essayais de déterminer dansnew.df
. Le point de l'ensemble depredict
est d'utiliserlm
et de prévoir de nouvelles valeurs, de droite, ou suis-je tout simplement confus sur sa fonction? Merci encore.Coupon
LHS de la formule, et que vous avez entré votre code exactement comme je l'ai eu dans les 3 dernières lignes de ma réponse.Grâce Hong, c'est exactement le problème que j'ai été en cours d'exécution dans. L'erreur que vous obtenez suggère que le nombre de lignes est mauvais, mais le problème est en fait que le modèle a été formé à l'aide d'une commande qui se termine avec le faux noms pour les paramètres.
C'est vraiment une critique sur le détail qui est entièrement non-évident pour lm et ainsi de suite. Certains tutorial faire référence au fait de faire des lignes comme
lm(olive$Area@olive$Palmitic)
- de se retrouver avec des noms de variables d'olive$Zone à Zone, de sorte que la création d'une entrée à l'aide deanewdata<-data.frame(Palmitic=2)
ne peut pas être utilisée. Si vous utilisezlm(Area@Palmitic,data=olive)
ensuite les noms de variable sont la droite et la prédiction fonctionne.Le vrai problème, c'est que le message d'erreur n'indique pas le problème:
@
-opérateur vous indique qu'il s'agit d'une S4-objet et qui n'a rien à voir avec la origianl question ni la réponse. Vous avez tort de confondre vos difficultés avec un quelconque problème avec une plus simple problème qui a été répondu de manière adéquate.au lieu de newdata vous utilisez newdate dans votre prédire le code, vérifiez une fois. et il suffit d'utiliser
Coupon$estimate <- predict(model, Coupon)
Il va travailler.
Pour éviter l'erreur, un point important à propos du nouveau jeu de données est le nom de la variable indépendante. Il doit être le même que dans le modèle. Une autre façon est d'imbriquer les deux fonctionnent sans la création d'un nouveau dataset
Payer l'attention sur le modèle. Les deux commandes sont similaires, mais pour prédire la fonction, la première travaux de la deuxième ne fonctionne pas.