模拟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 skewness。 fGarch
中的偏度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')
我在 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 skewness。 fGarch
中的偏度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')