verileri etkileyen veya kapalı verileri bulmak için komşu bilgileri kullanma (R'de)


13

En yakın komşuların en iyi yordayıcılar olduğu varsayımıyla veri kümem var. Görselleştirilmiş iki yönlü eğimin mükemmel bir örneği

resim açıklamasını buraya girin

Birkaç değerin eksik olduğu bir vakamız olduğunu varsayalım, komşulara ve eğilime göre kolayca tahmin edebiliriz.

resim açıklamasını buraya girin

R'de karşılık gelen veri matrisi (egzersiz için kukla örnek):

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

Notlar: (1) Eksik değerlerin özelliğinin rastgele olduğu varsayılır , her yerde olabilir.

(2) Tüm veri noktaları tek değişkenlidir, ancak değerlerinin kendilerine neighborsbitişik satır ve sütundan etkilendiği varsayılmaktadır . Bu nedenle matristeki konum önemlidir ve diğer değişken olarak kabul edilebilir.

Umudum bazı durumlarda bazı off-değerleri tahmin edebilir (hatalar olabilir) ve önyargıları düzeltebilirim (sadece örnek, kukla verilerde böyle bir hata oluşturmanızı sağlar):

> 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

Yukarıdaki örnekler sadece açıklama amaçlıdır (görsel olarak cevaplanabilir), ancak gerçek örnek daha kafa karıştırıcı olabilir. Böyle bir analiz yapmak için sağlam bir yöntem olup olmadığına bakıyorum. Bence bu mümkün olmalı. Bu tür bir analizi gerçekleştirmek için uygun yöntem ne olabilir? herhangi bir R programı / paket bu tür analiz yapmak için öneriler?

resim açıklamasını buraya girin


Eksik verinin MAR olduğunu varsayabilir misiniz (Rubin terminolojisinde (1976))?
user603

evet, değerlerin rastgele (MAR) eksik olduğu varsayılabilir. Son düzenlemelerime bakın.
rdorlearn

Yanıtlar:


7

Soru, en yakın komşuları , yerelleştirilmiş aykırı değerleri tanımlamak ve düzeltmek için sağlam bir şekilde kullanma yollarını soruyor . Neden tam olarak bunu yapmıyorsunuz?

Prosedür, sağlam bir yerel pürüzsüz hesaplamak, kalıntıları değerlendirmek ve çok büyük olanları sıfırlamaktır. Bu, tüm gereksinimleri doğrudan karşılar ve farklı uygulamalara uyum sağlayacak kadar esnektir, çünkü biri yerel mahallenin boyutunu ve aykırı değerleri tanımlamak için eşiği değiştirebilir.

(Esneklik neden bu kadar önemlidir? Çünkü böyle bir prosedür belirli lokal davranışları "dış" olarak tanımlamak için iyi bir şanstır. Bu nedenle, bu tür tüm prosedürler daha düzleştirici olarak kabul edilebilir . tutma ayrıntısı ile yerel aykırı değerlerin algılanamaması arasındaki denge üzerinde biraz kontrole ihtiyaç duyar.)

Bu prosedürün bir başka avantajı, dikdörtgen bir değer matrisi gerektirmemesidir. Aslında, bu tür veriler için uygun bir yerel pürüzsüz kullanarak düzensiz verilere bile uygulanabilir .

Rloess794940005%1/20

Rakamlar

( RKurallara göre) matris satırlarının dikey şeritler olarak çizildiğine dikkat edin. Kalanlar hariç tüm görüntüler, değerlerinde küçük farklılıklar gösterilmesine yardımcı olmak için tepe şeklinde düzenlenmiştir. Bu olmadan, neredeyse tüm yerel aykırılıklar görünmez olurdu!

(0,79)(49,30)

"Artıklar" grafiğindeki benekler belirgin izole yerel aykırı değerleri göstermektedir. Bu grafik ayrıca temel verilere atfedilebilecek diğer yapıları (diyagonal şerit gibi) de gösterir. Bu prosedür üzerinde, uzamsal bir veri modeli ( jeoistatistiksel yöntemler aracılığıyla ) kullanılarak, ancak bunu açıklamak ve bunu göstermek bizi burada çok uzağa götürecek şekilde geliştirilebilir.

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: Aykırı değerlerin izole hücreler olduğunu varsaydığınızı doğru anladım mı? Eğer öyleyse, bu varsayımın ihlaline bu yaklaşımın ne kadar hassas olduğunu biliyor musunuz?
user603

@ user603 Aykırı değerlerin izole edildiğini varsaymıyorum - örnekte birçoğu değil - ancak herhangi bir yerel mahalledeki aykırı değerlerin yerel düzgünlüğü bozmayacak kadar düşük olduğunu varsayıyorum. Muhtemelen, bu tür aykırılıkların çok büyük bir oranına sahip herhangi bir mahalle varsa, artık yerel aykırılıklar olarak kabul edilemezler!
whuber

1
@ user603 Kesinlikle! Ama bu bizi "en yakın komşuların en iyi yordayıcıları" olduğu varsayımsal durumdan çıkarıyor gibi görünüyor. Buna saygı duymadan, verileri işlerken yaptığımız her şey bu yerel öngörülebilirliği korumalıdır. Bir sütunun komşusundan "çok farklı bir ölçeği" varsa, bu durum belirtilen bu varsayımı oldukça güçlü bir şekilde ihlal eder. (Ayrıca sütunlara odaklandığınızı da merak ediyorum: soruyu tekrar okuduktan sonra, sütunların ve satırların rollerinde herhangi bir asimetri tespit edemiyorum.)
whuber

1
p

1
@whuber bu harika bir çözüm, teşekkürler - Her zaman gerçek durum olan en azından bazı eksik değerleri tanıtmaya çalışıyordum - eksik (örneğin 50 eksik değer) ve aykırı değerlerin (100 aykırı değer) karışımı. heyecan verici !
rdorlearn

4

Bu makaleye bir göz atmanızı tavsiye ederim [0]. Yazarın önerdiği yöntemin NN-inputation'dan biraz daha rafine edilmesi dışında (başlangıç ​​noktası gibi bir şey kullansa da) ele almayı düşündüğü sorun sizin açıklamanıza çok uygun görünüyor.

XXnp

k

Her yinelemenin ilk adımı veri ithalatı adımıdır. Bu EM algoritmasında olduğu gibi yapılır: eksik hücreler olması beklenen değerle doldurulur (bu E-adımıdır).

İki aşamalı yinelemeli prosedürün ikinci bölümünde, önceki adımdan elde edilen arttırılmış verilere (sağlam) bir PCA yerleştirilir. Bu spektral ayrışmasına neden olurXXttRppkLLkkDDkp

Makaleyi özetlemek için, önerdikleri genel algoritma şöyledir:

  • l=0WW0XX

  • Sonra yakınsama kadar yapın:

    a. sağlam PCA yapınWWl(ttl,LLl,DDl)

    l=l+1

    YYl=LLl1(WWl1ttl1)(LLl1)

    d. eksik unsurlarını doldurunWWlWWlN(ttl1,LLl1DDl1(LLl1))YYl

||WWl1WWl||F(tt,LL,DD)

(ttl1,LLl1DDl1)

N(ttl1,LLDD(LL))

Bu yaklaşım için hazır bir R uygulaması bilmiyorum, ancak alt bileşenlerden (esas olarak sağlam bir PCA algoritması) kolayca üretilebilir ve bunlar R'de iyi uygulanır, rrcov paketine bakın (kağıt bu konuda sessiz bilgilendirici).

  • [0] Serneels S. ve Verdonck, T. (2008). Aykırı değerler ve eksik elemanlar içeren veriler için temel bileşen analizi. Hesaplamalı İstatistik ve Veri Analizi cilt: 52 sayı: 3 sayfa: 1712-1727.

teşekkürler, amacım burada aykırı değerleri tahmin etmemek (yani dağıtımdan uzaktır) değil, desene uymayan off-değerleri (aykırtıcılar) tahmin etmektir.
rdorlearn

Sanırım cevabımı yanlış anladın. Bu yaklaşım herhangi bir değer için tahmin üretecektir, ancak aykırı değerler çok iyi tahmin edilmeyecektir: bunun nedeni PCA uyumunu etkilemelerine izin verilmemesidir. Makaleyi okumanızı tavsiye ederim.
user603

teşekkürler, yaklaşım ilginç görünüyor ve tahmin de işe yarayabilir. Ancak uygun kodlar olmadan uygulanması zor olacaktır - en azından benim için çok karmaşık!
rdorlearn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.