sử dụng thông tin hàng xóm trong việc nhập dữ liệu hoặc tìm dữ liệu ngoài (trong R)


13

Tôi có dữ liệu với giả định rằng hàng xóm gần nhất là những người dự đoán tốt nhất. Chỉ là một ví dụ hoàn hảo về độ dốc hai chiều được trực quan hóa-

nhập mô tả hình ảnh ở đây

Giả sử chúng ta có trường hợp thiếu vài giá trị, chúng ta có thể dễ dàng dự đoán dựa trên hàng xóm và xu hướng.

nhập mô tả hình ảnh ở đây

Ma trận dữ liệu tương ứng trong R (ví dụ giả cho tập luyện):

miss.mat <- matrix (c(5:11, 6:10, NA,12, 7:13, 8:14, 9:12, NA, 14:15, 10:16),ncol=7, byrow = TRUE)
miss.mat 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    5    6    7    8    9   10   11
[2,]    6    7    8    9   10   NA   12
[3,]    7    8    9   10   11   12   13
[4,]    8    9   10   11   12   13   14
[5,]    9   10   11   12   NA   14   15
[6,]   10   11   12   13   14   15   16

Lưu ý: (1) Thuộc tính của các giá trị bị thiếu được coi là ngẫu nhiên , nó có thể xảy ra ở bất cứ đâu.

(2) Tất cả các điểm dữ liệu là từ một biến duy nhất, nhưng giá trị của chúng được giả định là bị ảnh hưởng bởi neighborshàng và cột liền kề với chúng. Vì vậy, vị trí trong ma trận là quan trọng và có thể được coi là biến khác.

Hy vọng của tôi trong một số tình huống tôi có thể dự đoán một số giá trị tắt (có thể là sai lầm) và sai lệch chính xác (chỉ là ví dụ, cho phép tạo ra lỗi như vậy trong dữ liệu giả):

> mat2 <- matrix (c(4:10, 5, 16, 7, 11, 9:11, 6:12, 7:13, 8:14, 9:13, 4,15, 10:11, 2, 13:16),ncol=7, byrow = TRUE)
> mat2

    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    4    5    6    7    8    9   10
[2,]    5   16    7   11    9   10   11
[3,]    6    7    8    9   10   11   12
[4,]    7    8    9   10   11   12   13
[5,]    8    9   10   11   12   13   14
[6,]    9   10   11   12   13    4   15
[7,]   10   11    2   13   14   15   16

Các ví dụ trên chỉ là minh họa (có thể được trả lời trực quan) nhưng ví dụ thực tế có thể khó hiểu hơn. Tôi đang tìm kiếm nếu có phương pháp mạnh mẽ để làm phân tích như vậy. Tôi nghĩ rằng điều này nên có thể. Điều gì sẽ là phương pháp phù hợp để thực hiện loại phân tích này? bất kỳ đề xuất chương trình / gói R để làm loại phân tích này?

nhập mô tả hình ảnh ở đây


Bạn có thể cho rằng dữ liệu còn thiếu là MAR (theo thuật ngữ của Rubin (1976)) không?
user603

có, các giá trị có thể được coi là mất tích ngẫu nhiên (MAR). Xem các chỉnh sửa gần đây của tôi.
ndorlearn

Câu trả lời:


7

Câu hỏi yêu cầu các cách sử dụng hàng xóm gần nhất một cách mạnh mẽ để xác định và sửa các ngoại lệ cục bộ. Tại sao không làm chính xác điều đó?

Quy trình này là để tính toán độ mịn cục bộ mạnh mẽ, đánh giá phần dư và bỏ ra bất kỳ giá trị nào quá lớn. Điều này đáp ứng tất cả các yêu cầu trực tiếp và đủ linh hoạt để điều chỉnh các ứng dụng khác nhau, bởi vì người ta có thể thay đổi kích thước của vùng lân cận cục bộ và ngưỡng để xác định các ngoại lệ.

(Tại sao tính linh hoạt lại quan trọng đến vậy? Bởi vì bất kỳ quy trình nào như vậy đều có cơ hội tốt để xác định một số hành vi cục bộ nhất định là "ngoại vi". Như vậy, tất cả các quy trình như vậy có thể được coi là làm mịn . Họ sẽ loại bỏ một số chi tiết cùng với các ngoại lệ rõ ràng. cần một số kiểm soát đối với sự đánh đổi giữa việc giữ lại chi tiết và không phát hiện ra các ngoại lệ cục bộ.)

