2015-09-25 2 views
0

У меня есть некоторые данные, которые включают переменную success/fail для многих разных местоположений с координатами X-Y (целые числа между примерно 0 и 80 для обоих). Я хочу моделировать ожидаемую вероятность в любом конкретном месте. Я могу сделать это довольно легко, используя plyr:R: среднее по группе всех ближайших точек по координатам x и y

sucProp <- ddply(df, .(xcrd,ycrd), function(x) data.frame(obs=nrow(x),prop=mean(x$success))) 

Это дает мне долю успехов в каждой координате. Поскольку показатель успеха в какой-то момент должен быть похож на тот, что в соседних точках мне было интересно, как я могу лучше всего усвоить средние успехи всех точек в пределах say + -5 как в направлении X, так и Y.

Таким образом, точка (25,50) будет принимать среднее значение всех наблюдений в пределах (20-30,45-55).

Каков наилучший способ для этого? Могу ли я ввести это прямо в переменные в ddply или мне нужно разработать какой-то скользящий индекс?

+0

Примером здесь может быть действительно полезно. У меня есть идеи, но я предпочитаю делать свои ошибки или успехи, ударив головой о твердую стену данных. –

ответ

0

Вам нужно было бы сделать скользящее среднее. Вот один из способов сделать это с помощью sapply:

data.frame(
    x = rnorm(10, 40, 5), 
    y = rnorm(10, 50, 7), 
    success = rbinom(10, 1, .4)) -> ff 

newmean <- function(q) { 
    ff[q,"x"] + 5 -> a 
    ff[q,"x"] - 5 -> b 
    ff[q,"y"] + 5 -> c 
    ff[q,"y"] - 5 -> d 
    ff[ff$x < a & ff$x >b & ff$y < c & ff$y > d, "success"] -> k 
    mean(k) 
} 

sapply(X = 1:nrow(ff), newmean) -> ff$neighborhood_prob 
Смежные вопросы