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

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

我正在尝试使用 mvnormtest 包对我的数据进行多变量正态性检验,其中包含两个主体间变量、一个主体内变量和三个因变量(二元分类).我的数据如下所示(约 5,600 行,无缺失数据):

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. 

一年前我在一个论坛上查看了我的统计数据 class,发现有人可以通过将数据分组来解决这个问题。

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

我该如何解决?

几个问题。首先,mshapiro.test 函数要求数据为行格式,因此您需要使用 t() 来转置您的数据。

但由于奇异矩阵,它仍然会失败,因为您的列彼此完全是线性组合。例如,Group 等于 4*Cluster,而 MeasureMeasure2 相同。查看this discussion关于奇异矩阵的更多信息。

假设您只想测试 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?如果是这样,您为什么要测试正态性?