Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于某些条件创建箱线图_R_Dplyr - Fatal编程技术网

R 基于某些条件创建箱线图

R 基于某些条件创建箱线图,r,dplyr,R,Dplyr,给出的数据是 A. 样品 属于 胆固醇 采取的水平 从…起 24 医院 员工 谁 是 在…上 A. 标准美国人 饮食 和 谁 同意 到 采用 A. 素食主义者 饮食 1. 一个月。 血清胆固醇 测量 是 以前做的 收养 这个 饮食 和 1. 月 之后 Subject Before After Difference 1 1 195 146 49 2 2 145 155 -10 3 3 205

给出的数据是 A. 样品 属于 胆固醇 采取的水平 从…起 24 医院 员工 谁 是 在…上 A. 标准美国人 饮食 和 谁 同意 到 采用 A. 素食主义者 饮食 1. 一个月。 血清胆固醇 测量 是 以前做的 收养 这个 饮食 和 1. 月 之后

   Subject Before After Difference
1        1    195   146         49
2        2    145   155        -10
3        3    205   178         27
4        4    159   146         13
5        5    244   208         36
6        6    166   147         19
7        7    250   202         48
8        8    236   215         21
9        9    192   184          8
10      10    224   208         16
11      11    238   206         32
12      12    197   169         28
13      13    169   182        -13
14      14    158   127         31
15      15    151   149          2
16      16    197   178         19
17      17    180   161         19
18      18    222   187         35
19      19    168   176         -8
20      20    168   145         23
21      21    167   154         13
22      22    161   153          8
23      23    178   137         41
24      24    137   125         12
现在我想回答一个问题。一些 调查人员 相信 那个 这个 影响 属于 饮食 在…上 胆固醇 是 更多 明显的 在里面 人 具有 高的 而不是 低的 胆固醇 水平。 如果 你 分裂 这个 数据  相符合的 到 是否 基线 胆固醇 是 在上面 或以下 这个 中值的 可以 你 评论 描述地 在…上 这个问题? 现在,我正在考虑根据这里的两个类别创建boxplot。我希望在这里使用
dplyr
进行数据操作。因此,我将根据
Before
是否小于或大于
Before
的中值来创建一个新列。所以,我将有一个新的字符向量,用“high”表示胆固醇之前的高值,用low表示胆固醇之前的低值。然后,我将根据分类的新列绘制一个
差异
的箱线图。这是我的代码。我将原始数据集称为
df2

df2 %>% 
  mutate(new_col = if_else(Before < median(Before), "low", "high")) %>%
  group_by(new_col) %>%
  ggplot(aes(x= new_col, y=Difference)) +
  geom_boxplot()
df2%>%
变异(新列=如果其他(之前<中位数(之前),“低”、“高”))%>%
分组依据(新列)%>%
ggplot(aes(x=新列,y=差))+
geom_箱线图()
下面是我得到的箱线图


因此,基于这一点,我得出结论,调查人员是正确的,而且效果良好 属于 节食 胆固醇 是 更多 明显的 在里面 人 具有 高的 而不是 低的 胆固醇 水平。我想知道是否可以更有效地做到这一点

这不是一个真正的答案,但更多的是一种不同的数据可视化方法

library( data.table )
library( ggplot2 )

DT.melt <- melt( DT, id.vars = "Subject", measure.vars = c( "Before", "After" ) )

ggplot() +
  geom_line( data = DT.melt, 
             aes( x = variable, y = value, group = Subject ) ) +
  geom_line( data = DT.melt[, .(mean = mean(value)), by = variable ],
             aes( x = variable, y = mean, group = 1 ), color = "red", size = 2 ) +
  labs( x = "", y = "" )
库(data.table)
图书馆(GG2)

DT.melt并不是一个真正的答案,而是数据可视化的一种不同方法

library( data.table )
library( ggplot2 )

DT.melt <- melt( DT, id.vars = "Subject", measure.vars = c( "Before", "After" ) )

ggplot() +
  geom_line( data = DT.melt, 
             aes( x = variable, y = value, group = Subject ) ) +
  geom_line( data = DT.melt[, .(mean = mean(value)), by = variable ],
             aes( x = variable, y = mean, group = 1 ), color = "red", size = 2 ) +
  labs( x = "", y = "" )
库(data.table)
图书馆(GG2)

DT.melt这更像是一个统计计划问题,而不是一个编程问题,因此它更多地属于stats.stackexchange而不是StackOverflow

