如何对r上同一类别中的变量进行t检验?

时间:2017-05-19 01:49:54

标签: r t-test

我想对被捕时男女之间的平均年龄进行t检验。但是,我的数据安排如下:

Sex: Age:
M    21
F    31
F    42
M    43

为了进行t检验,有没有办法将性别分为两个不同的类别(男性和女性)?或者在一个类别中进行t检验?已经提出了类似的问题,但似乎没有一个问题适用于我的数据集。感谢您提供的任何指导!

3 个答案:

答案 0 :(得分:4)

首先,这是第一个问题,很高兴看到高中的孩子们学习统计编程!

第二:你自己正在顺利找到答案,这应该可以帮助你实现目标。

我正在做一些假设:

  1. prof是您的数据框的名称 2您希望比较T-test中教授的性别年龄
  2. 您正在按照您的逻辑向正确的方向努力。我在prof数据框中添加了一些补充观察结果,但这是它应该如何工作:
    # this is a comment in the code, not code, but it explains the reasoning, it always starts with hash tag

    women<-prof[which(prof$Sex=="F"),] #notice the comma after parenthesis
    men<-prof[which(prof$Sex=="M"),] #notice the comma after parenthesis here too 
    

    逗号的左边选择带有该数据的行==&#34;&#34;。逗号右边会告诉你哪些列为空,告诉r包含所有列。

    head(men);head(women) # shows you first 6 rows of each new frame
    # you can see below that the data is still in a data frame
    
       Sex Age
    1    M  21
    4    M  43
    5    M  12
    6    M  36
    7    M  21
    10   M  23
       Sex Age
    2    F  31
    3    F  42
    8    F  52
    9    F  21
    11   F  36
    

    所以为了测试年龄,你必须按名称和年龄列来询问数据框,例如:men$Age

    t.test(women$Age, men$Age) #this is the test
    
     # results below
    
    Welch Two Sample t-test
    
    data:  women$Age and men$Age
    t = 0.59863, df = 10.172, p-value = 0.5625
    alternative hypothesis: true difference in means is not equal to 0
    95 percent confidence interval:
    
     -11.93964  20.73964
    sample estimates:
    mean of x mean of y 
         36.4      32.0 
    

    在R中几乎总有不止一种方式。有时初始排序更复杂,但是使用数据更容易。因此,如果您不想从数据框中解决年龄问题,可以在初始子集中要求列

    women<-prof[which(prof$Sex=="F"),"Age"] #set women equal to just the ages where Sex is 'F'
    men<-prof[which(prof$Sex=="M"), "Age"]#set men equal to just the ages where Sex is 'M'
    

    再次检查您的数据,这次只是每个变量的年龄向量:

    head(women); head(men)
    [1] 31 42 52 21 36
    [1] 21 43 12 36 21 23
    

    然后你的t检验是一个简单的比较:

    t.test(women,men)
     # notice same results
    
        Welch Two Sample t-test
    
    data:  women and men
    t = 0.59863, df = 10.172, p-value = 0.5625
    alternative hypothesis: true difference in means is not equal to 0
    95 percent confidence interval:
     -11.93964  20.73964
    sample estimates:
    mean of x mean of y 
         36.4      32.0 
    

    您的问题似乎在于代码中的三个位置:

    1. 在列名为gender=="F"
    2. 时使用Sex:
    3. [,]中不使用逗号来指定行,然后指定列
    4. 如果它确实仍然存在,则不会在你的t.test中找到$ age的列 两列
    5. 上述代码可以帮助您达到目标。

答案 1 :(得分:0)

比较男性年龄与女性年龄的t检验可以像:

df = data.frame(
    gender = c("M", "F", "F", "M"),
    age = c(21, 31, 42, 43)
)

t.test(age ~ gender, data = df)

根据您的问题,这是最相关的测试。

当你说“在一个类别中执行t检验”时,我不确定你的意思:你可以将一组中的一组值与一些已知的参考值(如0)进行比较,但我不确定是什么这可以告诉你(除了你的样本中的男人不是0岁)。

答案 2 :(得分:0)

您可以尝试以下代码:

t.test(Age ~ Sex, paired = FALSE, data = datasetName)

它应该为您提供相同的结果,而无需创建更多子集。