用R

用R,r,R,我使用R运行判别分析。代码如下: fit <- lda(group~ A+C1_1+C2+D1a_1+D2_1+D3_1+D3_2+D3_3+E1a_1+E1b_1+E1b_2+E2_1+E3_1+E3_2+E3_3+F2+G_1+G_2+G_3+G_4+H1_1+H2a_1+H2b_1+H3_1+H4_1_1+H1_2+H2a_2+H2b_2+ H3_2+H4_1_2+J1_1+J2_1+J3_1+K1a+K2_1+K2_2+K2_3+K2_4,data=data1) 这是str(数据

我使用R运行判别分析。代码如下:

fit <- lda(group~ A+C1_1+C2+D1a_1+D2_1+D3_1+D3_2+D3_3+E1a_1+E1b_1+E1b_2+E2_1+E3_1+E3_2+E3_3+F2+G_1+G_2+G_3+G_4+H1_1+H2a_1+H2b_1+H3_1+H4_1_1+H1_2+H2a_2+H2b_2+ H3_2+H4_1_2+J1_1+J2_1+J3_1+K1a+K2_1+K2_2+K2_3+K2_4,data=data1)
这是str(数据1)输出:

]]


第二,有谁能告诉我如何获得判别分析中使用的变量的显著性水平。

适用于随机生成的无
NA
值的数据集:

set.seed(101)
z <- matrix(runif(210*133),nrow=210)
zz <- data.frame(A=sample(1:2,size=210,replace=TRUE),z)
m <- MASS::lda(A~.,data=zz)
导致

Error in x - group.means[g, ] : non-conformable arrays
(如果我少敲几下,就会收到关于共线性的警告)

首先,尝试删除所有具有任何
NA
值(或具有多个值的变量)的变量,看看是否可以让它工作

对于问题的p值部分:通过谷歌搜索“+r质量lda判别分析”可以得出并建议(并提供链接)这些p值的MANOVA

根据谷歌的一点搜索,看起来人们通常在LDA环境下使用MANOVA和Wilks的lambda进行测试:例如,他说

判别函数分析分为两个步骤:(1)测试 一组判别函数的重要性,以及;(2) 分类。第一 步骤在计算上与MANOVA相同

他们接着展示了一个使用威尔克斯的lambda的例子,尽管
?manova
说Pillai-Bartlett测试(这是
manova
中的默认测试)可能更好。。。在任何情况下,做测试都很容易

> summary(manova(z~zz$A),test="Wilks")
           Df   Wilks approx F num Df den Df Pr(>F)
zz$A        1 0.38164  0.92587    133     76 0.6545
Residuals 208     

这当然不是你所要求的——你(我想)要求的是与单个变量相关的显著性水平,而不是与整体测试相关的显著性水平。我可以想象你可以通过适当的多重校正逻辑回归来做些什么,但这正变成一个统计问题,而不是一个R问题。如果你在这里没有得到任何进一步的答案,你可能会考虑问一个适当的重新设定的问题,参考这个问题…

< P>工作是好的,随机生成的数据集,没有<代码> Na <代码>值:

set.seed(101)
z <- matrix(runif(210*133),nrow=210)
zz <- data.frame(A=sample(1:2,size=210,replace=TRUE),z)
m <- MASS::lda(A~.,data=zz)
导致

Error in x - group.means[g, ] : non-conformable arrays
(如果我少敲几下,就会收到关于共线性的警告)

首先,尝试删除所有具有任何
NA
值(或具有多个值的变量)的变量,看看是否可以让它工作

对于问题的p值部分:通过谷歌搜索“+r质量lda判别分析”可以得出并建议(并提供链接)这些p值的MANOVA

根据谷歌的一点搜索,看起来人们通常在LDA环境下使用MANOVA和Wilks的lambda进行测试:例如,他说

判别函数分析分为两个步骤:(1)测试 一组判别函数的重要性,以及;(2) 分类。第一 步骤在计算上与MANOVA相同

他们接着展示了一个使用威尔克斯的lambda的例子,尽管
?manova
说Pillai-Bartlett测试(这是
manova
中的默认测试)可能更好。。。在任何情况下,做测试都很容易

> summary(manova(z~zz$A),test="Wilks")
           Df   Wilks approx F num Df den Df Pr(>F)
zz$A        1 0.38164  0.92587    133     76 0.6545
Residuals 208     

这当然不是你所要求的——你(我想)要求的是与单个变量相关的显著性水平,而不是与整体测试相关的显著性水平。我可以想象你可以通过适当的多重校正逻辑回归来做些什么,但这正变成一个统计问题,而不是一个R问题。如果你在这里没有得到任何进一步的答案,你可能会考虑问一个适当的重新拟定的问题,参考这个问题…

< P>另一个潜在的问题是因为数据集面临秩亏问题。也就是说,其中一个类中的某些变量完全相同

如果我们使用“NA”进行检查,但没有,我们还可以运行一个快速测试:

lda(Y ~ Var1, data = Data.Name)
如果可行,我们可以通过在下面的代码块中更改varlist手动找到合适的变量子集:

# a subset of all of your predictors, I recommend start from some simple ones
varlist <- c(1:5, 8:10) 
# get the colnames from the data frame
Col.Name <- colnames(Data.Name)[varlist]
# form a formula
fun <- paste("Response ~", paste(as.character(Col.Name), sep = "=", collapse = " + "))
fun <- formula(fun)
# pass it to the lda function
lda(fun, data = Data.Name)
#作为所有预测因素的子集,我建议从一些简单的预测因素开始

varlist另一个潜在问题是因为数据集面临秩亏问题。也就是说,其中一个类中的某些变量完全相同

如果我们使用“NA”进行检查,但没有,我们还可以运行一个快速测试:

lda(Y ~ Var1, data = Data.Name)
如果可行,我们可以通过在下面的代码块中更改varlist手动找到合适的变量子集:

# a subset of all of your predictors, I recommend start from some simple ones
varlist <- c(1:5, 8:10) 
# get the colnames from the data frame
Col.Name <- colnames(Data.Name)[varlist]
# form a formula
fun <- paste("Response ~", paste(as.character(Col.Name), sep = "=", collapse = " + "))
fun <- formula(fun)
# pass it to the lda function
lda(fun, data = Data.Name)
#作为所有预测因素的子集,我建议从一些简单的预测因素开始

varlist语法错误:上一个
data=data1
之前缺少逗号。抱歉,安德烈!但是我在这里犯的这个错误。我正在运行的代码没有这个错误。请将
str(data1)
的结果粘贴到您的问题中。请注意,如果公式包含数据框中的所有变量,您可以说
lda(group~,data=data1)
。。。是否可能从全局工作区中引入了某个变量的不同版本?@Ben:这不太可能,因为我只使用了此数据集。语法错误:在您的上一个
数据=数据1
之前缺少逗号。抱歉,安德烈!但是我在这里犯的这个错误。我正在运行的代码没有这个错误。请将
str(data1)
的结果粘贴到您的问题中。请注意,如果公式包含数据框中的所有变量,您可以说
lda(group~,data=data1)
。。。是否可能从全局工作区中引入了一个不同版本的变量?@Ben:这不太可能,因为我只使用了这个数据集。是的。成功了。谢谢你,本!实际上,我用NA值保存了一个var。是的。成功了。谢谢你,本!我实际上保留了一个带有NA值的var。很抱歉回答了这么一个老帖子,以防有人面临与我相同的问题,但数据集中没有NAs。谢谢!很抱歉回复了这么一篇老帖子,以防有人遇到和我一样的问题,但数据集中没有NAs。谢谢!