检验某学区所有在售房源中,小区与楼栋类别(低层;多层;小高层;高层)是否相关
导入数据:
> house<- read.table("house_data.txt", header = TRUE, sep='|',fileEncoding ="UTF-8",
stringsAsFactors = FALSE,
colClasses = c("character","character","numeric",
"character","numeric","numeric","character",
"numeric","numeric","character"))
> library(sqldf)
> houseXQ<- sqldf("select * from house where community_name!='东郊小镇' ",row.names=TRUE)
> head(houseXQ)
结果如下:
id community_name house_area house_structure house_total house_avg agency_name house_floor_curr house_floor_total |
生成列联表(频数表):
> houseTable<- xtabs(~community_name + house_floor_type, data=houseXQ)
看一下新表格:
> houseTable
结果如下:
house_floor_type
community_name None 低层 多层 高层 小高层
东方天郡 0 1 2 46 2
康桥圣菲 0 1 8 0 0
南师大茶苑 1 0 0 0 0
赛世香樟园 0 0 0 2 1
三味公寓 0 0 2 0 0
尚东花园 0 0 1 0 0
仙鹤山庄 0 0 1 0 0
仙林新村 0 0 7 0 0
亚东城 0 0 1 46 62
雁鸣山庄 0 0 4 0 0
咏梅山庄 0 0 1 0 0
从数据可以直观看出来,康桥圣菲可能都是多层的,亚东城是小高层(11层)和高层(18层)
使用 CrossTable()函数生成频数表:
> CrossTable(houseXQ$community_name, houseXQ$house_floor_type)
结果如下:
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------| Total Observations in Table: 189 | houseXQ$house_floor_type
houseXQ$community_name | None | 低层 | 多层 | 高层 | 小高层 | Row Total |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
东方天郡 | 0 | 1 | 2 | 46 | 2 | 51 |
| 0.270 | 0.393 | 3.835 | 16.787 | 13.768 | |
| 0.000 | 0.020 | 0.039 | 0.902 | 0.039 | 0.270 |
| 0.000 | 0.500 | 0.074 | 0.489 | 0.031 | |
| 0.000 | 0.005 | 0.011 | 0.243 | 0.011 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
康桥圣菲 | 0 | 1 | 8 | 0 | 0 | 9 |
| 0.048 | 8.595 | 35.063 | 4.476 | 3.095 | |
| 0.000 | 0.111 | 0.889 | 0.000 | 0.000 | 0.048 |
| 0.000 | 0.500 | 0.296 | 0.000 | 0.000 | |
| 0.000 | 0.005 | 0.042 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
南师大茶苑 | 1 | 0 | 0 | 0 | 0 | 1 |
| 187.005 | 0.011 | 0.143 | 0.497 | 0.344 | |
| 1.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.005 |
| 1.000 | 0.000 | 0.000 | 0.000 | 0.000 | |
| 0.005 | 0.000 | 0.000 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
赛世香樟园 | 0 | 0 | 0 | 2 | 1 | 3 |
| 0.016 | 0.032 | 0.429 | 0.173 | 0.001 | |
| 0.000 | 0.000 | 0.000 | 0.667 | 0.333 | 0.016 |
| 0.000 | 0.000 | 0.000 | 0.021 | 0.015 | |
| 0.000 | 0.000 | 0.000 | 0.011 | 0.005 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
三味公寓 | 0 | 0 | 2 | 0 | 0 | 2 |
| 0.011 | 0.021 | 10.286 | 0.995 | 0.688 | |
| 0.000 | 0.000 | 1.000 | 0.000 | 0.000 | 0.011 |
| 0.000 | 0.000 | 0.074 | 0.000 | 0.000 | |
| 0.000 | 0.000 | 0.011 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
尚东花园 | 0 | 0 | 1 | 0 | 0 | 1 |
| 0.005 | 0.011 | 5.143 | 0.497 | 0.344 | |
| 0.000 | 0.000 | 1.000 | 0.000 | 0.000 | 0.005 |
| 0.000 | 0.000 | 0.037 | 0.000 | 0.000 | |
| 0.000 | 0.000 | 0.005 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
仙鹤山庄 | 0 | 0 | 1 | 0 | 0 | 1 |
| 0.005 | 0.011 | 5.143 | 0.497 | 0.344 | |
| 0.000 | 0.000 | 1.000 | 0.000 | 0.000 | 0.005 |
| 0.000 | 0.000 | 0.037 | 0.000 | 0.000 | |
| 0.000 | 0.000 | 0.005 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
仙林新村 | 0 | 0 | 7 | 0 | 0 | 7 |
| 0.037 | 0.074 | 36.000 | 3.481 | 2.407 | |
| 0.000 | 0.000 | 1.000 | 0.000 | 0.000 | 0.037 |
| 0.000 | 0.000 | 0.259 | 0.000 | 0.000 | |
| 0.000 | 0.000 | 0.037 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
亚东城 | 0 | 0 | 1 | 46 | 62 | 109 |
| 0.577 | 1.153 | 13.636 | 1.244 | 16.030 | |
| 0.000 | 0.000 | 0.009 | 0.422 | 0.569 | 0.577 |
| 0.000 | 0.000 | 0.037 | 0.489 | 0.954 | |
| 0.000 | 0.000 | 0.005 | 0.243 | 0.328 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
雁鸣山庄 | 0 | 0 | 4 | 0 | 0 | 4 |
| 0.021 | 0.042 | 20.571 | 1.989 | 1.376 | |
| 0.000 | 0.000 | 1.000 | 0.000 | 0.000 | 0.021 |
| 0.000 | 0.000 | 0.148 | 0.000 | 0.000 | |
| 0.000 | 0.000 | 0.021 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
咏梅山庄 | 0 | 0 | 1 | 0 | 0 | 1 |
| 0.005 | 0.011 | 5.143 | 0.497 | 0.344 | |
| 0.000 | 0.000 | 1.000 | 0.000 | 0.000 | 0.005 |
| 0.000 | 0.000 | 0.037 | 0.000 | 0.000 | |
| 0.000 | 0.000 | 0.005 | 0.000 | 0.000 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
Column Total | 1 | 2 | 27 | 94 | 65 | 189 |
| 0.005 | 0.011 | 0.143 | 0.497 | 0.344 | |
-----------------------|-----------|-----------|-----------|-----------|-----------|-----------|
独立性检验
1、卡方检验:对二维表的行变量和列变量进行卡方独立性检验。
卡方分布—— n个独立的标准正态分布变量的平方和服从自由度为 n 的卡方分布(分类资料相关性检验)
http://www.cnblogs.com/quietwalk/p/8276097.html
假设:楼盘与类型相互独立,没有相关性。
对上面生成的列联表 houseTable 进行卡方检验:
> chisq.test(houseTable)
结果:
Pearson's Chi-squared test data: houseTable
X-squared = 403.62, df = 40, p-value < 2.2e-16 Warning message:
In chisq.test(houseTable) : Chi-squared近似算法有可能不准
P值 <0.05进行说明假设【楼盘与类型相互独立,没有相关性】不成立。
也就是说,哪个小区里面有什么样的楼(是低层,多层,小高层,高层)是确定的(因为早在建造前规划的时候就定了呀~~~) 不可能说要建个小区,然后开发商掷个东南西北的色子:
如果结果是东,就建低层;如果结果是西,就建多层;如果结果是南,就建小高层;如果结果是北,就建高层。
如果是这样的话,那么小区与楼的类型就没有相关性。 2、Fisher精确检验:原假设为——边界固定的列联表中行和列是相互独立的。
>fisher.test(houseTable,simulate.p.value=TRUE,B=2000)
结果为:
Fisher's Exact Test for Count Data with simulated p-value (based on 2000 replicates) data: houseTable
p-value = 0.0004998
alternative hypothesis: two.sided 说明:可以看出,p值<0.05,原假设不成立,即相互独立不成立,
houseXQ$community_name 与 houseXQ$house_floor_type具有相关性。
注意:如果直接用fisher.test(houseTable)会报以下错误:
FEXACT error 6.
LDKEY is too small for this problem.
Try increasing the size of the workspace.
但是如果simulate.p.value=TRUE,B=2000,设置了蒙特卡洛模拟和模拟次数,用fisher检验就不会出错。 3、 Cochran-Mantel-Haenszel 检验
原假设为:两个类别变量在第三个变量的每一层中都是条件独立的。
>houseTable<- xtabs(~community_name + house_floor_type + house_structure, data=houseXQ)
>houseTable
> mantelhaen.test(houseTable)
Error in mantelhaen.test(houseTable) : 每个阶层里的样本大小都必需大于一