无论如何,根据中位数对变量进行分类并不是可视化关联的推荐方法,因为您正在隐藏大量信息。你可以在彼得·弗洛姆的书中读到这一点

最好保留所有点并应用一些样条或平滑算法

例如,你可以考虑这样的事情:

ggplot(df2, aes(x= Before, y=Difference)) + 
  geom_point() + 
  geom_smooth()
df2 %>% 
  mutate(new_col = if_else(Before < median(Before), "low", "high")) %>% 
  ggplot(aes(x= Before, y=Difference, group=new_col, color=new_col)) + 
  geom_point() + 
  geom_smooth(span=3) #try some other values here

在这里,这种关系清晰可见,同时保留了您想要的所有信息

如果确实需要生成子组,也可以尝试以下方法:

ggplot(df2, aes(x= Before, y=Difference)) + 
  geom_point() + 
  geom_smooth()
df2 %>% 
  mutate(new_col = if_else(Before < median(Before), "low", "high")) %>% 
  ggplot(aes(x= Before, y=Difference, group=new_col, color=new_col)) + 
  geom_point() + 
  geom_smooth(span=3) #try some other values here
df2%>%
变异(新列=如果其他(之前<中位数(之前),“低”、“高”))%>%
ggplot(aes(x=之前,y=差异,组=新颜色,颜色=新颜色))+
几何点()
geom_smooth(span=3)#在此处尝试其他值

然而,使用中值仍然不是一个很好的主意,尤其是在数据量如此大的情况下。您可能希望评估关系的功能形式,但这需要一个特定的问题。

这更多是一个统计计划问题,而不是编程问题,因此它更多地属于stats.stackexchange而不是StackOverflow

无论如何,根据中位数对变量进行分类并不是可视化关联的推荐方法,因为您正在隐藏大量信息。你可以在彼得·弗洛姆的书中读到这一点

最好保留所有点并应用一些样条或平滑算法

例如,你可以考虑这样的事情:

ggplot(df2, aes(x= Before, y=Difference)) + 
  geom_point() + 
  geom_smooth()
df2 %>% 
  mutate(new_col = if_else(Before < median(Before), "low", "high")) %>% 
  ggplot(aes(x= Before, y=Difference, group=new_col, color=new_col)) + 
  geom_point() + 
  geom_smooth(span=3) #try some other values here

在这里,这种关系清晰可见,同时保留了您想要的所有信息

如果确实需要生成子组,也可以尝试以下方法:

ggplot(df2, aes(x= Before, y=Difference)) + 
  geom_point() + 
  geom_smooth()
df2 %>% 
  mutate(new_col = if_else(Before < median(Before), "low", "high")) %>% 
  ggplot(aes(x= Before, y=Difference, group=new_col, color=new_col)) + 
  geom_point() + 
  geom_smooth(span=3) #try some other values here
df2%>%
变异(新列=如果其他(之前<中位数(之前),“低”、“高”))%>%
ggplot(aes(x=之前,y=差异,组=新颜色,颜色=新颜色))+
几何点()
geom_smooth(span=3)#在此处尝试其他值

然而,使用中值仍然不是一个很好的主意,尤其是在数据量如此大的情况下。您可能希望评估关系的功能形式,但这需要一个具体的问题。

这个问题可能会产生基于意见的答案。鉴于OP中的R脚本生成了一个方框图,该方框图允许回答一个问题,即在预测试中,高胆固醇患者是否比低胆固醇患者从素食中获益更多,该脚本是“有效的”.@LenGreski不应该迁移到stats.stackexchange而不是closed吗?@DanChaltiel-这取决于人们如何解释这个问题。如果问题是“有没有更有效的方法来创建2组方框图”,我会说它不需要迁移。如果问题是“两组比较是分析这些数据的最佳方法吗?”那么迁移是值得的。也许user9026可以提供更多的上下文,但这看起来像是一个家庭作业问题,关于将区间比率变量更改为顺序变量进行分析的优点的辩论可能超出了课堂上目前所教授的内容。这个问题可能会产生基于观点的答案。鉴于OP中的R脚本生成了一个方框图,该方框图允许回答一个问题,即在预测试中,高胆固醇患者是否比低胆固醇患者从素食中获益更多,该脚本是“有效的”.@LenGreski不应该迁移到stats.stackexchange而不是closed吗?@DanChaltiel-这取决于人们如何解释这个问题。如果问题是“有没有更有效的方法来创建2组方框图”,我会说它不需要迁移。如果问题是“两组比较是最好的分析方法吗?”