Nhiều lần cắt bỏ dữ liệu đếm bị thiếu trong một chuỗi thời gian từ một nghiên cứu bảng


9

Tôi đang cố gắng giải quyết vấn đề liên quan đến việc cắt bỏ dữ liệu bị thiếu trong nghiên cứu dữ liệu bảng điều khiển (Không chắc chắn liệu tôi có đang sử dụng 'nghiên cứu dữ liệu bảng điều khiển' không - như tôi đã biết ngày hôm nay.) đến năm 2009, tất cả các tháng, nam và nữ, cho 8 quận khác nhau và cho 4 nhóm tuổi.

Khung dữ liệu trông giống như thế này:

         District  Gender Year Month    AgeGroup TotalDeaths
         Northern    Male 2006    11        01-4           0
         Northern    Male 2006    11       05-14           1
         Northern    Male 2006    11         15+          83
         Northern    Male 2006    12           0           3
         Northern    Male 2006    12        01-4           0
         Northern    Male 2006    12       05-14           0
         Northern    Male 2006    12         15+         106
         Southern  Female 2003     1           0           6
         Southern  Female 2003     1        01-4           0
         Southern  Female 2003     1       05-14           3
         Southern  Female 2003     1         15+         136
         Southern  Female 2003     2           0           6
         Southern  Female 2003     2        01-4           0
         Southern  Female 2003     2       05-14           1
         Southern  Female 2003     2         15+         111
         Southern  Female 2003     3           0           2
         Southern  Female 2003     3        01-4           0
         Southern  Female 2003     3       05-14           1
         Southern  Female 2003     3         15+         141
         Southern  Female 2003     4           0           4

Trong 10 tháng trải dài trong năm 2007 và 2008, một số ca tử vong ở tất cả các huyện đã không được ghi nhận. Tôi đang cố gắng ước tính các giá trị còn thiếu này thông qua một phương pháp nhiều chi tiết. Sử dụng Mô hình tuyến tính tổng quát hoặc mô hình SARIMA.

Vấn đề lớn nhất của tôi là việc sử dụng phần mềm và mã hóa. Tôi đã hỏi một câu hỏi trên Stackoverflow, nơi tôi muốn trích xuất dữ liệu thành các nhóm nhỏ hơn như thế này:

         District  Gender Year Month    AgeGroup TotalDeaths
         Northern    Male 2003     1        01-4           0
         Northern    Male 2003     2        01-4           1
         Northern    Male 2003     3        01-4           0
         Northern    Male 2003     4        01-4           3
         Northern    Male 2003     5        01-4           4
         Northern    Male 2003     6        01-4           6
         Northern    Male 2003     7        01-4           5
         Northern    Male 2003     8        01-4           0
         Northern    Male 2003     9        01-4           1
         Northern    Male 2003    10        01-4           2
         Northern    Male 2003    11        01-4           0
         Northern    Male 2003    12        01-4           1
         Northern    Male 2004     1        01-4           1
         Northern    Male 2004     2        01-4           0

Sẽ

         Northern    Male 2006    11        01-4           0
         Northern    Male 2006    12        01-4           0

Nhưng ai đó đề nghị tôi nên mang câu hỏi của tôi đến đây - có lẽ yêu cầu một hướng? Hiện tại tôi không thể nhập dữ liệu này dưới dạng nghiên cứu theo chuỗi thời gian / bảng điều khiển thích hợp vào R. Mục đích cuối cùng của tôi là sử dụng dữ liệu này và amelia2gói có chức năng của nó để xử lý mất tích TotalDeathstrong một số tháng nhất định trong năm 2007 và 2008, trong đó dữ liệu là còn thiếu.

Bất kỳ trợ giúp, làm thế nào để làm điều này và có lẽ đề xuất về cách giải quyết vấn đề này sẽ được đánh giá cao.

Nếu điều này có ích, tôi đang cố gắng làm theo một cách tiếp cận tương tự như những gì Clint Roberts đã làm trong Luận án Tiến sĩ .

BIÊN TẬP:

Sau khi tạo biến 'thời gian' và 'nhóm' theo đề xuất của @Matt:

> head(dat)
     District Gender Year Month AgeGroup Unnatural Natural Total time                    group
1 Khayelitsha Female 2001     1        0         0       6     6    1     Khayelitsha.Female.0
2 Khayelitsha Female 2001     1     01-4         1       3     4    1  Khayelitsha.Female.01-4
3 Khayelitsha Female 2001     1    05-14         0       0     0    1 Khayelitsha.Female.05-14
4 Khayelitsha Female 2001     1     15up         8      73    81    1  Khayelitsha.Female.15up
5 Khayelitsha Female 2001     2        0         2       9    11    2     Khayelitsha.Female.0
6 Khayelitsha Female 2001     2     01-4         0       2     2    2  Khayelitsha.Female.01-4

Như bạn chú ý, thực sự có thêm chi tiết 'Tự nhiên' và 'Không tự nhiên'.

Câu trả lời:


10

