Мне нужна матрица с коэффициентами корреляции, которые больше 0,2. Я придумал следующее решение.cor() с отсутствующими значениями
mts.data <- ts(data.frame(a=arima.sim(model=list(1,0,0), n=10),
b=arima.sim(model=list(1,0,1), n=10), c=arima.sim(model=list(1,0,0),
n=10), d=arima.sim(model=list(1,0,2), n=10),
e=arima.sim(model=list(2,0,1), n=10)), start=c(2007,1), frequency=12)
critcor <- function(x) {
crit.mat <- matrix(0, nrow=ncol(x), ncol=ncol(x))
for(j in 1:ncol(x)) {
for(i in 1:ncol(x)) {
if(abs(cor(x[,i], x[,j])) > 0.2) {
crit.mat[i,j] <- cor(x[,i], x[,j])
}
}
}
return(crit.mat)
}
Это прекрасно работает. К сожалению, мой набор данных содержит отсутствующие значения.
mts.data[1:3, 4] <- NA
mts.data[9:10, 5] <- NA
Когда я запускаю свою функцию, у меня есть ошибка.
critcor(mts.data)
# Error in if (abs(cor(x[, i], x[, j])) > 0.2) { :
# missing value where TRUE/FALSE needed
Я просматриваю Интернет в течение нескольких часов, и у меня нет абсолютно никакой идеи, как я могу это исправить. Если корреляция невозможна из-за недостающих значений, я хочу, чтобы моя функция просто напечатала 0.
См. Аргумент 'use' функции' cor'. Вы должны использовать либо 'complete.obs', либо' pairwise.complete.obs' (возможно, последний). –
Действительно .. (как @mts) также (через '' p "') ниже. @nelakell: Это поможет вам привыкнуть читать страницы справки R, в данном случае '' cor'. Он прямо сказал бы вам, что пропущенные значения могут быть обработаны очень хорошо. –
спасибо @ MartinMächler. Это хороший совет. Я был так в решении проблемы моей функции, что я не думал об этом в первую очередь. – nelakell