วิธีแก้ไขใน 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() เพื่อแปลงตัวแปร list เป็นเวกเตอร์:

 #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: อัลกอริทึมไม่ได้มาบรรจบกัน

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *