Thông tin đầy đủ khả năng tối đa cho dữ liệu bị thiếu trong R


18

Bối cảnh : Hồi quy phân cấp với một số dữ liệu bị thiếu.

Câu hỏi : Làm cách nào để sử dụng ước tính khả năng tối đa thông tin (FIML) đầy đủ để xử lý dữ liệu bị thiếu trong R? Có một gói bạn muốn giới thiệu, và các bước điển hình là gì? Tài nguyên và ví dụ trực tuyến cũng sẽ rất hữu ích.

Tái bút : Tôi là một nhà khoa học xã hội gần đây đã bắt đầu sử dụng R. Nhiều thuật ngữ là một tùy chọn, nhưng tôi thực sự thích cách các chương trình thanh lịch như Mplus xử lý dữ liệu bị thiếu bằng FIML. Thật không may, Mplus dường như không so sánh các mô hình trong bối cảnh hồi quy phân cấp vào lúc này (xin vui lòng cho tôi biết nếu bạn biết một cách để làm điều đó!). Tôi tự hỏi liệu có bất cứ điều gì tương tự trong R? Cảm ơn nhiều!


1
Bạn đã xem xét WinBugs chưa? Nó xử lý dữ liệu bị thiếu một cách đẹp tự nhiên.
Mike Dunlavey

Một thay thế cho WinBUGS là OpenBUGS hoặc STAN. Chúng nên thân thiện với máy Mac hơn.
Maxim.K

Câu trả lời:


15

Tín dụng của câu trả lời này được gửi tới @Joshua , người đã đưa ra một câu trả lời tuyệt vời khi tôi đăng câu hỏi này lên cộng đồng R và Statistics trên Google+. Tôi chỉ đơn giản là dán câu trả lời của mình dưới đây.

Để chạy hồi quy (không có mô hình biến tiềm ẩn), vui lòng đọc ghi chú của tôi được nhập sau văn bản được trích dẫn.

Xử lý dữ liệu bị thiếu với Khả năng tối đa trên tất cả các dữ liệu có sẵn (được gọi là FIML) là một kỹ thuật rất hữu ích. Tuy nhiên, có một số biến chứng khiến cho việc thực hiện một cách chung chung trở nên khó khăn. Xem xét một mô hình hồi quy tuyến tính đơn giản, dự đoán một số kết quả liên tục từ tuổi nói, giới tính và loại nghề nghiệp. Trong OLS, bạn không lo lắng về sự phân bố tuổi tác, giới tính và nghề nghiệp, chỉ có kết quả. Thông thường đối với các dự đoán phân loại, chúng được mã hóa giả (0/1). Để sử dụng ML, các giả định phân phối được yêu cầu cho tất cả các biến bị thiếu. Cho đến nay, cách tiếp cận dễ nhất là đa biến thông thường (MVN). Đây là những gì ví dụ Mplus sẽ làm theo mặc định nếu bạn không đi theo cách của mình để khai báo loại biến (ví dụ: phân loại). Trong ví dụ đơn giản tôi đã đưa ra, bạn có thể muốn giả sử, bình thường theo tuổi, Bernoulli cho tình dục và đa dạng cho loại công việc. Điều thứ hai là khó khăn bởi vì những gì bạn thực sự có là một số biến nhị phân, nhưng bạn không muốn coi chúng là Bernoulli. Điều này có nghĩa là bạn không muốn làm việc với các biến được mã hóa giả, bạn cần làm việc với biến phân loại thực tế để các công cụ ước tính ML có thể sử dụng đúng một đa thức, nhưng điều này có nghĩa là quá trình mã hóa giả cần được xây dựng trong mô hình , không phải dữ liệu. Lại làm phức tạp cuộc sống. Hơn nữa, sự phân phối chung của các biến liên tục và phân loại là không cần thiết để tính toán (khi tôi gặp vấn đề như thế này ở Mplus, nó nhanh chóng bắt đầu bị phá vỡ và đấu tranh). Cuối cùng, bạn thực sự lý tưởng xác định cơ chế dữ liệu còn thiếu. Theo kiểu SEM, FIML, tất cả các biến về cơ bản được quy định trên tất cả các biến khác, nhưng điều này không nhất thiết đúng. Ví dụ, có lẽ tuổi bị thiếu là một chức năng không phải là giới tính và loại nghề nghiệp, mà là sự tương tác của họ. Sự tương tác có thể không quan trọng đối với kết quả đầu mối, nhưng nếu nó quan trọng đối với sự thiếu hụt về tuổi tác, thì nó cũng phải nằm trong mô hình, không nhất thiết phải là mô hình quan tâm thực sự mà là mô hình dữ liệu bị thiếu.

