我试图在R中获得Shapiro Wilk测试的临界W值。
Shapiro-Wilk normality test
data: samplematrix[, 1]
W = 0.69661, p-value = 7.198e-09
当n = 50且alpha = .05时,通过进行临界值表,我知道临界值W = .947。但是,如何使用R?
获得此关键值答案 0 :(得分:3)
直接计算关键值并不容易(见CrossValidated answer);我在这里得到的内容与答案中的内容基本相同(尽管我独立提出了它,并且通过使用顺序统计而不是随机样本,它略微改进了答案)。我们的想法是,我们可以逐渐使样本更加非正常,直到获得所需的p值(在这种情况下为0.05),然后看看哪个W统计量对应于该样本。
can only concatenate list (not "int") to list
答案(0.9540175)与你得到的答案并不完全相同,因为R使用Shapiro-Wilk测试的近似值。据我所知,实际的S-W临界值表完全来自Shapiro和Wilk 1965 Biometrika http://www.jstor.org/stable/2333709 p。 605,仅表示“基于拟合Johnson(1949)S_B近似,详见Shapiro和Wilk 1965a” - “Shapiro和Wilk 1965a”是指未发表的手稿! (S& W基本上采样了许多正常偏差,计算了SW统计量,在一系列值上构建了SW统计量的平滑近似值,并从该分布中得到了临界值。)
我也试图通过蛮力做到这一点,但是(见下文)如果我们想要天真并且不像SW那样做曲线拟合,我们将需要更大的样本......
declare
x integer := 10;
y integer := 20;
begin
update your_table set z = x * y * z;
end;
/
将原始S& W值(从论文转录)与R近似值进行比较:
## compute S-W for a given Gamma shape parameter and sample size
tmpf <- function(gshape=20,n=50) {
shapiro.test(qgamma((1:n)/(n+1),scale=1,shape=gshape))
}
## find shape parameter that corresponds to a particular p-value
find.shape <- function(n,alpha) {
uniroot(function(x) tmpf(x,n)$p.value-alpha,
interval=c(0.01,100))$root
}
find.W <- function(n,alpha) {
s <- find.shape(n,alpha)
tmpf(s,n=n)$statistic
}
find.W(50,0.05)