mshapiro.test 'Error in solve.default(R %*% t(R), tol = 1e-18) : Lapack 例程 dgesv: system is exact s



我试图使用两个受试者之间的变量,一个主题内和三个因变量,使用 mvnormtest package在我的数据上使用 mvnormtest package进行多变量正态测试(二进制分类)。我的数据看起来像这样(〜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. 

我一年前从我的统计课上的论坛上检查了一个论坛,发现有人能够通过将数据分组分组来解决。

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*ClusterMeasureMeasure2相同。查看有关单数矩阵的讨论以获取更多信息。

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

最新更新