使用从 2 个数据集计算的 RMSE,我如何将 RMSE 与某种精度联系起来(即 95% 的数据点在 +/- X cm 内)?
看看一个几乎重复的问题:RMSE 的置信区间?
我的大型数据集是正态分布的吗?
一个好的开始是观察z
值的经验分布。这是一个可重现的例子。
set.seed(1)
z <- rnorm(2000,2,3)
z.difference <- data.frame(z=z)
library(ggplot2)
ggplot(z.difference,aes(x=z)) +
geom_histogram(binwidth=1,aes(y=..density..), fill="white", color="black") +
ylab("Density") + xlab("Elevation differences (meters)") +
theme_bw() +
coord_flip()
乍一看,它看起来很正常,对吧?(实际上,我们知道这是正常的,因为rnorm
我们使用的命令)。
如果想分析数据集上的小样本,可以使用 Shapiro-Wilk 正态性检验。
z_sample <- sample(z.difference$z,40,replace=T)
shapiro.test(z_sample) #high p-value indicates the data is normal (null hypothesis)
Shapiro-Wilk normality test
data: z_sample
W = 0.98618, p-value = 0.8984 #normal
也可以在不同的小样本上多次重复 SW 测试,然后查看p-values
.
请注意,大型数据集的正态性测试并不像Greg Snow 提供的 答案中所解释的那么有用。
另一方面,对于非常大的数据集,中心极限定理开始发挥作用,对于常见的分析(回归、t 检验……),你真的不在乎人口是否是正态分布的。
好的经验法则是做一个 qq-plot 并问,这够正常吗?
所以,让我们做一个QQ图:
#qq-plot (quantiles from empirical distribution - quantiles from theoretical distribution)
mean_z <- mean(z.difference$z)
sd_z <- sd(z.difference$z)
set.seed(77)
normal <- rnorm(length(z.difference$z), mean = mean_z, sd = sd_z)
qqplot(normal, z.difference$z, xlab="Theoretical", ylab="Empirical")
如果点在y=x
直线上对齐,则表示经验分布与理论分布相匹配,在这种情况下为正态分布。