【问题标题】:Calculate skew and kurtosis by year in R在R中按年份计算偏斜和峰度
【发布时间】:2019-10-21 17:42:08
【问题描述】:

我有一张如下所示的表格:

start_table <- data.frame("Water_Year" =  c("1903", "1903", "1904", "1904"), "X" = c(13, 11, 12, 
15), "Day" = c(1, 2, 1, 2))

(“天”列不参与我的偏斜峰度计算,它只是在我的表中)

我想要一个计算按年份分组的偏斜和峰度值的表格:

end_table <- data.frame("Water_Year" =  c("1903", "1904"), "Skew" = c("skew_number_here", 
"skew_number_here"), "Kurtosis" = c("kurtosis_number_here", "kurtosis_number_here"))

我不知道如何按年份对其进行分组来执行这些计算。

【问题讨论】:

    标签: r skew group-summaries kurtosis


    【解决方案1】:

    您还可以定义偏度/峰度函数:

    kurtosis <- function(x) {  
     m4 <- mean((x - mean(x))^4) 
     kurtosis <- m4/(sd(x)^4) - 3  
     kurtosis
    }
    
    skewness <-  function(x) {
     m3 <- mean((x - mean(x))^3)
     skewness <- m3/(sd(x)^3)
     skewness
    }
    

    然后,将其应用到base R

    aggregate(X ~ Water_Year, 
              FUN = function(x) c(kurtosis = kurtosis(x), skewness = skewness(x)),
              data = start_table)
    
      Water_Year X.kurtosis X.skewness
    1       1903      -2.75       0.00
    2       1904      -2.75       0.00
    

    【讨论】:

      【解决方案2】:

      一个选项是group_by/summarise

      library(dplyr)
      library(moments)
      start_table %>% 
         group_by(Water_Year) %>%
         summarise(Skew = skewness(X), Kurtosis = kurtosis(X))
      

      【讨论】:

        【解决方案3】:

        fBasicsdata.table 一起使用:

        library(fBasics)
        library(data.table)
        
        setDT(start_table)[, .(Skew = skewness(X), Kurtosis=kurtosis(X)), .(Water_Year)][]
        
        #>    Water_Year Skew Kurtosis
        #> 1:       1903    0    -2.75
        #> 2:       1904    0    -2.75
        

        【讨论】:

          猜你喜欢
          • 2020-04-16
          • 2013-03-28
          • 2019-04-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-15
          • 2023-03-06
          • 2018-10-09
          相关资源
          最近更新 更多