كيفية الإصلاح في r: نوع (قائمة) غير صالح للمتغير


الخطأ الذي قد تواجهه في R هو:

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

يحدث هذا الخطأ عادةً عند محاولة ملاءمة نموذج الانحدار أو نموذج ANOVA في 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: الخوارزمية لم تتقارب

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *