如何在R中拆分数据框以进行统计测试?

时间:2018-11-19 12:33:00

标签: r dataframe split correlation

我有3个变量,A1A2A3

  • A1是温度
  • A2是月份
  • A3是位置

A2有2个月-3月和5月。A3有2个城市-钦奈和迪拜。

但是当我在A1A3之间进行关联时:

cor(A1,A3, method = "pearson") 'y' must be numeric

请问该如何解决?

非常感谢, 伊萨克

1 个答案:

答案 0 :(得分:0)

有许多分割数据的方法,但是要回答的第一个问题是“我希望检验什么假设?”

以下是来自timeanddate.com的使用钦奈和迪拜每日平均高温的示例代码

# data collected from average high temperatures collected from 2005 - 2015
# https://www.timeanddate.com/weather/india/chennai/climate
# https://www.timeanddate.com/weather/united-arab-emirates/dubai/climate
rawData <- "
temperature,month,city
75,Jan,Dubai
78,Feb,Dubai
83,Mar,Dubai
92,Apr,Dubai
100,May,Dubai
103,Jun,Dubai
106,Jul,Dubai
107,Aug,Dubai
102,Sep,Dubai
96,Oct,Dubai
87,Nov,Dubai
79,Dec,Dubai
86,Jan,Chennai
89,Feb,Chennai
93,Mar,Chennai
97,Apr,Chennai
102,May,Chennai
100,Jun,Chennai
97,Jul,Chennai
95,Aug,Chennai
95,Sep,Chennai
92,Oct,Chennai
87,Nov,Chennai
86,Dec,Chennai"

tempData <- read.csv(text=rawData)

# t-test for average temperatures
t.test(tempData[tempData$city =="Dubai","temperature"],
       tempData[tempData$city == "Chennai","temperature"],
       paired=FALSE)

# paired t-test
t.test(tempData[tempData$city =="Dubai","temperature"],
       tempData[tempData$city == "Chennai","temperature"],
       paired=TRUE)
# correlation
cor(tempData[tempData$city =="Dubai","temperature"],
    tempData[tempData$city =="Chennai","temperature"])

两次样本t检验

两个样本t检验检验两个假设均等的零假设,而与测试中两组之间收集的数据之间的关联无关。有时,两组之间的关联可能基于时间(例如温度数据),但是配对可能基于其他特征(例如,在具有测试组和对照组的研究中,双胞胎每对都是随机的分配给测试组和对照组)。

> t.test(tempData[tempData$city =="Dubai","temperature"],
+        tempData[tempData$city == "Chennai","temperature"],
+        paired=FALSE)

    Welch Two Sample t-test

data:  tempData[tempData$city == "Dubai", "temperature"] and tempData[tempData$city == "Chennai", "temperature"]
t = -0.24817, df = 15.546, p-value = 0.8073
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -8.765568  6.932235
sample estimates:
mean of x mean of y 
 92.33333  93.25000

由于0在95%的置信区间内,因此我们接受零假设,即钦奈和迪拜之间的月平均高温没有差异。

配对t检验

配对t检验计算观察值对之间的差异,并检验平均差异为0的零假设。

> # paired t-test
> t.test(tempData[tempData$city =="Dubai","temperature"],
+        tempData[tempData$city == "Chennai","temperature"],
+        paired=TRUE)

    Paired t-test

data:  tempData[tempData$city == "Dubai", "temperature"] and tempData[tempData$city == "Chennai", "temperature"]
t = -0.39555, df = 11, p-value = 0.7
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -6.017343  4.184009
sample estimates:
mean of the differences 
             -0.9166667 

由于0在95%置信区间内,因此我们接受零假设,即当对成对的月平均高温值的差异进行测试时,金奈和迪拜之间的月平均高温没有差异

关联

Pearson相关性衡量两个变量之间的线性关系的强度,-1.0 =完全负相关,0 =没有线性相关,而1 =完全正相关。

> cor(tempData[tempData$city =="Dubai","temperature"],
+     tempData[tempData$city =="Chennai","temperature"])
[1] 0.7929018
> 

0.79的相关性表示迪拜和金奈的每月平均高温之间有很强的正线性关系。

用于拆分数据的技术

由于我创建了原始数据文件并使用read.csv()将其加载到R中,因此我使用了[形式的extract运算符来根据city列的值提取行。我还为每个城市按月顺序创建了原始数据文件,因此每个子集中的值顺序按月匹配,从而可以直接使用成对t检验。

# extract temperature values for Dubai
tempData[tempData$city =="Dubai","temperature"]

可以使用多种技术来对R数据帧中的数据进行子集化,例如which()函数和sqldf()函数。