【问题标题】:R calculate the correlation coefficientR计算相关系数
【发布时间】:2021-10-16 09:25:20
【问题描述】:

我有一个包含 3 个变量“年龄”、“信心”和“国家名称”的数据框。我想计算不同国家的年龄和信心之间的相关性。所以我编写了以下命令来计算相关系数。

correlate <- evs%>%group_by(countryname) %>% summarise(c=cor(age,confidence))  

但我发现输出“c”中有很多缺失值。我想知道这是否意味着这些国家/地区的 IV 和 DV 之间几乎没有相关性,还是我的命令有问题?

【问题讨论】:

    标签: r


    【解决方案1】:

    相关矩阵中的NA 表示您的观察中有NA 值(即缺失值)。 cor 的默认行为是返回 NA 的相关性“只要其贡献的观察结果之一是 NA”(来自手册)。

    这意味着日期中的单个NA 将给出NA 的相关性,即使您在一千个有用的数据集中只有一个NA。

    你可以从这里做什么:

    1. 您应该调查这些 NA,对其进行计数并确定您的数据集是否包含足够的可用数据。找出哪些变量受 NA 影响以及影响程度。
    2. 在调用cor 时添加参数use。通过这种方式,您可以指定算法应如何处理缺失值。查看手册(?cor)以了解您有哪些选择。在你的情况下,我只会使用use="complete.obs"。只有 2 个变量,大多数(但不是全部)选项将产生相同的结果。

    更多解释:

    age <- 18:35
    confidence <- (age - 17) / 10 + rnorm(length(age))
    cor(age, confidence)
    #> [1] 0.3589942
    

    以上是与所有数据的相关性。现在让我们设置一些 NA 并重试:

    confidence[c(1, 6, 11, 16)] <- NA
    cor(age, confidence) # use argument will implicitely be "everything".
    #> [1] NA
    

    这给出了NA,因为一些置信度值为NA。 下一条语句仍然给出结果:

    cor(age, confidence, use="complete.obs")
    #> [1] 0.3130549
    

    由reprex package (v2.0.1) 于 2021-10-16 创建

    【讨论】:

    • 非常感谢cmets!真的很具体,很有帮助!我试试!
    【解决方案2】:

    我知道R中的两种计算方式;

    • 通过内置的 cor() 函数,
    • 使用代码手动计算

    使用内置cor()函数计算:

    # importing df: 
    state_crime <- read.csv("~/Documents/R/state_crime.csv")
    
    # checking colnames: 
    colnames(state_crime)  
    [1] "state"  "year" "population"
    [4] "murder_rate"          
    
    # correlation coefficient between population and murder rate:
    cor(state_crime$population, state_crime$murder_rate,
        method = "pearson") 
    
    [1] -0.0322388
    

    使用代码手动计算:

    # creating columns for "deviation from the mean" for both variables: 
    
    state_crime <- state_crime %>%   
      mutate(dev_mean_murderrate = 
               (state_crime$murder_rate - mean(murder_rate))) %>%
      mutate(dev_mean_population =
               (state_crime$population - mean(population))) %>%   
      data.frame()
    
    # implementing the formula: r=∑(x−mx)(y−my)∑(x−mx)2∑(y−my)2      
    sum(state_crime$dev_mean_population * state_crime$dev_mean_murderrate) / 
      sqrt(sum((state_crime$murder_rate - mean(state_crime$murder_rate))**2) * 
             sum((state_crime$population - mean(state_crime$population))**2)
           )  
    
    [1] -0.0322388
    

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 2012-06-25
      • 2017-08-18
      • 2012-09-18
      • 2021-12-24
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2019-12-10
      相关资源
      最近更新 更多