Як виправити в r: недійсний тип (список) для змінної
Помилка, з якою ви можете зіткнутися в R:
Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE): invalid type (list) for variable 'x'
Ця помилка зазвичай виникає, коли ви намагаєтеся підібрати регресійну модель або модель дисперсійного аналізу в R і використовуєте список для однієї зі змінних замість вектора .
Цей посібник пояснює, як виправити цю помилку на практиці.
Як відтворити помилку
Припустімо, я намагаюся вписати просту модель лінійної регресії в R:
#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'
Я отримую помилку, оскільки функція lm() може приймати лише вектори як вхідні дані, а змінна x наразі є списком.
Як уникнути помилки
Найпростіший спосіб уникнути цієї помилки — просто використати функцію unlist() , щоб перетворити змінну списку на вектор:
#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
Зауважте, що цього разу ми можемо адаптувати просту модель лінійної регресії без будь-яких помилок, оскільки ми використали unlist() для перетворення змінної x у вектор.
Зауважте, що якщо ви підбираєте модель множинної лінійної регресії та маєте кілька змінних предикторів, які наразі є об’єктами списку, ви можете використати unlist() , щоб перетворити кожен із них на вектори перед підгонкою моделі регресії:
#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
Знову ж таки, ми не отримуємо жодних помилок, оскільки ми перетворили кожен із об’єктів у списку на вектори.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові операції в R:
Як інтерпретувати вихід glm у R
Як інтерпретувати результати ANOVA у R
Як працювати з R Попередження: glm.fit: алгоритм не зійшовся