Матрица зависимостей - PullRequest
       13

Матрица зависимостей

0 голосов
/ 10 марта 2012

Мне нужно построить матрицу зависимостей со всеми 91 переменной моего набора данных.

Я пытался использовать некоторые коды, но мне это не удалось.

Здесь вы являетесь частью важных кодов:

p<- length(dati)
chisquare <- matrix(dati, nrow=(p-1), ncol=p)

Он должен создать квадратную матрицу со всеми переменными

system.time({for(i in 1:p){
    for(j in 1:p){
        a <- dati[, rn[i+1]]
        b <- dati[, cn[j]]
        chisquare[i, (1:(p-1))] <- chisq.test(dati[,i], dati[, i+1])$statistic
        chisquare[i, p] <- chisq.test(dati[,i], dati, i+1])$p.value
    }}
})

Это должно относиться к "p«переменные, чтобы проанализировать, зависят ли они друг от друга

Error in `[.data.frame`(dati, , rn[i + 1]) : 
  not defined columns selected

Moreover: There are 50 and more alerts (use warnings() to read the first 50)

Timing stopped at: 32.23 0.11 32.69 

warnings() #let's check
>: In chisq.test(dati[, i], dati[, i + 1]) :
  Chi-squared approximation may be incorrect

chisquare # все ячейки (если только в последнем столбце, который, кажется, имеет p-значения), имеют одинаковые значения по строке

Я также попробовал другой способ, который мне предоставил кто-то, кто знает, как управлять R намного лучше меня:

#strange values I have in some columns
sum(dati == 'x')

#replacing "x" by x
x <- dati[dati=='x']

#distribution of answers for each question
answers <- t(sapply(1:ncol(dati), function(i) table(factor(dati[, i], levels = -2:9), useNA = 'always')))

rownames(answers) <- colnames(dati)
answers
#correlation for the pairs

I<- diag(ncol(dati)) 
#empty diagonal matrix

colnames(I) <- rownames(I) <- colnames(dati)
rn <- rownames(I)
cn <- colnames(I)

#loop
system.time({
    for(i in 1:ncol(dati)){
        for(j in 1:ncol(spain)){
            a <- dati[, rn[i]]
            b <- dati[, cn[j]]
            r <- chisq.test(a,b)$statistic
            r <- chisq.test(a,b)$p.value
            I[i, j] <- r
        }
     }
})

 user  system elapsed 
  29.61    0.09   30.70 

There are 50 and more alerts (use warnings() to read the first 50)

warnings() #let's check
-> : In chisq.test(a, b) : Chi-squared approximation may be incorrect

diag(I)<- 1

#result
head(I)

Столбцы останавливаются на 5-й переменной, тогда как Мне нужно проверить зависимость между всеми переменными.Каждый.

Я не понимаю, где я не прав, но я надеюсь, что я не так далеко ...

Я надеюсь получить хорошийпомогите, пожалуйста.

1 Ответ

1 голос
/ 11 марта 2012

Вы, очевидно, пытаетесь вычислить p-значение критерия хи-квадрат для всех пар переменных в вашем наборе данных.Это можно сделать следующим образом.

# Sample data
n <- 1000
k <- 10
d <- matrix(sample(LETTERS[1:5], n*k, replace=TRUE), nc=k)
d <- as.data.frame(d)
names(d) <- letters[1:k]

# Compute the p-values
k <- ncol(d)
result <- matrix(1, nr=k, nc=k)
rownames(result) <- colnames(result) <- names(d)
for(i in 1:k) {
  for(j in 1:k) {
      result[i,j] <- chisq.test( d[,i], d[,j] )$p.value
  }
}

Кроме того, возможно, что-то не так с вашими данными, что приводит к полученным вами предупреждениям, но мы ничего не знаем об этом.

В вашем коде слишком много проблем, чтобы я попытался перечислить их (вы начинаете пытаться создать квадратную матрицу с другим количеством строк и столбцов, и тогда я полностью теряюсь).

...