Bạn có thể sử dụng Ameliagói để buộc tội dữ liệu (công bố đầy đủ: Tôi là một trong những tác giả của Amelia). Các họa tiết gói có một ví dụ mở rộng về cách sử dụng nó để xử lý dữ liệu bị thiếu.

Dường như bạn có các đơn vị thuộc nhóm tuổi-giới tính được quan sát ở cấp độ hàng tháng. Trước tiên, bạn tạo một biến nhân tố cho từng loại đơn vị (nghĩa là một cấp cho mỗi nhóm tuổi-giới tính). Hãy gọi nó là group. Sau đó, bạn sẽ cần một biến theo thời gian, có thể là số tháng kể từ tháng 1 năm 2003. Do đó, biến này sẽ là 13 vào tháng 1 năm 2004. Gọi biến này time. Amelia sẽ cho phép bạn áp đặt dựa trên các xu hướng thời gian bằng các lệnh sau:

library(Amelia)
a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE)

Các đối số tscschỉ đơn giản là biểu thị các biến thời gian và đơn vị. Đối splinetimesố đặt thời gian nên được sử dụng linh hoạt như thế nào để áp đặt dữ liệu bị thiếu. Ở đây, 2 có nghĩa là việc cắt bỏ sẽ sử dụng hàm bậc hai của thời gian, nhưng giá trị cao hơn sẽ linh hoạt hơn. Đối intercssố ở đây cho Amelia sử dụng xu hướng thời gian riêng cho từng nhóm tuổi-giới tính. Điều này thêm nhiều tham số cho mô hình, vì vậy nếu bạn gặp sự cố, bạn có thể đặt điều này FALSEđể cố gắng gỡ lỗi.

Trong mọi trường hợp, điều này sẽ giúp bạn thu thập thông tin bằng cách sử dụng thông tin thời gian trong dữ liệu của bạn. Vì dữ liệu bị thiếu được giới hạn ở mức 0, bạn có thể sử dụng boundsđối số để buộc các lần cắt ngang vào các giới hạn logic đó.

EDIT: Cách tạo biến nhóm / thời gian

Biến thời gian có thể là dễ nhất để tạo, bởi vì bạn chỉ cần đếm từ năm 2002 (giả sử đó là năm thấp nhất trong dữ liệu của bạn):

my.data$time <- my.data$Month + 12 * (my.data$Year - 2002)

Biến nhóm khó hơn một chút nhưng cách nhanh chóng là sử dụng lệnh dán:

my.data$group <- with(my.data, 
                      as.factor(paste(District, Gender, AgeGroup, sep = ".")))

Với các biến này được tạo, bạn muốn loại bỏ các biến ban đầu khỏi phần cắt bỏ. Để làm điều đó bạn có thể sử dụng idvarsđối số:

a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE,
                idvars = c("District", "Gender", "Month", "Year", "AgeGroup"))

Cảm ơn bạn rất nhiều vì đã phản hồi! Tôi đã chơi với Ameliamột chút nhưng đã bỏ cuộc (trước đó). Trước đây tôi đã nhìn thấy họa tiết (nhưng mất nó bằng cách nào đó!) Chỉ cần nhìn nhanh vào nó và sẽ dần dần đi qua nó. Một vấn đề bây giờ tôi có là tôi không chắc chắn về cách tạo grouptimecác biến. (Tôi đã thử tạo chúng để phân tích / dự báo chuỗi thời gian, nhưng có một vòng lặp xung quanh nó.) Tôi chắc chắn rằng đó là trong vigette - vì vậy tôi sẽ quay lại với bạn nếu tôi gặp khó khăn. Cảm ơn một lần nữa :)
OSlOlSO

Vui vì nó hữu ích. Tôi đã thêm một ví dụ về cách tạo ra các biến đó. Mong rằng sẽ giúp.
Matt Blackwell

Cảm ơn các ví dụ @Matt. Vì một số lý do kỳ lạ, nó đã gây ra lỗi cho tôi khi tôi sử dụng "ts = time" và "cs = group". Tôi chỉ thay thế "thời gian" và "nhóm" bằng số cột tương ứng và sau đó nó hoạt động. a.out=amelia(dat,ts=time,cs=group,splinetime=2,intercs=TRUE,idvars=c("District","Gender","Month","Year","AgeGroup"),bounds=bds) Amelia Error Code: 6 The 'ts' variable is out of the range of possible column numbers or is not an integer.
OSlOlSO

Đối với giới hạn, tôi đã theo dõi họa tiết và tạo giới hạn bằng cách sử dụng: bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)Về cơ bản tôi chỉ chọn 500 làm giới hạn trên ngẫu nhiên. Tôi đã cố gắng chỉ để không đưa ra một cột thứ ba, nhưng Ameliacảnh báo rằng nó yêu cầu cột thứ ba. Có lẽ có một cách để chỉ cụ thể một giới hạn thấp hơn?
OSlOlSO

Tôi đã thêm một ví dụ về dữ liệu trong câu hỏi - có lẽ nếu điều này gây ra Lỗi? Nhưng tôi nghi ngờ nó.
OSlOlSO
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.