R 基于某些条件创建箱线图
给出的数据是 A. 样品 属于 胆固醇 采取的水平 从…起 24 医院 员工 谁 是 在…上 A. 标准美国人 饮食 和 谁 同意 到 采用 A. 素食主义者 饮食 1. 一个月。 血清胆固醇 测量 是 以前做的 收养 这个 饮食 和 1. 月 之后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
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组方框图”,我会说它不需要迁移。如果问题是“两组比较是最好的分析方法吗?”