【问题标题】:How to split dataframe in R to conduct statistical tests? [closed]如何在 R 中拆分数据框以进行统计测试? [关闭]
【发布时间】:2018-11-19 12:32:59
【问题描述】:

我有 3 个变量,A1A2A3

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

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

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

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

请问我该如何解决这个问题?

非常感谢, 伊哈克

【问题讨论】:

  • 欢迎来到 SO!请阅读How to Ask 并在您的问题中给出minimal reproducible example
  • 您无法将名义/二分数据与连续数据相关联。您可以为A1 vs A2A1 vs A3 执行?t.test?wilcox.test。请阅读并观看有关“相关性”和我提到的两个测试的 youtube 视频。
  • 也许接受Correlations with unordered categorical variables 的答案会有所帮助。
  • 我可以使用 t.test 代替相关性吗?
  • t 检验将检验两个城市之间的平均气温相等的原假设。配对 t 检验将检验同时获取的温度读数对相等的零假设。相关性可以解释钦奈气温升高与迪拜气温升高相关的程度。您希望检验哪个假设?

标签: r dataframe split correlation


【解决方案1】:

拆分数据的方法有很多种,但首先要回答的问题是“我希望检验什么假设?”

这是使用来自 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 中,因此我使用提取运算符的 [ 形式根据 city 列的值提取行。我还按月为每个城市创建了原始数据文件,因此每个子集中的值的顺序按月匹配,从而可以直接使用成对 t 检验。

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

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

【讨论】:

  • 非常感谢伦。
  • @IshackMarshook 如果您发现它有帮助,请接受答案。
  • 完成了,莱恩。请问我可以再问几个问题吗?
  • @IshackMarshook - 如果您的后续问题与此问题直接相关,是的。否则,请发布一个新问题,SO 社区将回答它。 SO 礼仪的一部分是帖子只关注一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
相关资源
最近更新 更多