Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 霍特林';s T^2使用马氏距离确定组间差异的测试示例_R_Significance_T Test_Mahalanobis - Fatal编程技术网

R 霍特林';s T^2使用马氏距离确定组间差异的测试示例

R 霍特林';s T^2使用马氏距离确定组间差异的测试示例,r,significance,t-test,mahalanobis,R,Significance,T Test,Mahalanobis,我正试图按照出版物中描述的程序来确定各组之间的分离是否具有统计学意义。该出版物的水平超出了我的知识水平,但我正试图一步一步地接近它 为了澄清和简化,以iris数据集为例,在R中进行分析。如PCA图所示,该方法应使我能够确定群体/物种之间的距离是否显著不同。 据我所知,要获得此结果,程序包括以下四个步骤: 距离计算:使用前两个主分量的组质心之间的马氏距离 学生t检验:使用霍特林的两个样本t^2统计量来确定分离和聚集是否具有统计学意义 计算F-统计量:将T^2统计量转换为F-值,并计算F-检验以指

我正试图按照出版物中描述的程序来确定各组之间的分离是否具有统计学意义。该出版物的水平超出了我的知识水平,但我正试图一步一步地接近它

为了澄清和简化,以iris数据集为例,在R中进行分析。如PCA图所示,该方法应使我能够确定群体/物种之间的距离是否显著不同。

据我所知,要获得此结果,程序包括以下四个步骤:

  • 距离计算:使用前两个主分量的组质心之间的马氏距离
  • 学生t检验:使用霍特林的两个样本t^2统计量来确定分离和聚集是否具有统计学意义
  • 计算F-统计量:将T^2统计量转换为F-值,并计算F-检验以指示集群之间是否存在分离
  • 使用F-统计量进行假设检验:如果F-值大于临界F-值,则可以拒绝假设两组之间没有分离的零假设
  • 我被困在第一步和第二步之间。如何使用马氏距离计算的结果进行霍特林T^2测试

    MWE如下:

    library(ICSNP)
    library(ggbiplot)
    data(iris)
    
    # Mahalanobis Distance calculation Function from https://stackoverflow.com/a/34708113/5731401
    D.sq <- function (g1, g2) {
        dbar <- as.vector(colMeans(g1) - colMeans(g2))
        S1 <- cov(g1)
        S2 <- cov(g2)
        n1 <- nrow(g1)
        n2 <- nrow(g2)
        V <- as.matrix((1/(n1 + n2 - 2)) * (((n1 - 1) * S1) + ((n2 - 1) * S2)))
        D.sq <- t(dbar) %*% solve(V) %*% dbar
        res <- list()
        res$D.sq <- D.sq
        res$V <- V
        res
    }
    
    iris.pca <- prcomp(iris[,-5], center = TRUE, scale. = TRUE)
    str(iris)
    # uncomment the next line for illustrative plot
    # print(ggbiplot(iris.pca, obs.scale = 1, var.scale = 1, groups = iris$Species, ellipse = TRUE, circle = TRUE))
    df.iris.x <- as.data.frame(iris.pca$x)
    df.iris.x$Species <- iris$Species
    
    split.data = split(df.iris.x[,-5],df.iris.x$Species)
    S1 = split.data[['setosa']]
    S2 = split.data[['versicolor']]
    S3 = split.data[['virginica']]
    
    # calculate mahalanobis distances for the first two principal components between the groups/species
    d1 <- D.sq(S1[,1:2],S2[,1:2])
    d2 <- D.sq(S1[,1:2],S3[,1:2])
    d3 <- D.sq(S2[,1:2],S3[,1:2])
    
    # T-test on the first two principal components 
    HotellingsT2(S1[,1:2], S2[,1:2]) #btw setosa and versicolor
    HotellingsT2(S1[,1:2], S3[,1:2]) #btw setosa and virginica
    HotellingsT2(S2[,1:2], S3[,1:2]) #btw versicolor and virginica
    

    就比例而言,它们似乎与主成分分析图所示相当。在前两个主成分上的A对于所有三个比较都返回一个显著的结果。但我想知道如何使用参考出版物中所述的先前马氏距离计算进行T检验?

    该方法有四个步骤:(1)计算马氏距离(2)计算霍特林的T2统计量(3)根据T2统计量计算F统计量(4)使用F统计量进行假设检验(*如果F值大于临界F值,则可以拒绝假设两组之间没有分离的零假设*)感谢@MarcoSandri的指示,将在描述中改变它!我认为在第(2)点没有假设检验。检验仅在步骤(4)中进行@MarcoSandri我认为你是对的。第(2)步只是计算Hotelling的T2统计量,而不是检验任何假设。在我的示例中,后一个假设检验由
    HotellingsT2()
    执行,前一个统计量应由
    Hotelling.stats()
    函数提供。此方法有四个步骤:(1) 计算马氏距离(2)计算霍特林的T2统计量(3)根据T2统计量计算F统计量(4)使用F统计量进行假设检验(*如果F值大于临界F值,则可以拒绝假设两组之间没有分离的零假设*)感谢@MarcoSandri提供的指针,将在描述中更改它!我认为在第(2)点没有假设检验。检验仅在第(4)步。@MarcoSandri我认为你是对的。第(2)步只是计算Hotelling的T2统计数据,而不是测试任何假设。在我的示例中,后一个假设测试由
    HotellingsT2()
    执行,前一个统计数据应由
    Hotelling.stats()函数提供。
    
    d1$D.sq = 70.7239
    d2$D.sq = 97.53259
    d3$D.sq = 5.910554