R語言的xtabs函數

今天在作一個列聯表獨立性檢驗的時候,老是沒法處理好要求的數據類型,偶然的機會,看到了xtabs()函數,感受很適合用來作列聯表,適合將一列數據轉換成列聯表。函數

shifou <- c("yes","yes","no","no")
xinbie <- c("nan","nv","nan","nv")
freq <- c(34,38,28,50)
(exer6_2 <- data.frame(shifou,xinbie,freq))
(count22 <- xtabs(freq~.,data = exer6_2))#這個點表示shifou + xinbie,這個和lm()用法差很少
assocstats(count22)

  運行過程與結果以下:code

> shifou <- c("yes","yes","no","no")#是否逃課
> xinbie <- c("nan","nv","nan","nv")#性別
> freq <- c(34,38,28,50)
> (exer6_2 <- data.frame(shifou,xinbie,freq))#「nan」表示男,「nv」表示女,yes表示逃課,no表示不逃課
  shifou xinbie freq
1    yes    nan   34
2    yes     nv   38
3     no    nan   28
4     no     nv   50
> (count22 <- xtabs(freq~.,data = exer6_2))#這個數據表示性別與性別是否有關
      xinbie
shifou nan nv
   no   28 50
   yes  34 38
> assocstats(count22)
                    X^2 df P(> X^2)
Likelihood Ratio 1.9830  1  0.15908
Pearson          1.9802  1  0.15937
#這個p值爲0.15937大於0.05,表示與性別沒有關係 Phi-Coefficient : 0.115 Contingency Coeff.: 0.114 Cramer's V : 0.115

  接下來,建立一個更加難的數據集blog

(價格 <- rep(c("10萬如下","10~20萬","20~30萬","30萬以上"),each = 3))
(地區 <- rep(c("東部","中部","西部"),each = 1,times = 4))
(數量 <- c(20,40,40,50,60,50,30,20,20,40,20,10))
(銷售狀況 <- data.frame(價格,地區,數量))
(count2 <- xtabs(數量 ~ (價格 + 地區),data = 銷售狀況))

  運算過程:ci

> (價格 <- rep(c("10萬如下","10~20萬","20~30萬","30萬以上"),each = 3))
 [1] "10萬如下" "10萬如下" "10萬如下" "10~20萬"  "10~20萬"  "10~20萬"  "20~30萬" 
 [8] "20~30萬"  "20~30萬"  "30萬以上" "30萬以上" "30萬以上"
> (地區 <- rep(c("東部","中部","西部"),each = 1,times = 4))
 [1] "東部" "中部" "西部" "東部" "中部" "西部" "東部" "中部" "西部" "東部" "中部"
[12] "西部"
> (數量 <- c(20,40,40,50,60,50,30,20,20,40,20,10))
 [1] 20 40 40 50 60 50 30 20 20 40 20 10
> (銷售狀況 <- data.frame(價格,地區,數量))
       價格 地區 數量
1  10萬如下 東部   20
2  10萬如下 中部   40
3  10萬如下 西部   40
4   10~20萬 東部   50
5   10~20萬 中部   60
6   10~20萬 西部   50
7   20~30萬 東部   30
8   20~30萬 中部   20
9   20~30萬 西部   20
10 30萬以上 東部   40
11 30萬以上 中部   20
12 30萬以上 西部   10
> (count2 <- xtabs(數量 ~ (價格 + 地區),data = 銷售狀況))
          地區
價格       東部 西部 中部
  10~20萬    50   50   60
  10萬如下   20   40   40
  20~30萬    30   20   20
  30萬以上   40   10   20

  能夠看出這個count2也構成了這個列聯表的形式,接下來,使用 chisq.test()函數即可進行卡方檢驗io

> chisq.test(count2)

	Pearson's Chi-squared test

data:  count2
X-squared = 29.991, df = 6, p-value = 3.946e-05
相關文章
相關標籤/搜索