lavaan sẽ sử dụng ML cho MVN, nhưng hiện tại tôi tin rằng các tùy chọn dữ liệu phân loại bị hạn chế (một lần nữa đến từ trường SEM, đây là tiêu chuẩn). Lúc đầu, nhiều lần xử lý có vẻ ít thanh lịch hơn vì nó đưa ra nhiều giả định ẩn đằng sau FIML (như các giả định phân phối cho mọi biến và mô hình dự đoán được giả định là thiếu trên mọi biến). Tuy nhiên, nó cung cấp cho bạn rất nhiều quyền kiểm soát và suy nghĩ rõ ràng về việc phân phối từng biến và cơ chế dữ liệu bị thiếu tối ưu cho mỗi biến là có giá trị.

Tôi ngày càng tin chắc rằng các mô hình Bayes là cách để xử lý dữ liệu bị thiếu. Lý do là vì chúng rất linh hoạt trong việc bao gồm các phân phối cho từng biến, cho phép nhiều loại phân phối khác nhau và có thể dễ dàng kết hợp tính biến đổi được đưa ra bởi dữ liệu bị thiếu trên các dự đoán, vào các ước tính mô hình tổng thể (đó là mẹo với nhiều lần cắt ngang trong đó bạn sau đó phải bằng cách nào đó kết hợp kết quả). Tất nhiên, những phương pháp này không phải là dễ nhất và có thể mất nhiều thời gian đào tạo và sử dụng.

Vì vậy, điều đó không thực sự trả lời câu hỏi của bạn, nhưng giải thích một chút lý do tại sao các khuôn khổ hoàn toàn chung để xử lý sự thiếu sót là khó khăn. Trong gói semutils của tôi cho các ma trận hiệp phương sai, tôi sử dụng lavaan bên dưới để sử dụng ML. Tôi làm điều đó bởi vì tôi giả sử cho một ma trận hiệp phương sai phương sai rằng dù sao bạn cũng đang sử dụng các biến liên tục để tôi cho rằng người dùng của tôi đã giả sử MVN cho dữ liệu của họ.

Điều này có nghĩa là nếu tất cả các biến bị thiếu là liên tục, lavaan , gói mô hình phương trình cấu trúc (SEM) là một gói tốt để sử dụng cho FIML trong R.

Bây giờ trở lại câu hỏi ban đầu của tôi. Ý định của tôi là có một sửa chữa ma thuật cho sự mất tích khi chạy hồi quy tuyến tính. Tất cả các biến của tôi bị thiếu là tốt đẹp và liên tục. Vì vậy, tôi đã tiến hành chạy các phân tích của mình theo hai phong cách:

  • Cách thông thường với nhiều lần cắt cụt
  • Trong phong cách SEM với dung nham sử dụng FIML.

