# [R] [FORGED] Re: Weighted skewness and curtosis

SEMson niels at ohlsen-web.de
Tue Sep 22 16:05:18 CEST 2015

```I´m also looking for an answer on this question right now.

You can´t use a weight in the moments package, but i found a
weighted.moments()-function in the acid-package ( weighted.moments-function
<https://github.com/cran/acid/blob/master/R/weighted.moments.R>  ). If your
data has NA, you can do the following:

#-----------------------------------------------------------------
skew <- function(x,weight){
weight<-weight[!is.na(x)]  #delete weight for cases with NA
x<-x[!is.na(x)]                 # delete NA
acid::weighted.moments(x, w8=weight) #calulate moments
}
skew(mydata\$var,weight)
#-----------------------------------------------------------------

I also tried to write a weighted-skew-function by myself:
The result is different from the acid-package: i get a skew of 0.7692313.
Perhaps, because x and length(x) aren´t weighted here. The unweighted skew
was 0.58 btw.
#-----------------------------------------------------------------
skew.wtd <- function(x,weight){
weight<-weight[!is.na(x)]
x<-x[!is.na(x)]
sum.w <- sum(weight)
sum.w2 <- sum(weight^2)
mean.w <- sum(x * weight) / sum(weight)
x.sd.w<-sqrt((sum.w / (sum.w^2 - sum.w2)) * sum(weight * (x - mean.w)^2))
((sum(((x - mean.w)/ x.sd.w)^3))/(length(x) - 1))
}
skew.wtd(mydata\$var,weight)
#-----------------------------------------------------------------

Because the acid-package doesn´t give a weighted kurtosis, i tried the
following:
#-----------------------------------------------------------------
kurt <- function(x,weight){
weight<-weight[!is.na(x)]
x<-x[!is.na(x)]
mean.w <- sum(x * weight) / sum(weight)
sum.w <- sum(weight)
sum.w2 <- sum(weight^2)
x.sd.w<-sqrt((sum.w / (sum.w^2 - sum.w2)) * sum(weight * (x - mean.w)^2))
#((sum(((x - mean.w)/(sd(x)))^4))/(length(x) - 1))         #formula A
(((sum(((x - mean(x))/(sd(x)))^4))/(length(x) - 1)) - 3)   #formula B
}
kurt(mydata\$var,weight)
# weighted Kurtosis is -0.7127631

#-----------------------------------------------------------------
kurtosis<-function(x,weight) {
weight<-weight[!is.na(x)]
x<-x[!is.na(x)]
mean.w <- sum(x * weight) / sum(weight)
sum.w <- sum(weight)
sum.w2 <- sum(weight^2)
x.sd.w<-sqrt((sum.w / (sum.w^2 - sum.w2)) * sum(weight * (x - mean.w)^2))
m4<-mean((x - mean.w)^4)                                         #formula
C
kurt<-m4/(x.sd.w^4)-3
kurt}
kurtosis(mydata\$var,weight)

# weighted Kurtosis is -0.5076363
# unweighted Kurtosis was -0.72
#-----------------------------------------------------------------

--
View this message in context: http://r.789695.n4.nabble.com/Weighted-skewness-and-curtosis-tp4709956p4712612.html
Sent from the R help mailing list archive at Nabble.com.

```