• 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) 
    

      运行过程与结果如下:

    > 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

      接下来,创建一个更加难的数据集

    (价格 <- 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 = 销售情况))
    

      运算过程:

    > (价格 <- 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()函数便可进行卡方检验

    > chisq.test(count2)
    
    	Pearson's Chi-squared test
    
    data:  count2
    X-squared = 29.991, df = 6, p-value = 3.946e-05
    

      

  • 相关阅读:
    postgresql强制删除数据库
    oracle ORA-31655
    oracle 删除表空间与用户
    Nginx 配置文件说明
    docker学习笔记---基本命令
    SSH的 Write failed: Broken pipe 问题
    nginx 修改文件上传大小限制
    "echo 0 /proc/sys/kernel/hung_task_timeout_secs" disable this message
    Centos8 配置静态IP
    Prometheus Node_exporter 详解
  • 原文地址:https://www.cnblogs.com/yuanzhoulvpi/p/8387019.html
Copyright © 2020-2023  润新知