Tôi đã bỏ lỡ rất nhiều thứ bằng cách thực hiện hồi quy theo kiểu SEM. Cả hai kiểu đều cho các hệ số và bình phương R tương tự nhau, nhưng trong kiểu SEM tôi không nhận được thử nghiệm quan trọng của hồi quy (giá trị F điển hình với df), thay vào đó tôi có các chỉ số phù hợp không hữu ích vì tôi đã sử dụng hết mức độ của mình tự do. Ngoài ra, khi một mô hình có R2 lớn hơn mô hình khác, tôi không thể tìm ra cách so sánh xem sự khác biệt có đáng kể hay không. Ngoài ra, thực hiện hồi quy theo cách thông thường cho phép truy cập vào một loạt các thử nghiệm cho các giả định hồi quy là vô giá. Để có câu trả lời chi tiết hơn về vấn đề này, hãy xem câu hỏi khác của tôi đã được @StasK trả lời độc đáo .

Vì vậy, kết luận dường như là dung nham là một gói hợp lý cho FIML trong R, tuy nhiên việc sử dụng FIML phụ thuộc vào các giả định thống kê và loại phân tích mà người ta đang tiến hành. Theo như hồi quy (không có mô hình biến tiềm ẩn), việc loại bỏ nó khỏi các chương trình SEM và sử dụng nhiều thuật ngữ có lẽ là một bước đi khôn ngoan.


1

Liên quan đến câu hỏi về FIML của bạn, tôi nghĩ rằng tôi sẽ chia sẻ bài viết tuyệt vời về SAS này của Paul Allison http://www.statistichorizons.com/wp-content/uploads/MissingDataByML.pdf

Với các ý kiến ​​được đưa ra bởi Paul Allison, người ta có thể dễ dàng thực hiện quy trình tương tự trong R bằng cách sử dụng lme hoặc nlmer.


-3

Có 2 cách chính để xử lý dữ liệu / hồ sơ bị thiếu. Bạn có thể xóa toàn bộ hàng quan sát có giá trị bị thiếu hoặc bạn tìm cách tạo giá trị thiếu này. Nếu bạn thực hiện phương pháp đầu tiên, thì bạn có thể sẽ mất rất nhiều dữ liệu. Trong cách tiếp cận thứ hai, bạn phải tìm một cách "thông minh" để tạo dữ liệu bị thiếu này, theo cách mà các ước tính tham số của tập dữ liệu mới, không khác nhiều so với ước tính của tham số của tập dữ liệu được quan sát.

Cách tiếp cận thứ hai này được gọi là Nhập dữ liệu và có một số gói R thực hiện điều đó. Một trong số chúng được gọi là mclust và hàm bạn cần được gọi là imputeData. Hàm này sử dụng thuật toán EM (tối đa hóa kỳ vọng) để ước tính các tham số của phần không quan sát được của tập dữ liệu, được đưa ra phần quan sát. Khi các tham số được tìm thấy, điểm dữ liệu mới được tạo. Giả định phân phối của dữ liệu bị thiếu, dữ liệu được quan sát và toàn bộ tập dữ liệu được giả sử là Gaussian.

Hy vọng lời giải thích này sẽ giúp bạn đạt được những gì bạn đang cố gắng làm


Cảm ơn. Tôi biết các gói cho nhiều lần cắt bỏ, nhưng muốn xem liệu có một cách tương đối đơn giản để thực hiện ước tính khả năng tối đa.
Sootica

Hàm khả năng không được xác định khi mẫu, x, bị thiếu. VÌ tôi nghĩ bạn có thể đang tìm kiếm thứ gì đó không tồn tại.
Lalas

2
Xem bài viết này để được giải thích về việc sử dụng các phương pháp tiếp cận khả năng tối đa đối với dữ liệu bị thiếu ( Allison, 2012 ). Những gì OP mô tả tồn tại.
Andy W

2
Và đây là một cái gì đó từ SAS về nó. support.sas.com/documentation/cdl/en/statug/63347/HTML/default/ cường Tôi chưa bao giờ thấy bất cứ điều gì trong R.
Jeremy Miles

Cảm ơn @JeremyMiles, tôi vừa đăng những gì đã giúp tôi trả lời câu hỏi này, nghĩ rằng những người khác cũng có thể thấy nó hữu ích. Tái bút Cuốn sách R mà bạn đã viết với Andy Field thật tuyệt vời !! : D
Sootica
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.