【问题标题】:How to use a string as a formula in r如何在r中使用字符串作为公式
【发布时间】:2017-01-01 09:35:53
【问题描述】:

我正在尝试针对time_of_day 对我的所有数据框列进行方差分析,这是一个因素。我的其余专栏都是双倍的,长度相等。

x = 0
pdf("Time_of_Day.pdf")
for (i in names(data_in)){
  if(x > 9){
    test <- aov(paste(i, "~ time_of_day"), data = data_in)
  }
  x = x+1
}
dev.off()

运行这段代码给了我这个错误:

Error: $ operator is invalid for atomic vectors

我的代码在哪里调用$?我怎样才能解决这个问题?抱歉,我是 r 新手,很迷茫。

我的研究问题是看看一天中的时间是否会影响大脑中不同 ROI 的脑容量。一天中的时间分为上午、下午或晚上三类。

编辑:已解决 将字符串视为公式将允许它运行,尽管有人建议我不要有这么多独立值,因为它会夸大模型的统计结果。我不会删除此内容,以防有人与 aov() 通话有类似问题。

x = 0
pdf("Time_of_Day.pdf")
for (i in names(data_in)){
  if(x > 9){
    test <- aov(as.formula(paste(i, "~ time_of_day")), data = data_in)
  }
  x = x+1
}
dev.off()

【问题讨论】:

    标签: r for-loop statistics linear-regression anova


    【解决方案1】:

    我猜您的问题是您的 aov() 函数中没有集成方差分析公式。请参阅以下工作示例:

    data_in <- data.frame(c(1,2,3),c(4,5,6),c(7,8,9))
    names(data_in) <- c("first","second","third")
    
    for (i in seq_along(names(data_in))){
      test <- aov(data_in$first ~ data_in$second, data = data_in)
      print(summary(test))
    }
    

    但是,您似乎尝试为每列计算 ANOVA,而您至少需要两个变量。也就是说,一个标称尺度的条件变量和一个区间尺度的因变量(例如性别和体重)。所以我通常想知道方差分析是否是解决您问题的正确方法。无论如何,为了回答这个问题,需要样本数据和您的研究问题的摘要。

    【讨论】:

    • 我的条件变量是 time_of_day,它的值是 1(早上)、2(下午)或 3(晚上)。因变量是大脑不同区域的体积。我想针对time_of_day 分析大脑的 104 个不同区域。这就是为什么我要遍历我的数据框中的所有列。我需要改变什么才能让这个 anova 工作?
    • 另外,你的意思是我的 aov() 调用中没有集成方差分析?
    • 好的,我试过了,它运行没有错误,但我不知道为什么? x = 0 pdf("ROIs vs Time of Day(MF).pdf") for (i in names(data_in)){ if(x &gt; 9){ test &lt;- aov(data_in[[i]] ~ data_in$time_of_day) print(summary(test)) } x = x+1 } dev.off()
    • 我在这里发布的只是一段工作代码,旨在显示您最初的错误来自何处。您的基本问题是您没有输入模型公式(请参阅此处:statmethods.net/stats/anova.html)。 R 中的大多数测试(如回归或 ANOVA)都是通过相同的公式语法设置在一起的,我建议您在继续之前先学习。
    • 但是,如果您有 104 个因变量,则计算 104 个 ANOVA 并仅查看主效应并不是一个好主意。因此,我建议考虑减少因变量的数量,并使用某种事后测试,如 Bonferroni。
    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多