scale_y_log10()和coord_trans(ytrans ='log10')导致不同的结果 [英] scale_y_log10() and coord_trans(ytrans = 'log10') lead to different results
问题描述
我使用日志转换进行统计分析(反应时间),现在我想绘制我的数据,并将日志转换为y轴。当我使用coord_trans(ytrans =log10)给我正确的结果 - 但我需要酒吧而不是点我的图。
当我使用scale_y_log10()时,它可以和小节一起工作,但它会绘制错误的值(bar1的平均值为833,但显示在900以上; bar2的平均值为568,但显示接近500)
set.seed(10)
bar1 < - abs(rnorm(n = 232,mean = 833 (n = 393,平均= 568,sd = 418))+ 1
graph_data< - data.frame (RT = c(bar1,bar2),group = c(rep(1,232),rep(2,393)))
ggplot(graph_data,aes(group,RT))+
stat_summary(fun.y = mean,geom ='point',position ='dodge')+
stat_summary(fun.data = mean_cl_normal,geom ='pointrange',position ='position_dodge'(width = .9))+
coord_trans(ytrans =log10)
ggplot(graph_data,aes(group,RT))+
stat_summary(fun.y = mean,geom ='bar',position ='dodge')+
stat_summary(fun.data = mean_cl_normal,geom ='pointrange',position ='position_dodge'(width = .9))+
scale_y_log10 = seq(3 00,1000,100))
感谢您的帮助!
首先,如果您将看到帮助页面
coord_trans()
您会看到:
coord_trans与缩放转换不同因为它在统计转换后出现
,并且会影响几何形状的视觉外观
- 不能保证直线会继续到
直线。
这意味着使用 coord_trans()
时,只有坐标(y轴)会受到log10的影响,但会影响<$ c $第二,你的数据有负值,当你应用<$>时,你的实际数据会在其他计算之前进行对数转换。 c $ c> scale_y_log10()这些值将被删除,并且所有计算都只包含部分数据,所以你得到的平均值与 coord_trans()
一样大。
警告消息:
1:规模$ trans $ trans(x):NaNs产生
2:规模$ trans $ trans(x):NaNs产生
3:缺少值(stat_summary)。
4:删除了包含缺失值(stat_summary)的100行。
I am using log transforms for my statistical analyses (reaction times) and now I want to plot my data, with a log transformed y-axis. When I use coord_trans(ytrans = "log10") that gives me the right results - but I need bars instead of points for my graph. When I use scale_y_log10() it works with bars but it plots the wrong values (bar1 has a mean of 833 but is shown above 900; bar2 has a mean of 568 but is shown closer to 500).
set.seed(10)
bar1 <- abs(rnorm(n = 232, mean = 833, sd = 1103)) + 1
bar2 <- abs(rnorm(n = 393, mean = 568, sd = 418)) + 1
graph_data <- data.frame(RT = c(bar1, bar2), group = c(rep(1, 232), rep(2, 393)))
ggplot(graph_data, aes(group, RT)) +
stat_summary(fun.y = mean, geom = 'point', position = 'dodge') +
stat_summary(fun.data = mean_cl_normal, geom = 'pointrange', position = 'position_dodge'(width = .9)) +
coord_trans(ytrans = "log10")
ggplot(graph_data, aes(group, RT)) +
stat_summary(fun.y = mean, geom = 'bar', position = 'dodge') +
stat_summary(fun.data = mean_cl_normal, geom = 'pointrange', position = 'position_dodge'(width = .9)) +
scale_y_log10(breaks = seq(300, 1000, 100))
Thanks for helping!
There two reasons why you got different values.
First, if you will look on the help page of the coord_trans()
you will see that:
coord_trans is different to scale transformations in that it occurs after statistical transformation and will affect the visual appearance of geoms - there is no guarantee that straight lines will continue to be straight.
This mean that with coord_trans()
only coordinates (y axis) are affected with log10 but with scale_y_log10()
your actual data are log transformed before other calculations.
Second, your data have negative values and when you apply scale_y_log10()
to your data those values are removed and all calculations are made with only part of your data, so the mean value you get is larger as with coord_trans()
.
Warning messages:
1: In scale$trans$trans(x) : NaNs produced
2: In scale$trans$trans(x) : NaNs produced
3: Removed 100 rows containing missing values (stat_summary).
4: Removed 100 rows containing missing values (stat_summary).
这篇关于scale_y_log10()和coord_trans(ytrans ='log10')导致不同的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!