R'de nasıl düzeltilir: değişken için geçersiz tür (liste)
R’de karşılaşabileceğiniz bir hata:
Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE): invalid type (list) for variable 'x'
Bu hata genellikle R’ye bir regresyon modeli veya ANOVA modeli sığdırmaya çalıştığınızda ve değişkenlerden biri için vektör yerine bir liste kullandığınızda ortaya çıkar.
Bu eğitimde bu hatanın pratikte nasıl düzeltileceği açıklanmaktadır.
Hata nasıl yeniden oluşturulur?
Diyelim ki R’ye basit bir doğrusal regresyon modeli sığdırmaya çalışıyorum:
#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() işlevi girdi olarak yalnızca vektörleri alabildiğinden ve x değişkeni şu anda bir liste olduğundan hata alıyorum.
Hata nasıl önlenir
Bu hatayı önlemenin en kolay yolu, liste değişkenini bir vektöre dönüştürmek için unlist() işlevini kullanmaktı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 ~ 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
x değişkenini bir vektöre dönüştürmek için unlist() yöntemini kullandığımız için basit doğrusal regresyon modelini bu sefer hatasız bir şekilde sığdırabildiğimizi unutmayın.
Çoklu doğrusal regresyon modeli uyguluyorsanız ve halihazırda liste nesneleri olan birden fazla tahmin değişkeniniz varsa, regresyon modelini yerleştirmeden önce bunların her birini vektörlere dönüştürmek için unlist() işlevini kullanabileceğinizi unutmayın:
#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
Yine listedeki nesnelerin her birini vektörlere dönüştürdüğümüz için herhangi bir hata almıyoruz.
Ek kaynaklar
Aşağıdaki eğitimlerde R’de diğer yaygın işlemlerin nasıl gerçekleştirileceği açıklanmaktadır:
R’de glm çıktısı nasıl yorumlanır
R’de ANOVA sonuçları nasıl yorumlanır?
R Uyarısı nasıl ele alınır: glm.fit: algoritma yakınsamadı