R 从某些百分位数得到对数正态分布
我想在Stata或R做点什么 我有工资分布的百分位数(百分位数10,25,50,75,90),我想估计一个对数正态分布来拟合它们。在Stata中,有一个命令R 从某些百分位数得到对数正态分布,r,logging,stata,distribution,normal-distribution,R,Logging,Stata,Distribution,Normal Distribution,我想在Stata或R做点什么 我有工资分布的百分位数(百分位数10,25,50,75,90),我想估计一个对数正态分布来拟合它们。在Stata中,有一个命令lognfit,它将对数正态分布拟合到单位记录数据,但不拟合到百分位点 是否值得使用Stata的gmm命令,使用我的五个数据点来估计作为过度识别系统的对数正态分布的两个参数?这里是一个Stata解决方案 我把gmm的魅力留给了其他人。您还可以将记录的分位数回归到标准正态分布的相应分位数上。下面是嵌入在实验中的代码,以查看该方法的工作情况。我们
lognfit
,它将对数正态分布拟合到单位记录数据,但不拟合到百分位点
是否值得使用Stata的
gmm
命令,使用我的五个数据点来估计作为过度识别系统的对数正态分布的两个参数?这里是一个Stata解决方案
我把gmm
的魅力留给了其他人。您还可以将记录的分位数回归到标准正态分布的相应分位数上。下面是嵌入在实验中的代码,以查看该方法的工作情况。我们根据对数正态分布生成1000个样本,每个样本的大小为1000,对数正态分布的平均值为1,标准差为2。这里是执行所有回归的rangestat
,每个样本一个
clear
set obs 1000000
set seed 1066
set scheme s1color
gen y = exp(rnormal(1, 2))
egen sample = seq(), block(1000)
collapse (p10) y10=y (p25) y25=y (p50) y50=y (p75) y75=y (p90) y90=y, by(sample)
reshape long y, i(sample) j(p)
gen pred = invnormal(p/100)
gen log_y = log(y)
* must install from SSC using: ssc install rangestat
rangestat (reg) log_y pred, interval(sample 0 0)
qnorm b_cons if p==10, name(G1) yli(1) ytitle("") subtitle(mean known to be 1) yla(, ang(h))
qnorm b_pred if p==10, name(G2) yli(2) ytitle("") subtitle(SD known to be 2) yla(, ang(h))
graph combine G1 G2
这里有一个Stata解决方案 我把
gmm
的魅力留给了其他人。您还可以将记录的分位数回归到标准正态分布的相应分位数上。下面是嵌入在实验中的代码,以查看该方法的工作情况。我们根据对数正态分布生成1000个样本,每个样本的大小为1000,对数正态分布的平均值为1,标准差为2。这里是执行所有回归的rangestat
,每个样本一个
clear
set obs 1000000
set seed 1066
set scheme s1color
gen y = exp(rnormal(1, 2))
egen sample = seq(), block(1000)
collapse (p10) y10=y (p25) y25=y (p50) y50=y (p75) y75=y (p90) y90=y, by(sample)
reshape long y, i(sample) j(p)
gen pred = invnormal(p/100)
gen log_y = log(y)
* must install from SSC using: ssc install rangestat
rangestat (reg) log_y pred, interval(sample 0 0)
qnorm b_cons if p==10, name(G1) yli(1) ytitle("") subtitle(mean known to be 1) yla(, ang(h))
qnorm b_pred if p==10, name(G2) yli(2) ytitle("") subtitle(SD known to be 2) yla(, ang(h))
graph combine G1 G2
谢谢大家的回复 我尝试了两个程序。例如,在R中,我使用包
库(rriskDistributions)
,具体如下
## example with only two quantiles
q <- stats::qlnorm(p = c(0.025, 0.975), meanlog = 4, sdlog = 0.8)
old.par <- graphics::par(mfrow = c(2, 3))
get.lnorm.par(p = c(0.025, 0.975), q = q)
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(100, 1),
scaleX = c(0.1, 0.001))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(1, 100),
scaleX = c(0.1, 0.001))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(10, 1))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(1, 10))
graphics::par(old.par)
这是第一次尝试使用GMM,当然我遗漏了一些东西
尼克·考克斯的回答很好。我将尝试用这种方法来拟合我的数据。谢谢大家的回答 我尝试了两个程序。例如,在R中,我使用包
库(rriskDistributions)
,具体如下
## example with only two quantiles
q <- stats::qlnorm(p = c(0.025, 0.975), meanlog = 4, sdlog = 0.8)
old.par <- graphics::par(mfrow = c(2, 3))
get.lnorm.par(p = c(0.025, 0.975), q = q)
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(100, 1),
scaleX = c(0.1, 0.001))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(1, 100),
scaleX = c(0.1, 0.001))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(10, 1))
get.lnorm.par(p = c(0.025, 0.975), q = q, fit.weights = c(1, 10))
graphics::par(old.par)
这是第一次尝试使用GMM,当然我遗漏了一些东西
尼克·考克斯的回答很好。我将尝试用这种方法来拟合我的数据。Answer.Answer.Answer.Answer。