我有一个具有以下结构的数据集:
a word | number of occurrence of a word in a document | a document id
如何在R中执行正态分布测试?可能这是一个简单的问题,但我是R新手。
我有一个具有以下结构的数据集:
a word | number of occurrence of a word in a document | a document id
如何在R中执行正态分布测试?可能这是一个简单的问题,但我是R新手。
Answers:
如果我正确理解了您的问题,那么要测试一组文档中单词出现是否遵循正态分布,您可以使用shapiro-Wilk测试和一些qqplots。例如,
## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)
## Have a look at the densities
plot(density(words1));plot(density(words2))
## Perform the test
shapiro.test(words1); shapiro.test(words2)
## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)
qqplot命令提供:
您可以看到,第二条数据集的尾部很明显不是“正常”(More Info)。
在Shapiro-Walk正态性测试中,第一个数据集的p值较大(> .9),而第二个数据集的p值很小(<.01)。这将导致您拒绝第二个零假设。
qqline
斜率和mu截距应为1 。
假设您的数据集已调用words
并具有一counts
列,则可以绘制直方图以直观地显示分布:
hist(words$counts, 100, col="black")
其中100是箱数
您也可以使用
qqnorm(words$counts)
最后,您也可以使用Shapiro-Wilk检验来确定正态性
shapiro.test(word$counts)
不过,请看一下下面的讨论:正常性测试:“基本上没用吗?”
查看正态性的更正式方法是测试峰度和偏度是否与零显着不同。
为此,我们需要获得:
kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue
}
用于峰度,并且:
skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}
偏度。
这两个测试都是单尾的,因此您需要将p值乘以2才能成为双尾。如果您的p值大于1,则需要使用1-kurtosis.test()而不是kurtosis.test。
如果您还有其他疑问,可以给我发电子邮件j.bredman@gmail.com
kurtosis()
和skewness()
函数,以上两个函数有什么区别?使用样本的结果是不同的。rnorm()
通过使用nortest
R包,可以进行以下测试:
进行安德森-达林正态性检验
ad.test(data1)
执行Cramér-vonMises测试是否正常
cvm.test(data1)
进行Pearson卡方检验是否正常
pearson.test(data1)
进行Shapiro-Francia测试以检查其正常性
sf.test(data1)
使用该normtest
软件包可以完成许多其他测试。请参阅https://cran.r-project.org/web/packages/normtest/normtest.pdf中的描述
zipfR
包装。