美文网首页心理
R语言正态记分检验和K-S单样本推断

R语言正态记分检验和K-S单样本推断

作者: Cache_wood | 来源:发表于2022-04-09 10:30 被阅读0次

@[toc]

正态记分推断基本思想

  1. 将数据|𝑿_𝒊−𝑴_𝟎 |的秩按升幂排列,记为𝑹_𝒊^+
  2. 用相应的正态记分代替这些秩,并加上相应的𝑿_𝒊−𝑴_𝟎的符号,称为符号正态记分,即
    s_i = \Phi^{-1}(\frac{1}{2}[1+\frac{R_i^+}{n+1}])sgn(X_i-M_0)
  3. 𝑾=\sum_{𝒊=𝟏}^n 𝒔_𝒊为正负正态记分之差,正态记分检验统计量𝑻=\frac{𝑾}{\sqrt{\sum_{𝒊=𝟏}^n 𝒔_𝒊^𝟐 }}
  4. 原假设为真时,认为观测值的总体分布接近正态,或者在大样本情况下𝑻近似标准正态分布
  5. 当|𝑻|很大时,可以考虑拒绝原假设,即检验的𝒑值=𝟐(𝟏−𝚽(|𝐓|));若𝒑值大于𝜶,接受原假设;否则拒绝原假设

示例,自己编写函数

NScoreTest<-function(wd,med.val=0,alternative='two.sided'){
  n<length(wd)
  wd.diff<-wd-med.val
  wd.absdiff<-abs(wd.diff)
  wd.rank<-rank(wd.absdiff)
  wd.sign<-sign(wd.diff)
  wd.nscore<-qnorm((1+wd.rank/(n+1))/2,0,1)*wd.sign
  df<-data.frame(value=wd,absvalue=wd.absdiff,rank=wd.rank,sign=wd.sign,nscore=wd.nscore)
  index<-order(wd.absdiff)
  df<-df[index,]
  w<-sum(wd.nscore)
  Tval<-w/sqrt(sum(wd.nscore^2))
  if(alternative=='two.sided'){pval<-2*(1-pnorm(abs(Tval),0,1))}
  if(alternative=='less'){pval<-pnorm(Tval,0,1)}
  if(alternative=='greater'){pval<-1-pnorm(Tval,0,1)}
  list(df=df,w=w,Tval=Tval,pval=pval)
}
DeadNum<-c(4,6,9,15,31,33,36,65,77,88)
NScoreTest(DeadNum,34,'less')
NScoreTest(DeadNum,16,'greater')
> NScoreTest(DeadNum,34,'less')
$df
   value absvalue rank sign      nscore
6     33        1    1   -1 -0.06601181
7     36        2    2    1  0.13231285
5     31        3    3   -1 -0.19920132
4     15       19    4   -1 -0.26699413
3      9       25    5   -1 -0.33603814
2      6       28    6   -1 -0.40672425
1      4       30    7   -1 -0.47950565
8     65       31    8    1  0.55492294
9     77       43    9    1  0.63364000
10    88       54   10    1  0.71649750

$w
[1] 0.282898

$Tval
[1] 0.2072131

$pval
[1] 0.5820783

> NScoreTest(DeadNum,16,'greater')
$df
   value absvalue rank sign      nscore
4     15        1    1   -1 -0.06601181
3      9        7    2   -1 -0.13231285
2      6       10    3   -1 -0.19920132
1      4       12    4   -1 -0.26699413
5     31       15    5    1  0.33603814
6     33       17    6    1  0.40672425
7     36       20    7    1  0.47950565
8     65       49    8    1  0.55492294
9     77       61    9    1  0.63364000
10    88       72   10    1  0.71649750

$w
[1] 2.462808

$Tval
[1] 1.803923

$pval
[1] 0.03562168

示例,调用函数

library('snpar')
ns.test(DeadNum,q=34,alternative='less')
ns.test(DeadNum,q=16,alternative='greater')
> ns.test(DeadNum,q=34,alternative='less')

    One-sample normal score test

data:  DeadNum
statistic = 0.40853, p-value = 0.6586
alternative hypothesis: true location is less than 34

> ns.test(DeadNum,q=16,alternative='greater')

    One-sample normal score test

data:  DeadNum
statistic = 1.8442, p-value = 0.03258
alternative hypothesis: true location is greater than 16

K-S检验

ks.test(x, pnorm, mean, sd, alternative) #(已知的正态分布)
ks.test(x, pnorm, sample mean, sample sd, alternative) #(未知正态分布,样本均值和样本标准差替代𝝁, 𝝈)、lillie.test(x) (nortest package for more normality test)

原假设:该分布可以认为是正态分布(和正态分布没有差异)
p<0.5,拒绝原假设,也就是不能认为该分布是正态分布;
p>0.5,不能拒绝原假设,也就是不能否认该分布是正态分布。

blood<-c(87,77,92,68,80,78,84,77,81,80,80,77,
         92,86,76,80,81,75,77,72,81,90,84,86,
         80,68,77,87,76,77,78,92,75,80,78)
hist(blood)
ks.test(blood,pnorm,80,6)
ks.test(blood,pnorm,mean(blood),sd(blood))
> ks.test(blood,pnorm,80,6)

    One-sample Kolmogorov-Smirnov test

data:  blood
D = 0.1481, p-value = 0.4264
alternative hypothesis: two-sided

> ks.test(blood,pnorm,mean(blood),sd(blood))

    One-sample Kolmogorov-Smirnov test

data:  blood
D = 0.16523, p-value = 0.2949
alternative hypothesis: two-sided

相关文章

网友评论

    本文标题:R语言正态记分检验和K-S单样本推断

    本文链接:https://www.haomeiwen.com/subject/cihusrtx.html