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

Я пытаюсь провести многомерный тест нормальности с использованием пакета 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 Ответ

0 голосов
/ 28 февраля 2019

Пара вопросов.Во-первых, функция 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?Если так, зачем вам проверять нормальность?

...