概述
一。基本概念
1.频数表是将数据集按照某个特定列分类(分组)时观察每个类/组中数据出现次数的表;
2.列联表是观测数据按两个或更多属性/定性变量分类时所列出的频数分布表,是由两个以上的变量进行交叉分类的频数分布表;
3.频数也称“次数”,对样本数据按某些属性进行分组,统计出各个组内含个体的个数,就是频数;
4.一维列联表就是频数分布表;
5.列联表分析的基本问题是:观察各属性之间是否独立,做简单的描述性统计。
二。创建频数表
频数表用于探索类别型变量,常用table()和 xtabs()来创建频数表:
1.table()使用N个类别变量(因子)创建一个N维列联表
- ...:一个或多个可以被解释为factor的对象
- exclude:如果数据中不包括NA,切useNA未指定,则useNA="ifany"(有疑惑)
- useNA:table()默认忽略NA,要在频数统计中将NA视为一个有效类别,设定useNA="ifany"
- dnn:在结果中给维度的命名,向量形式
- deparse.level:取值为0(dnn名称为空),1(以dnn命名),2(deparse the argument)
2.xtabs()根据一个公式(~var1+var2+...+varN)创建一个N维列联表。
- formula:公式,要进行交叉分类的变量应出现在公式的右侧,即 ~ 符号的右方,以+ 作为分割符。
- data:包括有公式中变量名的矩阵或数据框
- subset:指定data中观测的子集
- sparse:指定结果是否为sparse matrix
- na.action:一个函数,指定当包括NA时发生什么。若未指定且addNA为TRUE,则结果为na.pass
prop.table()以列联表作为参数,以margins定义的边际把列联表中的频数表示为比例关系。
margin.table()以列联表作为参数,以margins定义的边际列表来计算频数的和。
- table:列联表
- margins:边际列表,1是第一个分类变量(结果中的行变量),2为第二个分类变量(结果中的列变量)
3.gmodels包中CrossTable()函数
- x:向量或矩阵,当指定y时,x为矩阵
- y:矩阵或数据框中的向量
- digits:比例中小数点位数
- expect:TRUE时计算卡方检验
- prop.r:TRUE时,计算行比例
- prop.c:TRUE时,计算列比例
- prop.t:TRUE时,计算table比例
- chisq:TRUE时,将列出卡方检验结果
- fisher:TRUE时,TRUE时,将列出Fisher检验结果
- mcnemar:TRUE时,将列出McNemar检验结果
- resid:TRUE时,将列出Pearson检验结果
- sresid:TRUE时,将列出标准化残差结果
- asresid:TRUE时,将列出校正后标准化残差结果
- missing.include:TRUE时,删除未使用因子
- format:输出格式SAS(默认)、SPSS
例子:
> library(gmodels)
> CrossTable(Arthritis$Treatment, Arthritis$Improved)
#默认参数
Cell Contents
|-------------------------|
|
N |
| Chi-square contribution |
|
N / Row Total |
|
N / Col Total |
|
N / Table Total |
|-------------------------|
Total Observations in Table:
84
#总频数(总观察数目)
| Arthritis$Improved
Arthritis$Treatment |
None |
Some |
Marked | Row Total |
--------------------|-----------|-----------|-----------|-----------|
Placebo |
29 |
7 |
7 |
43 |
#频数
|
2.616 |
0.004 |
3.752 |
|
#prop.chisq = T
|
0.674 |
0.163 |
0.163 |
0.512 |
#prop.r = T (29/43)
|
0.690 |
0.500 |
0.250 |
|
#prop.c = T (29/42)
|
0.345 |
0.083 |
0.083 |
|
#prop.t = T (29/84)
--------------------|-----------|-----------|-----------|-----------|
Treated |
13 |
7 |
21 |
41 |
|
2.744 |
0.004 |
3.935 |
|
|
0.317 |
0.171 |
0.512 |
0.488 |
|
0.310 |
0.500 |
0.750 |
|
|
0.155 |
0.083 |
0.250 |
|
--------------------|-----------|-----------|-----------|-----------|
Column Total |
42 |
14 |
28 |
84 |
|
0.500 |
0.167 |
0.333 |
|
--------------------|-----------|-----------|-----------|-----------|
> CrossTable(Arthritis$Treatment, Arthritis$Improved,prop.r = F,prop.c = F,prop.t =
F,prop.chisq = T,chisq = T)
#比例计算F,chisq = T卡方检验
Cell Contents
|-------------------------|
|
N |
| Chi-square contribution |
|-------------------------|
Total Observations in Table:
84
| Arthritis$Improved
Arthritis$Treatment |
None |
Some |
Marked | Row Total |
--------------------|-----------|-----------|-----------|-----------|
Placebo |
29 |
7 |
7 |
43 |
|
2.616 |
0.004 |
3.752 |
|
--------------------|-----------|-----------|-----------|-----------|
Treated |
13 |
7 |
21 |
41 |
|
2.744 |
0.004 |
3.935 |
|
--------------------|-----------|-----------|-----------|-----------|
Column Total |
42 |
14 |
28 |
84 |
--------------------|-----------|-----------|-----------|-----------|
Statistics for All Table Factors
Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 =
13.05502
d.f. =
2
p =
0.001462643
#Chi^2=为prop.chisq各值之和,越大,Treatment与Improvement关系越小
#d.f.自由度
> CrossTable(Arthritis$Treatment, Arthritis$Improved,prop.r = F,prop.c = F,prop.t =
F,prop.chisq = T,chisq = F,fisher = T)
#Fisher检验
Cell Contents
|-------------------------|
|
N |
| Chi-square contribution |
|-------------------------|
Total Observations in Table:
84
| Arthritis$Improved
Arthritis$Treatment |
None |
Some |
Marked | Row Total |
--------------------|-----------|-----------|-----------|-----------|
Placebo |
29 |
7 |
7 |
43 |
|
2.616 |
0.004 |
3.752 |
|
--------------------|-----------|-----------|-----------|-----------|
Treated |
13 |
7 |
21 |
41 |
|
2.744 |
0.004 |
3.935 |
|
--------------------|-----------|-----------|-----------|-----------|
Column Total |
42 |
14 |
28 |
84 |
--------------------|-----------|-----------|-----------|-----------|
Fisher's Exact Test for Count Data
------------------------------------------------------------
Alternative hypothesis: two.sided
p =
0.001393195
#输出格式为SPSS
> CrossTable(Arthritis$Treatment, Arthritis$Improved,format = "SPSS")
Cell Contents
|-------------------------|
|
Count |
| Chi-square contribution |
|
Row Percent |
|
Column Percent |
|
Total Percent |
|-------------------------|
Total Observations in Table:
84
| Arthritis$Improved
Arthritis$Treatment |
None
|
Some
|
Marked
| Row Total |
--------------------|-----------|-----------|-----------|-----------|
Placebo |
29
|
7
|
7
|
43
|
|
2.616
|
0.004
|
3.752
|
|
|
67.442% |
16.279% |
16.279% |
51.190% |
|
69.048% |
50.000% |
25.000% |
|
|
34.524% |
8.333% |
8.333% |
|
--------------------|-----------|-----------|-----------|-----------|
Treated |
13
|
7
|
21
|
41
|
|
2.744
|
0.004
|
3.935
|
|
|
31.707% |
17.073% |
51.220% |
48.810% |
|
30.952% |
50.000% |
75.000% |
|
|
15.476% |
8.333% |
25.000% |
|
--------------------|-----------|-----------|-----------|-----------|
Column Total |
42
|
14
|
28
|
84
|
|
50.000% |
16.667% |
33.333% |
|
--------------------|-----------|-----------|-----------|-----------|
4.ftable()结果相较table()、xtabs()更为紧凑
- row.vars:结果中展示的变量行数(会更改行变量)
- col.vars:结果中展示的变量列数(会更改列变量)
table()、xtabs()与ftable()差别
> with(Arthritis,table(Treatment,Improved,Sex))
, , Sex = Female
Improved
Treatment None Some Marked
Placebo
19
7
6
Treated
6
5
16
, , Sex = Male
Improved
Treatment None Some Marked
Placebo
10
0
1
Treated
7
2
5
> xtabs(~ Treatment+Improved+Sex, data=Arthritis)
, , Sex = Female
Improved
Treatment None Some Marked
Placebo
19
7
6
Treated
6
5
16
, , Sex = Male
Improved
Treatment None Some Marked
Placebo
10
0
1
Treated
7
2
5
> with(Arthritis,ftable(Treatment,Improved,Sex))
#结果更紧凑,分组更详细
Sex Female Male
Treatment Improved
Placebo
None
19
10
Some
7
0
Marked
6
1
Treated
None
6
7
Some
5
2
Marked
16
5
三。将列联表转换为扁平格式
table2flat <- function(mytable){
df <- as.data.frame(mytable)
rows <- dim(df)[1]
cols <- dim(df)[2]
x <- NULL
for (i in 1:rows) {
for (j in 1:df$Freq[i]) {
row <- df[i,c(1:(cols-1))]
x <- rbind(x,row)
}
}
row.names(x) <- c(1:dim(x)[1])
return(x)
此函数可以接受R中表格(行列数任意)并返回一个扁平格式的数据框
最后
以上就是懦弱胡萝卜为你收集整理的频数表&频率表的全部内容,希望文章能够帮你解决频数表&频率表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复