використання інформації про сусідів для введення даних або пошуку даних (у R)


13

У мене є набір даних з припущенням, що найближчі сусіди є найкращими прогнозами. Просто прекрасний приклад двостороннього візуалізації градієнта-

введіть тут опис зображення

Припустимо, у нас є випадок, коли мало значень не вистачає, ми можемо легко передбачити, виходячи з сусідів та тенденції.

введіть тут опис зображення

Відповідна матриця даних у R (макетний приклад для тренування):

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

Примітки: (1) Властивість відсутніх значень вважається випадковою , вона може відбуватися де завгодно.

(2) Усі точки даних є з однієї змінної, але на їх значення, як передбачається, впливають neighborsсусідні до них рядки та стовпці. Тому позиція в матриці важлива і може розглядатися як інша змінна.

Я сподіваюся, що в деяких ситуаціях я можу передбачити деякі недооцінені значення (можуть бути помилки) та виправити упередження (лише приклад, давайте може генерувати таку помилку в фіктивних даних):

> 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

Наведені вище приклади є лише ілюстрацією (можна відповісти візуально), але реальний приклад може бути більш заплутаним. Я дивлюсь, чи є надійний метод зробити такий аналіз. Я думаю, що це має бути можливим. Який був би підходящий метод для проведення цього типу аналізу? будь-які пропозиції програми R / пакет для проведення такого типу аналізу?

введіть тут опис зображення


Чи можете ви припустити, що відсутні дані є MAR (у термінології Рубіна (1976))?
user603

так, значення можна вважати такими, що відсутні як випадково (MAR). Перегляньте мої останні зміни.
rdorlearn

Відповіді:


7

Питання задає способи використання найближчих сусідів в міцному спосіб виявлення і виправлення локальних викидів. Чому б не зробити саме цього?

Процедура полягає в обчисленні надійної локальної гладкої, оцінці залишків і виключенні зависоких величин. Це задовольняє всі вимоги безпосередньо та є досить гнучким, щоб підлаштовуватися під різні програми, оскільки можна змінювати розмір місцевого мікрорайону та поріг для визначення оточуючих людей.

(Чому гнучкість настільки важлива? Оскільки будь-яка така процедура є хорошим шансом визначити певну локалізовану поведінку як "стороння". Як така, всі такі процедури можна вважати більш плавними . Вони усунуть деяку деталь разом із очевидними вибухами. Аналітик потребує певного контролю над компромісом між збереженням деталей та неможливістю виявити місцевих людей, які втратили прибуток.)

Ще одна перевага цієї процедури полягає в тому, що вона не потребує прямокутної матриці значень. Насправді це може бути застосовано навіть до неправильних даних, використовуючи місцеві плавніші, придатні для таких даних.

Rloess794940005%1/20

Цифри

Зауважте, що (згідно з Rумовами) рядки матриць малюються у вигляді вертикальних смуг. Усі зображення, за винятком залишків, заштриховані, щоб відобразити невеликі зміни у їхніх значеннях. Без цього майже всі місцеві люди не були б невидимими!

(0,79)(49,30)

Плями в сюжеті "Залишків" показують очевидні ізольовані місцеві люди. Цей графік також відображає іншу структуру (таку, як діагональна смуга), що можна віднести до базових даних. Можна вдосконалити цю процедуру, використовуючи просторову модель даних ( за допомогою геостатистичних методів), але описавши це та проілюструвавши це, ми завели би тут далеко.

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: Чи правильно я розумію, що ви припускаєте, що люди, що переживають люди, є ізольованими клітинами? Якщо так, чи знаєте ви, наскільки чутливим є такий підхід до порушення цього припущення?
user603

@ user603 Я не вважаю, що люди, що переживають люди, є ізольованими - багато з них у прикладі не є, - але я вважаю, що частка людей, що перебувають у будь-якому місцевому районі, є досить низькою, щоб вони не зруйнували місцеві плавніші. Можливо, якщо є сусідство з дуже великою часткою таких людей, вони більше не можуть вважатися місцевими людьми!
whuber

1
@ user603 Абсолютно! Але це, здається, виводить нас із тієї припустимої ситуації, коли "найближчі сусіди - найкращі прогнози". Зважаючи на це, все, що ми робимо при обробці даних, повинно зберігати цю локальну передбачуваність. Якщо один стовпець має "значно інший масштаб", ніж його сусід, ця обставина порушить це висловлене припущення досить сильно. (Я також цікавлюсь вашою увагою до стовпців: перечитавши питання, я не можу виявити жодної асиметрії в ролях стовпців і рядків.)
whuber

1
p

1
@whuber, це чудове рішення, дякую - я намагався ввести принаймні деякі пропущені значення, що завжди є реальною ситуацією - суміш пропущених (наприклад, 50 пропущених значень) та залишків (100 осіб, що відпадають). захоплююче!
rdorlearn

4

Я б порадив вам ознайомитися з цією статтею [0]. Проблема, яку він хоче вирішити, здається, добре відповідає вашому опису, за винятком того, що метод, запропонований автором, є дещо більш досконалим, ніж NN-введення (хоча він використовує щось подібне як вихідний пункт).

XXnp

k

Перший крок кожної ітерації - це етап внесення даних. Це робиться так, як в алгоритмі ЕМ: відсутні клітинки заповнюються значенням, яке, як очікується, мають (це E-крок).

XXttRppkLLkkDDkp

Узагальнивши документ, ось загальний алгоритм, який вони пропонують:

  • l=0WW0XX

  • Потім зробіть до конвергенції:

    WWl(ttl,LLl,DDl)

    l=l+1

    YYl=LLl1(WWl1ttl1)(LLl1)

    WWlWWlN(ttl1,LLl1DDl1(LLl1))YYl

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

(ttl1,LLl1DDl1)

N(ttl1,LLDD(LL))

Я не знаю про готову реалізацію R для цього підходу, але її можна легко отримати з підкомпонентів (головним чином, надійного алгоритму PCA), і вони добре реалізовані в R, дивіться пакет rrcov (папір тиха інформативність з цього приводу).

  • [0] Serneels S. and Verdonck, T. (2008). Аналіз основних компонентів для даних, що містять залишкові та відсутні елементи. Обчислювальна статистика та аналіз даних том: 52 випуск: 3 сторінки: 1712-1727.

дякую, моя мета тут полягає не в тому, щоб передбачити випускників (в сенсі вони далеко від розповсюдження), а не значень (outliers), що не відповідають схемі.
rdorlearn

Я думаю, ти неправильно зрозумів мою відповідь. Такий підхід дасть прогноз на будь-яку цінність, але очікується, що вони не будуть прогнозуватися дуже добре: це тому, що їм заборонено впливати на пристосування PCA. Раджу прочитати статтю.
user603

спасибі, підхід здається цікавим, і гадаю, може бути і добре. Але без належних кодів буде складно реалізувати - принаймні занадто складний для мене!
rdorlearn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.