2017-02-15 192 views
0

我试图找到一种方法来添加一列到我的数据框,将两个处理组中的值分类为与控件类似或不同,具体取决于值是否与控件有统计学差异。如何使用p值作为ifelse语句中的条件?

我不知道如果这甚至有可能,但我们asume我有类似

df <- data_frame(species = rep(c("X1", "X2", "X3", "X4"), times = 12), 
     condition = rep(c("Control", "Treat1", "Treat2"), each = 16), 
     values = rep(c(rnorm(16, mean = 16, sd = 4), 
         rnorm(16, mean = 14, sd = 3), 
         rnorm(16, mean = 5, sd = 10)))) 

一些数据,现在我想增加一列。 我想使用类似

df2 <- df %>% 
    group_by(species) %>% 
    mutate(new_column = ifelse("Value of each condition statistically different from Control", "Different", "Same") 

那么,有没有申请一个ifelse语句中统计检验的方法吗?

或者我应该更好地使用一些更简单的标准来分类数据。也许将所有在控制的±1标准差范围内的值归类为“相同”?

感谢您的帮助和意见。 我期待着阅读您的回复和建议。

+0

你能更清楚地定义你想要执行的测试吗?这是一个单向anova与一些事后测试?也看看'扫帚'包。它是光荣的。 – boshek

回答

1

你会想研究“t检验”及其各种假设。这些旨在确定两个正态分布的样本是否具有相同的均值。 R中的默认值是假定差异不相等,这对您的模拟集合很有用。

我将跳过数据争吵

> set.seed(1) 
> control <- rnorm(16, mean = 16, sd = 4) 
> treat1 <- rnorm(16, mean = 14, sd = 3) 
> treat2 <- rnorm(16, mean = 5, sd = 10) 
> lapply(list(treat1,treat2), function(t) t.test(t,control)$p.value < 0.05) 
[[1]] 
[1] FALSE 

[[2]] 
[1] TRUE 

所以,对于该模拟数据集,t检验不治疗1和以5%的显着性水平的控制之间进行区分。对于不同的样本,它可能会更大,而对于更大的样本,则更有可能。