给定变量均值和方差的估计值,我将如何绘制理论正态分布?
How would I plot the theoretical normal distribution given an estimate of the mean and variance of a variable?
我正在努力解决这个问题。假设可变里程是从正态分布的总体中抽样的,我将如何绘制理论正态分布给定均值和方差的估计值?
data <- read.csv("data.csv", sep = "\t", header = TRUE)
data
name mile
1 dat1 5039
2 dat1 2883
3 dat2 135
4 dat2 104
5 dat3 32
6 dat3 192
我得到了按英里计算的均值和方差,如下所示:
mean(data$mile)
[1] 1397.5
var(data$mile)
[1] 4410420
但我不确定这是否是问的问题。以前有没有人处理过这样的问题?任何帮助将不胜感激。
更新
pdf_norm <- function(x,mu,sigma){
1/(sqrt(2*pi*sigma^2))*exp(-(x - mu)^2/(2*sigma^2))
}
mu <- 1397.5
sigma <- 4410420
x <- seq(mu-3*sigma, mu+3*sigma,length.out = 100) # empirical rule 3 sigma rule
d <- pdf_norm(x, mu,sigma)
plot(x,d, xlab = "X", ylab = "density")
到这里我得到...
的输出
我尝试使用下面的代码将直方图叠加到上面的图上...
hist(data$mile, add = T)
但是结果是...
这显然是不对的。有人可以帮忙吗?
您可以使用rnorm()
函数从具有给定总体均值和标准差的正态分布生成随机值,然后使用density()
函数和plot()
函数来创建正态分布图。使用您的数据,您可以执行以下操作:
plot(density(rnorm(n = 100000, mean = mean(data$mile), sd = sd(data$mile))))
我使用 sd()
函数来计算标准差,但您也可以使用方差的平方根:sqrt(var(data$mile))
如果需要绘制理论分布图,需要先定义它的PDF(比如可以找到公式here):
pdf_norm <- function(x,mu,sigma){
1/(sqrt(2*pi*sigma^2))*exp(-(x - mu)^2/(2*sigma^2))
}
这里,x
是随机变量,mu
是均值,sigma
是标准差。
之后就可以进行绘图了。将 mu
和 sigma
设置为您的估计值并评估 PDF。使用 three-sigma rule.
选择范围
mu <- 1397.5
sigma <- 4410420
x <- seq(mu-3*sigma, mu+3*sigma,length.out = 100) # empirical rule 3 sigma rule
d <- pdf_norm(x, mu,sigma)
plot(x,d, xlab = "X", ylab = "density")
您还可以确保 PDF 大约集成到 1:
integrate(function(x) pdf_norm(x, mu, sigma), mu-3*sigma, mu+3*sigma)
输出
我正在努力解决这个问题。假设可变里程是从正态分布的总体中抽样的,我将如何绘制理论正态分布给定均值和方差的估计值?
data <- read.csv("data.csv", sep = "\t", header = TRUE)
data
name mile
1 dat1 5039
2 dat1 2883
3 dat2 135
4 dat2 104
5 dat3 32
6 dat3 192
我得到了按英里计算的均值和方差,如下所示:
mean(data$mile)
[1] 1397.5
var(data$mile)
[1] 4410420
但我不确定这是否是问的问题。以前有没有人处理过这样的问题?任何帮助将不胜感激。
更新
pdf_norm <- function(x,mu,sigma){
1/(sqrt(2*pi*sigma^2))*exp(-(x - mu)^2/(2*sigma^2))
}
mu <- 1397.5
sigma <- 4410420
x <- seq(mu-3*sigma, mu+3*sigma,length.out = 100) # empirical rule 3 sigma rule
d <- pdf_norm(x, mu,sigma)
plot(x,d, xlab = "X", ylab = "density")
到这里我得到...
的输出我尝试使用下面的代码将直方图叠加到上面的图上...
hist(data$mile, add = T)
但是结果是...
这显然是不对的。有人可以帮忙吗?
您可以使用rnorm()
函数从具有给定总体均值和标准差的正态分布生成随机值,然后使用density()
函数和plot()
函数来创建正态分布图。使用您的数据,您可以执行以下操作:
plot(density(rnorm(n = 100000, mean = mean(data$mile), sd = sd(data$mile))))
我使用 sd()
函数来计算标准差,但您也可以使用方差的平方根:sqrt(var(data$mile))
如果需要绘制理论分布图,需要先定义它的PDF(比如可以找到公式here):
pdf_norm <- function(x,mu,sigma){
1/(sqrt(2*pi*sigma^2))*exp(-(x - mu)^2/(2*sigma^2))
}
这里,x
是随机变量,mu
是均值,sigma
是标准差。
之后就可以进行绘图了。将 mu
和 sigma
设置为您的估计值并评估 PDF。使用 three-sigma rule.
mu <- 1397.5
sigma <- 4410420
x <- seq(mu-3*sigma, mu+3*sigma,length.out = 100) # empirical rule 3 sigma rule
d <- pdf_norm(x, mu,sigma)
plot(x,d, xlab = "X", ylab = "density")
您还可以确保 PDF 大约集成到 1:
integrate(function(x) pdf_norm(x, mu, sigma), mu-3*sigma, mu+3*sigma)
输出