Một ưu điểm khác của thủ tục này là nó không yêu cầu ma trận giá trị hình chữ nhật. Trong thực tế, nó thậm chí có thể được áp dụng cho dữ liệu không thường xuyên bằng cách sử dụng một địa phương mượt mà phù hợp với dữ liệu đó.

Rloess794940005%1/20

Số liệu

Lưu ý rằng (theo Rquy ước), các hàng ma trận được vẽ dưới dạng các dải dọc. Tất cả các hình ảnh, ngoại trừ phần dư, được che mờ để giúp hiển thị các biến thể nhỏ trong giá trị của chúng. Không có điều này, gần như tất cả các ngoại lệ địa phương sẽ là vô hình!

(0,79)(49,30)

Các đốm trong âm mưu "Residuals" cho thấy các ngoại lệ cục bộ bị cô lập rõ ràng. Biểu đồ này cũng hiển thị cấu trúc khác (chẳng hạn như đường chéo đó) do dữ liệu cơ bản. Người ta có thể cải thiện quy trình này bằng cách sử dụng mô hình không gian của dữ liệu ( thông qua các phương pháp địa lý), nhưng mô tả điều đó và minh họa nó sẽ đưa chúng ta đi quá xa ở đây.

1022003600

#
# Create data.
#
set.seed(17)
rows <- 2:80; cols <- 2:50
y <- outer(rows, cols, 
           function(x,y) 100 * exp((abs(x-y)/50)^(0.9)) * sin(x/10) * cos(y/20))
y.real <- y
#
# Contaminate with iid noise.
#
n.out <- 200
cat(round(100 * n.out / (length(rows)*length(cols)), 2), "% errors\n", sep="")
i.out <- sample.int(length(rows)*length(cols), n.out)
y[i.out] <- y[i.out] + rnorm(n.out, sd=0.05 * sd(y))
#
# Process the data into a data frame for loess.
#
d <- expand.grid(i=1:length(rows), j=1:length(cols))
d$y <- as.vector(y)
#
# Compute the robust local smooth.
# (Adjusting `span` changes the neighborhood size.)
#
fit <- with(d, loess(y ~ i + j, span=min(1/2, 125/(length(rows)*length(cols)))))
#
# Display what happened.
#
require(raster)
show <- function(y, nrows, ncols, hillshade=TRUE, ...) {
  x <- raster(y, xmn=0, xmx=ncols, ymn=0, ymx=nrows)
  crs(x) <- "+proj=lcc +ellps=WGS84"
  if (hillshade) {
    slope <- terrain(x, opt='slope')
    aspect <- terrain(x, opt='aspect')
    hill <- hillShade(slope, aspect, 10, 60)
    plot(hill, col=grey(0:100/100), legend=FALSE, ...)
    alpha <- 0.5; add <- TRUE
  } else {
    alpha <- 1; add <- FALSE
  }
  plot(x, col=rainbow(127, alpha=alpha), add=add, ...)
}

par(mfrow=c(1,4))
show(y, length(rows), length(cols), main="Data")

y.res <- matrix(residuals(fit), nrow=length(rows))
show(y.res, length(rows), length(cols), hillshade=FALSE, main="Residuals")
#hist(y.res, main="Histogram of Residuals", ylab="", xlab="Value")

# Increase the `8` to find fewer local outliers; decrease it to find more.
sigma <- 8 * diff(quantile(y.res, c(1/4, 3/4)))
mu <- median(y.res)
outlier <- abs(y.res - mu) > sigma
cat(sum(outlier), "outliers found.\n")

# Fix up the data (impute the values at the outlying locations).
y.imp <- matrix(predict(fit), nrow=length(rows))
y.imp[outlier] <- y[outlier] - y.res[outlier]

show(y.imp, length(rows), length(cols), main="Imputed")
show(y.real, length(rows), length(cols), main="Real")

whuber: Tôi có hiểu chính xác rằng bạn cho rằng các ngoại lệ là các ô bị cô lập không? Nếu vậy, bạn có biết cách tiếp cận vi phạm giả định này nhạy cảm như thế nào không?
user603

