模拟RStudio

Simulation RStudio

我在 R 中使用包 fGarch 来模拟偏态正态分布。 我的统计如下:

平均值 = 155

标准差 = 35

中位数 = 150

我使用公式:(3*(mean-median))/sd 来计算偏度,结果为 0.427857 我使用了以下代码:

x <- rsnorm(10000,mean = 155,sd=35,xi=0.427857)
plot(density(x))

然而,即使我的偏度参数是正的,显示的图还是负偏的。 我 运行 代码几次以确保它不是一次性的。 我似乎找不到错误(因为我预计它是正偏斜的)。请帮忙。

偏度的定义有很多,例如您使用的Pearson's second skewnessfGarch中的偏度Xi是基于一篇论文(Fernandez & Steel 2000),是正负方向的逆比例因子。

如下图所示,反转偏度Xi会在零附近产生镜像。当Xi = 1时,分布是对称的。当 0 < Xi < 1 时,负偏斜。当Xi > 1时,正偏斜。

在您的示例中,均值偏向中值右侧。所以我们正在寻找正偏斜 (Xi > 1)。通过反复试验, Xi 可能位于 1.094095 附近。分位数函数qsnorm(0.5, Mean, Sd, xi=1.094095)给出的中值确实是150.

然而,模拟的中位数有点偏差,这会导致意外的 Pearson 二次偏度。

Mean <- 155
Sd <- 35
Median <- 150
3 * (Mean - Median) / Sd #Pearson's second skewness
#0.4285714

library(fGarch)
set.seed(1)
x <- rsnorm(100000, Mean, Sd, xi=1.094095)

mean(x)
#154.9353
sd(x)
#35.07564
median(x) #a bit higher than expected
#153.9029
3 * (mean(x) - median(x)) / sd(x) #biased from expected
#0.08830281

最后,使用通用优化optim方法定位Xi的代码。

fn <- function(log_Xi, Mean, Sd, Median) {
  abs(qsnorm(0.5, Mean, Sd, exp(log_Xi)) - Median)
  }

tem <- optim(0, fn, gr=NULL, Mean, Sd, Median)
Xi <- exp(tem$par)
#1.094095

以及上面密度图的代码。

x_ <- seq(-5,5, by=0.01)
plot(x_, dsnorm(x_, xi=3), type='l', ylab='density', col='red', xlab='x', main='Skewness')
lines(x_, dsnorm(x_, xi=1), col='black', lty=2)
lines(x_, dsnorm(x_, xi=1/3), col='blue')
legend('topright', legend=c('3','1','1/3'), fill=c('red','black','blue'), title='Xi')