kiểm tra dựa trên phần dư

Aug 26 2020

Đây có thể là một câu hỏi r, mà tôi nghĩ là không được phép ở đây, nhưng tôi nghĩ rằng tôi sẽ thử trong trường hợp nó ổn. Theo tôi hiểu, có một loạt các bài kiểm tra dựa trên phần dư. Một ví dụ về điều này là thử nghiệm Breusch-Pagan. Điều này tạo ra kết quả rõ ràng từ đó (và tài liệu dường như yêu cầu một mô hình hồi quy hơn là phần dư).

# load the dataset
data(mtcars)
# fit a regression model
model <- lm(mpg~disp+hp, data=mtcars)
library(lmtest)
# perform Breusch-Pagan Test
bptest(model)

Có phải mã trích xuất phần dư hay tôi đã sai khi cho rằng bạn cần phần dư cho bài kiểm tra này (các nhận xét tôi đọc có vẻ khá rõ ràng là nó chạy trên phần dư).

Trả lời

StupidWolf Aug 26 2020 at 00:27

Để thêm vào nhận xét của @ ChristophHanck, bạn có thể kiểm tra mã nguồn cho bptest và trong đó bạn thấy rằng có thể áp dụng công thức và khung dữ liệu:

bptest(mpg~disp+hp, data=mtcars)

studentized Breusch-Pagan test

data:  mpg ~ disp + hp
BP = 4.0861, df = 2, p-value = 0.1296

Bên dưới mã, có hai phần. Nếu bạn cung cấp một đối tượng lm, nó sẽ trích xuất x và y, chỉnh sửa lại công thức bằng lm.fit. Sau đó, nó trích xuất phần dư từ đối tượng lm.fit và tính toán các số liệu thống kê có liên quan. Đây là những dòng có liên quan:

resi <- lm.fit(X,y)$residuals
  sigma2 <- sum(resi^2)/n

  if(studentize)
  {
    w <- resi^2 - sigma2
    aux <- lm.fit(Z, w)    
    bp <- n * sum(aux$fitted.values^2)/sum(w^2) method <- "studentized Breusch-Pagan test" } else { f <- resi^2/sigma2 -1 aux <- lm.fit(Z, f) bp <- 0.5 * sum(aux$fitted.values^2)
    method <- "Breusch-Pagan test"
  }

  names(bp) <- "BP"
  df <- c("df" = aux$rank - 1)
  RVAL <- list(statistic = bp,
      parameter = df,
      method = method,
      p.value= pchisq(bp, df, lower.tail = FALSE),
      data.name = dname)