楼主: duxueyuan
4253 1

[实际应用] 关于Hmsic包cut2()函数处理峰度较大的数据的疑问 [推广有奖]

  • 0关注
  • 0粉丝

已卖:82份资源

大专生

46%

还不是VIP/贵宾

-

威望
0
论坛币
253 个
通用积分
1.0870
学术水平
5 点
热心指数
5 点
信用等级
4 点
经验
366 点
帖子
23
精华
0
在线时间
57 小时
注册时间
2011-2-21
最后登录
2022-2-9

楼主
duxueyuan 在职认证  发表于 2017-5-7 19:30:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人在学习某个培训机构R实例课件中,在前期处理数据质量处理的时候,大量的用Hmisc包下面的cut2()函数,他解释:“#将峰度较大的数据进行分段处理。#峰值(peakness)是指概率密度分布曲线在平均值处的陡缓程度;偏度(skewness)是指概率密度分布曲线相对于平均值的偏移程度”。
  我个人的理解就是既定的数据值之间差异太大,存在两极化的现象。他就想把直方图中柱子比较高的数据给削掉一些。
我截取了处理前的部分数据:
  > head(t$capital_gain,500)

    [1]     0     0     0  7688     0     0     0  3103     0     0
[11]  6418     0     0     0  3103     0     0     0     0     0
[21]     0     0     0     0     0  7298     0     0     0     0
[31]  7688     0     0     0     0     0     0     0     0     0
[41]     0     0     0     0     0     0     0  3908     0     0
[51]     0     0     0 14084     0     0     0  3103  5178     0
[61]     0     0     0     0     0     0 15024     0     0     0
[71] 15024     0     0     0     0     0     0     0     0     0
[81]     0     0     0 99999     0     0     0     0     0  7688
[91]     0     0  5178     0     0     0     0     0     0     0
[101]     0     0     0     0     0     0     0  2597     0     0
[111]     0     0     0     0     0     0     0     0     0     0
[121]     0     0     0     0     0     0     0     0     0     0
[131]     0     0     0     0     0     0     0     0     0     0
[141]     0     0  7688     0     0     0     0     0 15024  2907
[151]     0     0     0     0     0     0     0     0     0     0
[161]     0     0     0     0     0     0     0     0     0     0
[171]     0     0     0     0     0     0     0     0     0     0
[181]  4650 15024     0     0     0     0     0     0     0     0
[191]     0     0     0     0     0     0     0     0     0     0
[201]     0     0     0     0     0     0     0     0     0     0
[211]     0     0  6497     0     0     0     0     0     0     0
[221]     0     0     0     0  7688     0 15024     0  1055     0
[231]     0     0     0     0     0     0  5013     0     0     0
[241]     0     0     0     0     0     0     0     0     0     0
[251]     0     0     0     0     0     0  4650     0     0     0
[261]     0     0     0     0     0  3103     0     0     0     0
[271]     0     0     0     0     0     0     0     0 15024     0
[281]     0     0     0     0     0     0     0     0     0     0
[291]     0     0     0     0     0     0     0     0 27828     0
[301]     0     0     0     0     0     0     0     0     0  3103
[311]     0     0     0  4934  4064     0     0     0     0     0
[321]     0     0     0     0     0     0     0     0     0 15024
[331]     0     0     0  3674     0     0     0     0     0     0
[341]     0  2174     0     0 10605     0 99999  5178     0     0
[351]     0     0     0     0     0     0     0 99999     0     0
[361]     0     0     0     0     0     0     0     0     0     0
[371]     0     0     0     0     0     0     0     0     0     0
[381]     0     0     0     0     0     0     0     0     0     0
[391]     0     0     0     0  3418     0     0     0     0     0
[401]     0     0     0     0     0     0     0     0     0     0
[411]     0     0  1055     0     0     0     0     0 99999     0
[421]     0     0     0     0   114     0     0     0     0     0
[431]     0     0     0     0     0     0     0     0     0     0
[441]  2580     0     0     0     0     0  3411     0     0  2174
[451]     0     0     0     0     0     0     0     0     0     0
[461]     0     0     0     0     0     0     0     0     0     0
[471]     0     0     0     0  2907     0  4508     0     0     0
[481]     0     0     0 27828     0     0     0     0     0     0
[491]     0     0     0     0     0     0     0     0     0     0

下面是这一列的直方图:
hist.png

我按照他的方法,进行了cut2()处理:
>s<-as.numeric(cut2(t$capital_gain,g=10))
>head(s,500)
  [1] 1 1 1 2 1 1 1 2 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1
[31] 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1
[61] 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2
[91] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
[121] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2
[151] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[181] 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[211] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1
[241] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1
[271] 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1
[301] 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
[331] 1 1 1 2 1 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1
[361] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[391] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1
[421] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2
[451] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1
[481] 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
下面是处理后的直方图:
hist2.png
想问一下:
1.这么处理的作用是什么,有必要么,什么情况下这么处理,如果不处理,会影响数据的聚类结果么?
2.我查了一下关于Cut2函数的作用就是数据分箱,等宽分箱,as.numeic以后就显示为1和2,这个值是怎么计算出来的,是组内的平均值么?
3.从峰度和偏度的角度看,前后两个直方图的区别在哪?用什么函数能看到某一列数据峰度和偏度的值?
4.这个实例中,g=10,如果分段的话,应该分几段合适啊,这块有什么标准么?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


处理后hist2.png (3.41 KB)

处理后hist2.png

处理前hist.png (4.23 KB)

处理前hist.png

沙发
duxueyuan 在职认证  发表于 2017-7-11 14:26:16
    还是自己回复吧!
    这段时间经过学习,参考帮助文档,对Cut2()函数有了进一步的理解。
    简单来说Cut2()函数和Cut()函数基本是一样的,只是Cut2()要比Cut()更简便。Cut2()中主要2个参数,g和m,g就是你想分几段,m就是确定你想每段中有多少个变量。Cut2()的结果是factor,使用table()函数能看到每个段中变量的数量。as.numeric(Cut2()),结果就是变量所在的段。也就是把原先的大大小小的数值,经过分段后,转换成数值所在的段,起到了数据平滑处理的作用。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-20 11:07