mshapiro.test 'Ошибка в solve.default(R %*% t(R), tol = 1e-18): подпрограмма Лапака dgesv: система в точности единственная: U[7,7] = 0'

Я пытаюсь провести многомерный тест нормальности, используя пакет mvnormtest для моих данных с двумя переменными между субъектами, одной внутри-субъектной и тремя зависимыми переменными (двоичная категориальная). Мои данные выглядят так (~5600 строк без отсутствующих данных):

Cluster Group   Trial   Measure Measure2    Measure
    1   4   1   1   1   0
    1   4   1   0   0   0
    1   4   1   1   1   0
    1   4   1   1   1   0
    1   4   1   1   1   1
    1   4   1   1   1   1
    1   4   1   1   1   0
    1   4   1   1   1   0

Вот моя установка:

data.df <- read.csv(
"data.csv", 
  header=TRUE, sep=","
  )

attach(data.df)
names(data.df)

Я попытался следующее mshapiro.test()

#multivariate normality
dataMat <- data.matrix(data.df)
mshap <- mshapiro.test(dataMat)

Я получил следующую ошибку:

Error in solve.default(R %*% t(R), tol = 1e-18): 
Lapack routine dgesv: system is exactly singular: U[7,7] = 0. 

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

LowCluster <- t(dataMat[c(1:1877),1:6])
MedCluster <- t(dataMat[c(1878:3166),1:6])
HigCluster <- t(dataMat[c(3167:5364),1:6])
mshaplow <- mshapiro.test(LowCluster)
mshapmed <- mshapiro.test(MedCluster)
mshaphigh <- mshapiro.test(HigCluster)

Я получил ту же ошибку.

Error in solve.default(R %*% t(R), tol = 1e-18) : 
Lapack routine dgesv: system is exactly singular: U[7,7] = 0

Как я могу решить это?

1 ответ

Решение

Пара вопросов. Во-первых, mshapiro.test Функция требует, чтобы данные были в формате строки, поэтому вам нужно использовать t() транспонировать ваши данные.

Но он все равно потерпит неудачу из-за особой матрицы, потому что у вас есть столбцы, которые являются точно линейными комбинациями друг друга. Например, Group равно 4*Cluster, а также Measure такой же как Measure2, Проверьте это обсуждение сингулярных матриц для получения дополнительной информации.

Предполагая, что вы хотите проверить нормальность только на Measure Переменные, вот пример кода, который будет работать для иллюстрации проблемы единственной матрицы

df2 <- data.df[,c(4, 5, 6)]
df2[8,1] = 0 # changing this value makes it so no column is a linear combo of any other column
mshapiro.test(t(df2))

Но все ли ваши Measure значения 0 или 1? Если так, зачем вам проверять нормальность?

Другие вопросы по тегам