Matlab 版 (精华区)

发信人: zjliu (秋天的萝卜), 信区: Matlab
标  题: 4.因子和有序因子
发信站: 哈工大紫丁香 (Sat Apr 24 13:38:21 2004), 站内信件

因子和有序因子
统计中的变量有两个重要类别:区间变量和名义变量、有序变量。区间变量取连续的数

值,可以进行求和、平均等运算。名义变量和有序变量取离散值,可以用数值代表也可

以是字符型值,其具体数值没有加减乘除的意义,不能用来计算而只能用来分类或者计

数。名义变量比如性别、省份、职业,有序变量比如班级名次。

因为离散变量有各种不同表示方法,在S中为统一起见使用因子(factor)来表示这种分类

变量。还提供了有序因子(ordered factor)来表示有序变量。因子是一种特殊的字符型

向量,其中每一个元素取一组离散值中的一个,而因子对象有一个特殊属性levels表示

这组离散值(用字符串表示)。例如:

> x <- c("男", "女", "男", "男", "女")                                       
                                          
> y <- factor(x)                                                              
                                          
> y                                                                           
                                          
[1] 男 女 男 男 女
Levels:  男 女


函数factor()用来把一个向量编码成为一个因子。其一般形式为:

factor(x, levels = sort(unique(x), na.last = TRUE), labels,

exclude = NA, ordered = FALSE)

可以自行指定各离散取值(水平levels),不指定时由x的不同值来求得。labels可以用

来指定各水平的标签,不指定时用各离散取值的对应字符串。exclude参数用来指定要转

换为缺失值(NA)的元素值集合。如果指定了levels,则因子的第i个元素当它等于水平

中第j个时元素值取"j",如果它的值没有出现在levels中则对应因子元素值取NA。order

ed取真值时表示因子水平是有次序的(按编码次序)。

可以用is.factor()检验对象是否因子,用as.vector()把一个向量转换成一个因子。

因子的基本统计是频数统计,用函数table()来计数。例如,

> sex = factor(c("男", "女", "男", "男", "女"))                               
                                          
> res.tab <- table(sex)                                                       
                                          
> res.tab                                                                     
                                          
男 女
3  2

表示男性3人,女性2人。table()的结果是一个带元素名的向量,元素名为因子水平,元

素值为该水平的出现频数。

从这个简单例子我们也可以看出S与SAS的一个区别:SAS的结果一般只显示出来,保存只

能存为数据集一种类型,不便于对中间结果进一步编程处理;而S的结果除了可以显示外

本身都是S对象(如这里的向量结果),可以很方便地进一步处理。

可以用两个或多个因子进行交叉分类。比如,性别(sex)和职业(job)交叉分组可以

用table(sex, job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,

分别为两个因子的各水平名。

因子可以用来作为另外的同长度变量的分类变量。比如,假设上面的sex是5个学生的性

别,而

> h <- c(165, 170, 168, 172, 159)                                             
                                          

是这5个学生的身高,则

> tapply(h, sex, mean)                                                        
                                          

可以求按性别分类的身高平均值。这样用一个等长的因子向量对一个数值向量分组的办

法叫做不规则数组(ragged array)。后面我们还可以看到更多的因子的应用。



--
╔═══════════════════╗
║★★★★★友谊第一  比赛第二★★★★★║
╚═══════════════════╝

※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 202.118.229.162]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.681毫秒