R中的分布拟合
distribution fitting in R
我想拟合一个分布。
如果我有一个数据集,我可以很容易地做到这一点:
library("fitdistrplus")
data_raw <- c(1018259, 1191258, 1265953, 1278234, 1630327, 1780896, 1831466, 1850446, 1859801, 1928695, 2839345, 2918672, 3058274, 3303089, 3392047, 3581341, 4189346, 5966833, 11451508)
fitdist(data_raw, "lnorm")
这就是我要使对数正态分布适合我的数据集的方法。
但是,如果我没有数据集,只有均值、标准差和一些分位数怎么办。例如:
平均值:2965042
std.dev: 2338555
分位数:
0.1: 1251014
0.5: 1928695
0.8: 3467765
0.9: 4544843
0.95: 6515300
0.999: 11352784
您将如何继续对此类数据进行估算?
谢谢你和最好的问候
诺比
只需将模型拟合为 nls
:
DF <- read.table(text = "0.1: 1251014
0.5: 1928695
0.8: 3467765
0.9: 4544843
0.95: 6515300
0.999: 11352784 ", sep = ":")
plot(V1 ~ V2, data = DF,
xlim = c(0, 1.2e7),ylim = c(0, 1))
fit <- nls(V1 ~ plnorm(V2, meanlog, sdlog), data = DF,
start = list(meanlog = 13, sdlog = 2), trace = TRUE, algorithm = "port",
lower = c(0, 0))
summary(fit)
curve(plnorm(x, coef(fit)[[1]], coef(fit)[[2]]), add = TRUE, col = "blue")
我想拟合一个分布。 如果我有一个数据集,我可以很容易地做到这一点:
library("fitdistrplus")
data_raw <- c(1018259, 1191258, 1265953, 1278234, 1630327, 1780896, 1831466, 1850446, 1859801, 1928695, 2839345, 2918672, 3058274, 3303089, 3392047, 3581341, 4189346, 5966833, 11451508)
fitdist(data_raw, "lnorm")
这就是我要使对数正态分布适合我的数据集的方法。
但是,如果我没有数据集,只有均值、标准差和一些分位数怎么办。例如:
平均值:2965042
std.dev: 2338555
分位数:
0.1: 1251014
0.5: 1928695
0.8: 3467765
0.9: 4544843
0.95: 6515300
0.999: 11352784
您将如何继续对此类数据进行估算?
谢谢你和最好的问候
诺比
只需将模型拟合为 nls
:
DF <- read.table(text = "0.1: 1251014
0.5: 1928695
0.8: 3467765
0.9: 4544843
0.95: 6515300
0.999: 11352784 ", sep = ":")
plot(V1 ~ V2, data = DF,
xlim = c(0, 1.2e7),ylim = c(0, 1))
fit <- nls(V1 ~ plnorm(V2, meanlog, sdlog), data = DF,
start = list(meanlog = 13, sdlog = 2), trace = TRUE, algorithm = "port",
lower = c(0, 0))
summary(fit)
curve(plnorm(x, coef(fit)[[1]], coef(fit)[[2]]), add = TRUE, col = "blue")