RuiLoo
用stem(x)可以做茎叶图,那用什么函数可以知道frequency呢?用summary(stem(x,scale=2))没有
yihui
频数参见?table
至于stem()里面的频数,当然也是可以提取出来,但稍有点绕弯。
rtist
stem function is a little bit different than others in that it only returns a NULL.
I don't know why it is designed like this. It doesn't seem to be a reasonable choice to me.
But the closely related function hist() can do everything for you, including getting counts from the returned results.
yihui
我认为stem-and-leaf只是早年没有计算机、只能手工算数时代的古董,现在的统计教育没有必要再花精力讲它了,因为直方图的功能完全覆盖了茎叶图(都是描述数据分布的),而且比茎叶图那种粗略的描述要精细多了(非参数统计讲光滑方法一般都从直方图讲起)
rtist
stem还是有用的,hist里面通常看不到数据值究竟是多少(当然也可以加进去)。
yihui
既然上面提到了获取频数的方法,不妨也把我说的“绕弯方法”提供出来吧,大概是这样:
x=rpois(100,100)
sink('temp.txt')
stem(x)
sink()
xx=readLines('temp.txt')
file.remove('temp.txt')
xx=xx[4:(length(xx)-1)]
nchar(substr(xx,regexpr('|',xx,fixed=T)+2,1000000))
也就是把stem()的输出先保存到文件中,然后读进来成为字符向量,从这个向量中去数数字的个数,也就是频数。
yihui
[quote]引用第4楼rtist于2007-10-19 21:50发表的“”:
stem还是有用的,hist里面通常看不到数据值究竟是多少(当然也可以加进去)。[/quote]
呵呵,我倒是非常同意你这个观点,我认为作图的原则就是要在简洁形象的前提下尽量保持数据的原貌,所以我比较喜欢用rug()函数
数据多且乱杂的时候,stem有时候也不得不将数据做一些舍入的处理,再比如有异常数据“捣乱”的时候,stem的量纲也会受影响,小数字会被舍入得很不精确。
rtist
[quote]引用第6楼谢益辉于2007-10-19 10:33发表的“”:
呵呵,我倒是非常同意你这个观点,我认为作图的原则就是要在简洁形象的前提下尽量保持数据的原貌,所以我比较喜欢用rug()函数
数据多且乱杂的时候,stem有时候也不得不将数据做一些舍入的处理,再比如有异常数据“捣乱”的时候,stem的量纲也会受影响,小数字会被舍入得很不精确。[/quote]
有时候我也的确感觉stem的图非常strange,确实不精确,不过没有仔细检查为什么。
我觉得对于discrete或者interval censoring的数据,stem还是很有用的。
比如考试成绩stem出来很容易看到第几名。
stem另外的一个好处是ties和overplotting issue基本上没有。hist+rug如果数据点过于集中或者exactly相等的时候的时候,很难看清哪个是哪个。
rtist
[quote]引用第5楼谢益辉于2007-10-19 10:20发表的“”:
既然上面提到了获取频数的方法,不妨也把我说的“绕弯方法”提供出来吧,大概是这样:
x=rpois(100,100)
sink('temp.txt')
stem(x)
.......[/quote]
哈哈,smart! 不过真够绕的。。。
如果一个stem里面的数据过多的时候,在行尾会给出未显示出来的数据点的个数。
这个时候直接count字符数就不行了,但是这个稍微改一点就可以实现。
另外一种办法是,像你这样用stem,然后提取stem文件信息得到bin edge,最后把bin edges传给hist,让hist计算count.