R - "CAPdiscrim"和"lda"错误"variable 1 appears to be constant within groups"



所以我一直在浏览现有问题以解决该问题,但无济于事。

i有一个由个体组成的数据集(117(,每个数据集都有来自不同变量(12(的观察结果,并且由具有8个级别的因子变量分组。

我想根据安德森和威利斯的方法对这些数据进行主坐标进行规范分析。我首先使用Biodoverityr :: Capdiscrim。让我们从一些示例数据开始:

individual <- c(1:30)
group <- rep(c("a","b","c"), 10)
Var1 <- rnorm(n = 30, mean = 3.0e-4,sd = 2.0e-6)
Var2 <- rnorm(n = 30, mean = 2.4e-4,sd = 2.0e-6)
Var3 <- rnorm(n = 30, mean = 7.0e-6,sd = 9.0e-9)
Var4 <- rnorm(n = 30, mean = 4.2e-5,sd = 1.0e-6)
Var5 <- rnorm(n = 30, mean = 1.0e-4,sd = 9.0e-6)
Var6 <- rnorm(n = 30, mean = 8.0e-5,sd = 1.0e-5)
df <- data.frame(cbind(individual, group, Var1, Var2, Var3, Var4, Var5, Var6))
df$Var1 <- as.numeric(levels(df$Var1))[as.integer(df$Var1)]
df$Var2 <- as.numeric(levels(df$Var2))[as.integer(df$Var2)]
df$Var3 <- as.numeric(levels(df$Var3))[as.integer(df$Var3)]
df$Var4 <- as.numeric(levels(df$Var4))[as.integer(df$Var4)]
df$Var5 <- as.numeric(levels(df$Var5))[as.integer(df$Var5)]
df$Var6 <- as.numeric(levels(df$Var6))[as.integer(df$Var6)]

capdiscrim需要特定格式的数据:

vars <- df[3:8]

现在我们可以在数据上运行capdiscrim

BiodiversityR::CAPdiscrim(vars~group,
                          data = df,
                          dist = "euclidean",
                          axes = 4,
                          m = 0,
                          permutations = 999)

返回:

lda.default中的错误(x,分组,...(: 变量1在组中似乎是恒定的

我们可以使用Zerzerovar附近查看这是否是真的(这似乎不是正确的(:

vars_check <- nearZeroVar(vars, saveMetrics = TRUE, names = TRUE)
vars_check
    freqRatio percentUnique zeroVar   nzv
Var1         1           100   FALSE FALSE
Var2         1           100   FALSE FALSE
Var3         1           100   FALSE FALSE
Var4         1           100   FALSE FALSE
Var5         1           100   FALSE FALSE
Var6         1           100   FALSE FALSE

现在,我看到了有关LDA((特定的此错误的其他问题,并且我注意到Capdiscrim((呼叫Vegdist((,CMDSCale((和LDA((,所以我试图通过Peice分解Peice:

dist_matrix <- vegdist(vars,
                       method = "euclidean",
                       binary = FALSE,
                       diag = FALSE,
                       upper = FALSE,
                       na.rm = TRUE)
PCA_vars <- cmdscale(d = dist_matrix,
                       k = 5,
                       eig = TRUE,
                       add = FALSE,
                       x.ret = FALSE)
LDA_pldist <- lda(x = PCA_vars$points,
                  grouping = df$group)

返回非常相似的结果:

lda.default中的错误(x,分组,...(: 变量1 2 3 4 5在组中似乎是恒定的

现在lda()中有一个参数" TOL",可以在处理很小的数字时使用该错误来删除此错误,因此我可以这样做:

LDA_pldist <- lda(x = PCA_vars$points,
                  grouping = df$group,
                  tol = 1.0e-25)

这提供了一些输出,但不包括CAPdiscrim的某些功能,例如允许该功能通过排列确定" M"的最佳数字。

任何人都可以建议如何修改CAPdiscrim()中的公差吗?或如何通过这些其他功能手动执行CAPdiscrim()在引擎盖下进行的操作?

任何洞察力都将不胜感激。

我正遇到完全相同的问题。将软件包更新为BiodiversityR_2.8-3后,错误消失了。

(使用您提供的数据(

BiodiversityR::CAPdiscrim(vars~group,
                          data = df,
                          dist = "euclidean",
                          axes = 4,
                          m = 0,
                          permutations = 999)
#Percentage of correct classifications was 26.66667 
#Significance of this percentage was 0.98999 
#Overall classification success (m=1) : 26.6666666666667 percent
#a (n=10) correct: 10 percent
#b (n=10) correct: 70 percent
#c (n=10) correct: 0 percent
#Warning message:
#In cmdscale(distmatrix, k = nrow(x) - 1, eig = T, add = add) :
# only 18 of the first 29 eigenvalues are > 0

Bioviverityr :: Capdiscrim的作者已解决了问题,并且在后续软件包更新中已将其推出。与输入数据相比,从生态学角度与相对值相比,从某些错误检查依赖某些错误检查的情况下。

相关内容

最新更新