2017-12-01 29 views
0

Nach dem Erstellen des Poisson-Regressionsmodells können wir eine Vorhersage mit Vorhersagefunktion in R erstellen. Aber ich habe ein Problem wo Ich kann nicht mit meinen neuen Daten in R trainieren. Es gibt einen Fehler.Vorhersage in Poisson-Regression, Datenrahmen in R (Fehler: Argumente implizieren unterschiedliche Anzahl von Zeilen: 0, 1)

newdata <- data.frame(
    patient = mean(myd$patient), 
    hypertensive = factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)), 
    PCOS = factor(1:2, levels = 1:2, labels = levels(myd$PCOS)), 
    age = factor(1:3, levels = 1:3, labels = levels(myd$age)), 
    miscarriage = factor(1:2, levels=1:2, labels = levels(myd$miscarriage))) 

Error in data.frame(patient = mean(myd$patient), hypertensive = factor(1:4, : arguments imply differing number of rows: 1, 4, 2, 3

+1

Warum die „verschlungene“ 'factor' Erklärungen? Warum tust du nicht einfach z.B. 'hypertensive = as.factor (myd $ hypertensive)' und so weiter? –

+2

Auch Ihre Frage plus Titel hat nichts mit Poisson-Regression zu tun. –

+2

versuchen Sie 'expand.grid' anstelle von' dat.frame', das ist wahrscheinlich, was Sie stattdessen wollen. –

Antwort

0

Verwenden expand.grid als @Neal Fultz schreibt. Sie haben eine Länge von 2-4 im Argument zu data.frame, was voraussetzt, dass alle dieselbe Länge haben.

aktualisieren

Ich weiß nicht, warum jemand meine Antwort, aber ich meine Downvoted Antwort hier erweitern es kristallklar zu machen. Das Problem ist, dass die Eingabeargumente zu data.frame unterschiedliche Längen haben

> # create data example 
> myd <- data.frame(
+ # NOTICE: I assume that your patient covariate is continuous -- otherwise I 
+ #   do not get why you would take a mean 
+ patient  = 1:12, 
+ # here are the factors 
+ hypertensive = rep(letters[1:4], 3), 
+ PCOS   = rep(letters[1:2], 6), 
+ age   = rep(letters[1:3], 4), 
+ miscarriage = rep(letters[1:2], 6) 
+) 
> myd # show data 
    patient hypertensive PCOS age miscarriage 
1  1   a a a   a 
2  2   b b b   b 
3  3   c a c   a 
4  4   d b a   b 
5  5   a a b   a 
6  6   b b c   b 
7  7   c a a   a 
8  8   d b b   b 
9  9   a a c   a 
10  10   b b a   b 
11  11   c a b   a 
12  12   d b c   b 
> 
> # your issue is that the length you pass to data.frame differs 
> length(factor(1:4, levels = 1:4, labels = levels(myd$hypertensive))) 
[1] 4 
> length(factor(1:2, levels = 1:2, labels = levels(myd$PCOS))) 
[1] 2 
> 
> # however, you can use expand.grid 
> newdata <- expand.grid(
+ patient = mean(myd$patient), 
+ hypertensive = factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)), 
+ PCOS = factor(1:2, levels = 1:2, labels = levels(myd$PCOS)), 
+ age = factor(1:3, levels = 1:3, labels = levels(myd$age)), 
+ miscarriage = factor(1:2, levels=1:2, labels = levels(myd$miscarriage))) 
> 
> # it will have many examplse though 
> nrow(newdata) 
[1] 48 
+0

danke für die schnelle Antwort. Ihre Erklärung ist mir sehr klar. –

+0

Gerne helfen. Bitte schließen Sie die Frage, wenn Sie Ihre Frage beantwortet haben, indem Sie auf die Schaltfläche "Akzeptieren" klicken. –

Verwandte Themen