FactorMineR中的T检验

时间:2019-07-18 10:18:11

标签: r t-test

我使用FactoMiner执行FAMD。为了解释轴,我使用了函数dimdesc()。文档(http://factominer.free.fr/factomethods/dimensions-description.html)解释说,为了测试分类变量及其模态的影响,它使用了方差分析:

  

对于分类变量,对每个维度建立一个具有一个因子的方差分析模型;个人的坐标由分类变量解释。导出F检验以查看变量是否对尺寸产生影响,并按类别对T检验进行分类(对比度总和alpha_i = 0)。

但是,当我执行手动t检验时,我找不到相同的结果。

例如,这就是我使用lm()时发现的东西:

options(contrasts = c("contr.sum", "contr.sum"))
model<-lm(quanti.var~data6[,c1])
summary(model)

              Estimate Std. Error     t value Pr(>|t|)    
(Intercept)   0.024102   0.035501   0.679   0.49722    
data6[, c1]1  0.240822   0.190059   1.267   0.20517    
data6[, c1]2 -0.079510   0.057494  -1.383   0.16674    
data6[, c1]3 -0.250075   0.041775  -5.986   2.26e-09 ***
data6[, c1]4  0.238275   0.041220   5.781   7.80e-09 ***
data6[, c1]5 -0.118232   0.042683  -2.770   0.00562 ** 
data6[, c1]6  0.483183   0.084351   5.728   1.06e-08 ***
data6[, c1]7 -0.001169   0.136717  -0.009   0.99318    
data6[, c1]8 -0.179943   0.051165  -3.517   0.00044 ***
data6[, c1]9 -0.427535   0.194377  -2.200   0.02788 *  

这是dimdes()的结果。如您所见,p值是不同的:

                Estimate              p.value 
var 1              0.240821978           2.132585e-01
var 2             -0.079509990           2.689540e-01
var 3             -0.250074686           2.879108e-25
var 4              0.238274701           3.180988e-38
var 5             -0.118232190           8.861101e-05
var 6              0.483182743           4.277368e-09
var 7             -0.001169335           8.786973e-01
var 8             -0.179943095           1.046172e-04
var 9             -0.427534982           6.405361e-02
var 10             0.094184857           2.257341e-03

所以我的主要问题是:dimdes()进行了哪些测试?为什么它不同于“经典” t检验?

我仔细研究了dimdesc()函数,发现它包含两个子函数:test.aov.w和cor.calc:

cor.calc <- function(y, x, w = NULL) {
  if (is.null(w)) 
    w = rep(1, length(x))
  Z <- cbind(x, y)
  missing <- apply(is.na(Z), 1, any)
  Z <- Z[!missing, ]
  w <- w[!missing]
  n = sum(w)
  if (n < 3) 
    n <- sum(w) * length(x)
  r = cov.wt(Z, wt = w, method = "ML", cor = TRUE)$cor[1, 
                                                       2]
  return(list(r = r, proba = pt(sqrt(n - 2) * sqrt(r^2/(1 - 
                                                          r^2)), n - 2, lower.tail = FALSE) * 2))
}
test.aov.w <- function(y, x, w = NULL) {
  if (is.null(w)) 
    w = rep(1, length(x))
  res.aov <- aov(y ~ x, weights = w, na.action = na.exclude)
  res <- summary(res.aov)[[1]]
  ddlR <- sum(w[!apply(is.na(cbind.data.frame(x, y)), 1, 
                       any)]) - nlevels(x)
  tabF <- c(res[1, 2]/(res[1, 2] + res[2, 2]), pf((res[1, 
                                                       3])/(res[2, 2]/(ddlR)), res[1, 1], ddlR, lower.tail = FALSE))
  Estimate <- summary.lm(res.aov)$coef[-1, 1, drop = FALSE]
  Estimate <- c(Estimate, -sum(Estimate))
  tabX <- tab.disjonctif(x)
  aux <- apply(tabX, 2, cor.calc, y, w = w)
  aux <- matrix(as.numeric(sapply(aux, unlist)), byrow = T, 
                ncol = 2)
  p.value <- aux[, 2]
  resT <- cbind(Estimate, p.value)
  return(list(tabF = tabF, resT = resT))
}

据我所见,p值会再次计算。 t检验在我看来就像一种相关性检验。我很困惑,我想了解这些功能到底在做什么,以及为什么作者选择这个选项。

谢谢您的帮助!

0 个答案:

没有答案