@ user603 Tôi không cho rằng các ngoại lệ bị cô lập - nhiều trong số chúng trong ví dụ là không - nhưng tôi cho rằng tỷ lệ các ngoại lệ trong bất kỳ vùng lân cận địa phương nào đủ thấp để chúng không phá vỡ địa phương mượt mà hơn. Có thể cho rằng, nếu có bất kỳ khu phố nào có tỷ lệ ngoại lệ rất lớn như vậy, họ không còn có thể được coi là ngoại lệ địa phương!
whuber

1
@ user603 Tuyệt đối! Nhưng điều đó dường như đưa chúng ta ra khỏi tình huống được cho là "người hàng xóm gần nhất là người dự đoán tốt nhất". Vì tôn trọng điều đó, bất cứ điều gì chúng tôi làm khi xử lý dữ liệu nên giữ nguyên khả năng dự đoán cục bộ này. Nếu một cột có "quy mô khác biệt lớn" so với hàng xóm của nó, thì tình huống đó sẽ vi phạm giả định đã nêu này khá mạnh mẽ. (Tôi cũng tự hỏi sự tập trung của bạn vào các cột: khi đọc lại câu hỏi, tôi không thể phát hiện bất kỳ sự bất cân xứng nào trong vai trò của các cột và hàng.)
whuber

1
p

1
@whuber đây là giải pháp tuyệt vời, cảm ơn - Tôi đã cố gắng giới thiệu ít nhất một số giá trị bị thiếu, luôn luôn là tình huống thực tế - một sự pha trộn của thiếu (ví dụ 50 giá trị bị thiếu) và ngoại lệ (100 ngoại lệ). thú vị !
ndorlearn

4

Tôi sẽ tư vấn cho bạn để có một cái nhìn tại đây bài viết [0]. Vấn đề mà nó có ý định giải quyết có vẻ phù hợp với mô tả của bạn khá tốt, ngoại trừ phương pháp mà tác giả đề xuất hơi tinh tế hơn so với đầu vào NN (mặc dù nó sử dụng một cái gì đó tương tự như điểm bắt đầu).

XXnp

k

Bước đầu tiên của mỗi lần lặp là bước cắt dữ liệu. Điều này được thực hiện như trong thuật toán EM: các ô bị thiếu được điền bởi giá trị mà chúng dự kiến ​​sẽ có (đây là bước E).

XXttRppkLLkkDDkp

Để tóm tắt bài báo, đây là thuật toán chung mà họ đề xuất:

  • tôi= =0WW0XX

  • Sau đó, làm cho đến khi hội tụ:

    WWtôi(tttôi,LLtôi,DDtôi)

    tôi= =tôi+1

    YYtôi= =LLtôi-1(WWtôi-1-tttôi-1)(LLtôi-1)'

    WWtôiWWtôi~N(tttôi-1,LLtôi-1DDtôi-1(LLtôi-1)')YYtôi

||WWtôi-1-WWtôi||F(tt,LL,DD)

(tttôi-1,LLtôi-1DDtôi-1)

N(tttôi-1,LLDD(LL)')

Tôi không biết về triển khai R đã sẵn sàng cho cách tiếp cận này, nhưng người ta có thể dễ dàng tạo ra từ các thành phần phụ (chủ yếu là thuật toán PCA mạnh mẽ) và chúng được triển khai tốt trong R, xem gói rrcov (bài báo là thông tin yên tĩnh về chủ đề này).

  • [0] Serneels S. và Verdonck, T. (2008). Phân tích thành phần chính cho dữ liệu chứa các ngoại lệ và các phần tử bị thiếu. Thống kê tính toán & Phân tích dữ liệu vol: 52 số: 3 trang: 1712-1727.

cảm ơn, mục tiêu của tôi ở đây không phải là dự đoán các ngoại lệ (theo nghĩa là chúng cách xa phân phối) mà là các giá trị ngoài (các ngoại lệ) không phù hợp với mẫu.
ndorlearn

Tôi nghĩ rằng bạn đã hiểu nhầm câu trả lời của tôi. Cách tiếp cận này sẽ tạo ra dự đoán cho bất kỳ giá trị nào, nhưng các ngoại lệ sẽ không được dự đoán tốt: điều này là do chúng không được phép ảnh hưởng đến sự phù hợp của PCA. Tôi khuyên bạn nên đọc bài báo.
user603

cảm ơn, cách tiếp cận có vẻ thú vị và đoán cũng có thể hoạt động tốt. Nhưng nếu không có mã phù hợp sẽ khó thực hiện - ít nhất là quá phức tạp đối với tôi!
ndorlearn
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.