Làm cách nào để cải thiện thời gian chạy cho việc cắt bỏ dữ liệu R MICE


9

Tóm lại câu hỏi của tôi: có phương pháp nào để cải thiện thời gian hoạt động của R MICE (cắt dữ liệu) không?

Tôi đang làm việc với một bộ dữ liệu (30 biến, 1,3 triệu hàng) chứa dữ liệu bị thiếu (khá ngẫu nhiên). Khoảng 8% các quan sát trong khoảng 15 trong số 30 biến chứa NA. Để xử lý dữ liệu bị thiếu, tôi đang chạy chức năng MICE, một phần của gói MICE .

Tôi trải nghiệm thời gian chạy khá chậm, ngay cả trên một tập hợp con (100.000 hàng), với phương thức = "fastpmm" và m = 1 và chạy trong khoảng 15 phút.

Có cách nào để cải thiện thời gian chạy mà không mất quá nhiều hiệu năng không? (mouse.impute.mean khá nhanh, nhưng đi kèm với việc mất thông tin quan trọng!).

Mã sinh sản:

library(mice)
df <- data.frame(replicate(30,sample(c(NA,1:10),1000000,rep=TRUE)))
df <- data.frame(scale(df))

output <- mice(df, m=1, method = "fastpmm")

1
Nói chung: những loại câu hỏi này có phù hợp với Xác thực chéo hoặc phù hợp hơn với Stack Overflow không?
Dendrobates

3
Nó có thể là một cuộc gọi phán xét. Bởi vì (như một nguyên tắc chung) những cải thiện đáng kể nhất về thời gian chạy có được nhờ hiểu được các thuật toán cơ bản, tôi hy vọng cơ hội tốt nhất của bạn để có được câu trả lời thực sự hiệu quả có thể ở đây, trong một cộng đồng nơi mọi người có thể đề xuất các phương pháp thay thế . Nếu bạn không nhận được câu trả lời đầy đủ trong một hoặc hai ngày, thì hãy gắn cờ bài đăng này để di chuyển và chúng tôi sẽ gửi nó cho SO (cùng với bất kỳ câu trả lời và nhận xét nào có thể được thu thập trong thời gian này).
whuber

1
Bạn có thể thay đổi tùy chọn 'fastppm' thành 'Norm', nó sẽ nhanh hơn
marc1s

1
Thx @ marc1s, đã cải thiện rất nhiều cho các bộ dữ liệu lớn. Đối với khung dữ liệu ngẫu nhiên (như trên) với 10.000 hàng, phương thức "định mức" nhanh hơn khoảng 4 lần so với "fastpmm". Với 50.000 hàng, nó thậm chí còn nhanh hơn 12 lần. Do đó, mức tăng tương đối trong thời gian chạy đang tăng theo số lượng hàng.
Dendrobates

1
Tùy thuộc vào mô hình bạn sẽ chạy, có thể nhanh hơn để sử dụng ước tính khả năng tối đa (hoặc khả năng tối đa thông tin đầy đủ), tương đương với việc cắt cụt nếu mô hình được chỉ định chính xác. Đây là một bài báo mà tôi đã tham gia, so sánh các phương pháp khác nhau: emeraldinsight.com/doi/abs/10.1108/JCP-02-2015-0007
Jeremy Miles

Câu trả lời:


4

Bạn có thể sử dụng quickpred()từ micegói mà bạn có thể giới hạn các yếu tố dự đoán bằng cách chỉ định mincor (Tương quan tối thiểu) và minpuc (tỷ lệ các trường hợp có thể sử dụng). Ngoài ra, bạn có thể sử dụng loại trừ và bao gồm các tham số để kiểm soát các yếu tố dự đoán.


2

Tôi đã tạo một trình bao bọc cho micehàm bao gồm một đối số phụ droplist, trong đó bạn có thể truyền một vectơ ký tự của các biến dự đoán mà bạn không muốn sử dụng ở phía bên phải của các công thức cắt bỏ. Đây là tốc độ, vì tôi thấy rằng các biến nhân tố với nhiều cấp độ sẽ làm chậm đáng kể việc cắt cụt . Tôi không biết quickpredchức năng được tham chiếu bởi @A Biến và có lẽ bạn có thể sử dụng cả hai khái niệm này cùng nhau.

Dưới đây là chức năng như nó xuất hiện trong gói glmmplus của tôi . Nếu bạn thấy nó hữu ích, tôi có thể mở một yêu cầu kéo trong micegói thực tế .

ImputeData <- function(data, m = 10, maxit = 15, droplist = NULL) {
  if (length(intersect(names(data), droplist)) < length(droplist)) {
    stop("Droplist variables not found in data set")
  }
  predictorMatrix <- (1 - diag(1, ncol(data)))
  for (term in droplist) {
  drop.index <- which(names(data) == term)
    predictorMatrix[, drop.index] <- 0
  }
  mids.out <- mice(data, m = m, maxit = maxit,
                   predictorMatrix = predictorMatrix)
  return(mids.out)
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.