So beheben sie in r: ungültiger typ (liste) für variable


Ein Fehler, der in R auftreten kann, ist:

 Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE): 
  invalid type (list) for variable 'x' 

Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, ein Regressionsmodell oder ANOVA-Modell in R anzupassen und eine Liste für eine der Variablen anstelle eines Vektors zu verwenden.

In diesem Tutorial wird erklärt, wie Sie diesen Fehler in der Praxis beheben können.

So reproduzieren Sie den Fehler

Angenommen, ich versuche, ein einfaches lineares Regressionsmodell in R anzupassen:

 #define variables
x <- list(1, 4, 4, 5, 7, 8, 9, 10, 13, 14)
y <- c(10, 13, 13, 14, 18, 20, 22, 24, 29, 31)

#attempt to fit regression model
model <- lm(y ~ x)

Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE): 
  invalid type (list) for variable 'x'

Ich erhalte eine Fehlermeldung, weil die Funktion lm() nur Vektoren als Eingabe akzeptieren kann und die Variable x derzeit eine Liste ist.

So vermeiden Sie den Fehler

Der einfachste Weg, diesen Fehler zu vermeiden, besteht darin, einfach die Funktion unlist() zu verwenden, um die Listenvariable in einen Vektor umzuwandeln:

 #define variables
x <- list(1, 4, 4, 5, 7, 8, 9, 10, 13, 14)
y <- c(10, 13, 13, 14, 18, 20, 22, 24, 29, 31)

#attempt to fit regression model
model <- lm(y ~ unlist(x))

#view the model output
summary(model)

Call:
lm(formula = y ~ unlist(x))

Residuals:
    Min 1Q Median 3Q Max 
-1.1282 -0.4194 -0.1087 0.2966 1.7068 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 6.58447 0.55413 11.88 2.31e-06 ***
unlist(x) 1.70874 0.06544 26.11 4.97e-09 ***
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8134 on 8 degrees of freedom
Multiple R-squared: 0.9884, Adjusted R-squared: 0.987 
F-statistic: 681.8 on 1 and 8 DF, p-value: 4.97e-09

Beachten Sie, dass wir das einfache lineare Regressionsmodell dieses Mal fehlerfrei anpassen können, da wir unlist() verwendet haben, um die Variable x in einen Vektor umzuwandeln.

Beachten Sie, dass Sie, wenn Sie ein multiples lineares Regressionsmodell anpassen und mehrere Prädiktorvariablen haben, die derzeit Listenobjekte sind, mit unlist() jede von ihnen in Vektoren konvertieren können, bevor Sie das Regressionsmodell anpassen:

 #define variables
x1 <- list(1, 4, 4, 5, 7, 8, 9, 10, 13, 14)
x2 <- list(20, 16, 16, 15, 16, 12, 10, 8, 8, 4)
y <- c(10, 13, 13, 14, 18, 20, 22, 24, 29, 31)

#fit multiple linear regression model
model <- lm(y ~ unlist(x1) + unlist(x2))

#view the model output
summary(model)

Call:
lm(formula = y ~ unlist(x1) + unlist(x2))

Residuals:
    Min 1Q Median 3Q Max 
-1.1579 -0.4211 -0.1386 0.3108 1.7130 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 8.34282 4.44971 1.875 0.102932    
unlist(x1) 1.61339 0.24899 6.480 0.000341 ***
unlist(x2) -0.08346 0.20937 -0.399 0.702044    
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8599 on 7 degrees of freedom
Multiple R-squared: 0.9887, Adjusted R-squared: 0.9854 
F-statistic: 305.1 on 2 and 7 DF, p-value: 1.553e-07

Auch hier erhalten wir keine Fehlermeldungen, da wir jedes Objekt in der Liste in Vektoren umgewandelt haben.

Zusätzliche Ressourcen

In den folgenden Tutorials wird erläutert, wie andere gängige Vorgänge in R ausgeführt werden:

So interpretieren Sie die glm-Ausgabe in R
Wie man ANOVA-Ergebnisse in R interpretiert
Umgang mit R Warnung: glm.fit: Algorithmus konnte nicht konvergieren

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert