【问题标题】:R: Plot interaction between categorial Factor and continuous Variable on DVR:在 DV 上绘制分类因子和连续变量之间的交互
【发布时间】:2014-02-19 16:53:26
【问题描述】:

我所拥有的是一个 3 级重复测量因子和一个连续变量(心理问卷中的分数,仅在实验前测量一次,NEO),它们在具有因变量的线性混合效应模型中显示出显着的相互作用( DV;在每个时间级别测量的状态分数,IAS)。

要了解这种交互的性质,我想创建一个图,其中 X 轴上的时间水平、Y 轴上的状态分数和连续变量的多条曲线,类似于 this。连续变量应该归类为四分位数(所以我得到了 4 条不同的曲线),这正是我无法实现的。到目前为止,我为连续变量中的每个值都得到了一条单独的曲线。

我的目标也与this 相当,但我需要的分类(时间)变量不是单独的曲线,而是在 X 轴上。

我在 R 中尝试了很多不同的绘图函数,但没能得到我想要的,可能是因为我不太擅长处理 R。

F。 e.

gplot(Data_long, aes(x = time, y = IAS, colour = NEO, group = NEO)) + 
  geom_line()

从第一个链接向我展示了数十条曲线(测量 NEO 中的每个值一个),我找不到如何在 gplot 函数中以有意义的方式对连续变量进行分组。

编辑:

原始数据:

http://www.pastebin.ca/2598926

(希望不会太不方便。)

此对象 (Data_long) 是使用以下行创建/转换的:

Data_long <- transform(Data_long0, neo.binned=cut(NEO,c(25,38,46,55,73),labels=c(".25",".50",".75","1.00")))

neo.binned col 中的每个值似乎都设置正确,每个分位数有足够的案例。

然后我尝试并没有工作:

ggplot(Data_long, aes(x = time, y = ias, color = neo.binned)) + stat_summary(fun.y="median",geom="line")

geom_path:每个组仅包含一个观察值。需要调整群>审美吗?

我在 26-73 之间获得了 92 个 NEO 主题和值。任何提示要为剪切和标签功能输入什么?分位数为 0% 25% 50% 75% 100% 26 38 46 55 73。

【问题讨论】:

  • 欢迎来到 SO!如果您提供minimal, reproducible example,人们通常会更乐意提供帮助。谢谢。
  • 我不知道还要添加什么,只是长格式data.frame中的这些变量。
  • 您阅读我提供的链接了吗?您希望 SO 上的人应该花时间帮助您解决问题。请不要添加额外的任务来创建虚拟数据。这是你的职责。
  • 好的,现在我明白了,你是对的。请参阅我的编辑。如果还需要什么,请告诉我。

标签: r plot ggplot2


【解决方案1】:

你的意思是这样的吗?在这里,您的数据根据​​ NEO 分为三个类别,然后绘制这些 bin 上的 IAS 的中值。查看?cut

Data_long <- transform(Data_long, neo.binned=cut(NEO,c(0,3,7,10),labels=c("lo","med","hi")))

在一个情节中绘制所有内容。

ggplot(Data_long, aes(x = time, y = IAS, color = neo.binned)) 
  + stat_summary(aes(group=neo.binned),fun.y="median",geom="line")

并且从 CMichael 的答案中窃取您可以多次完成所有操作(以某种方式您链接到问题中的多面图):

ggplot(Data_long,aes(x=time,y=IAS)) 
  + stat_summary(fun.y="median",geom="line") 
  + facet_grid(neo.binned ~ .)

【讨论】:

  • 我不确定。一方面,变量 NEO 不涉及,是吗?另一方面,我的数据出现错误:“rq.fit.br 中的错误(wx,wy,tau = tau,...):奇异设计矩阵”您对示例数据是正确的,抱歉,我无法创建一个更合适的示例,这只是我对 R 的新奇之处。
  • 如果你也被NEO分割,那么你不能总结任何东西,中位数或其他分位数会减少到同一性。
  • 您在上面的代码中拆分了哪个变量?我关心的是绘制时间 x IAS 按 NEO 分位数分割。
  • 好吧,time 在 x 上,IAS 在 y 上,然后在 NEO 上进行分位数。如果您想用不同的颜色表示每个NEO,那么您的绘图中每个可区分元素只有一个数据点。
  • @entne 如果你最小的物品是 26,那么 0-25 的箱子是空的。也许这会导致错误。如果没有看到数据,我不能向您推荐 breaks 的良好值。你应该能够自己做到这一点。如果我的帖子回答了你的问题,请采纳。如果你觉得它有帮助,你也可以投票。
【解决方案2】:

你的意思是刻面@ziggystar 初始情节?

quantiles = quantile(Data_long$NEO,c(0.25,0.5,0.75))

Data_long$NEOQuantile = ifelse(Data_long$NEO<=quantiles[1],"first NEO Quantile",
                               ifelse(Data_long$NEO<=quantiles[2],
                                      "second NEO Quantile",
                                      ifelse(Data_long$NEO<=quantiles[3],
                                             "third NEO Quantile","forth NEO Quantile")))

require(ggplot2)
p = ggplot(Data_long,aes(x=time,y=IAS)) + stat_quantile(quantiles=c(1),formula=y ~ x)
p = p + facet_grid(.~NEOQuantile)
p

【讨论】:

  • 你应该看看cut函数。
  • :) 输入那个可怕的代码我一直在想一定有更聪明的东西。谢谢!
  • 其实我不知道geom_quantile 做了什么。它适合一条线,但我希望它可以做其他事情,比如简单地绘制样本数据的分位数。
猜你喜欢
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多