看到过T检验适合小样本量的说法,尤其是对30以下的样本量。
按照谢老大的一个图示例子,照猫画虎做了个图形验证这个结论。
验证单样本T检验,思路如下:
1、随机生成10000个均值为1的数据;
2、将样本量i从10到1000循环,从10000个总数据中抽取i个数据并进行均值为1的T检验,针对每个i做10次取检 验p值的平均数;
3、记录样本量i和对应平均p值的对应编写,并画散点图。
从第一个图看出,样本量对检验的结果并没有很大的影响。
而传入检验的均值参数不是1:以0.9、0.8、0.7、0.6,直到0.6时才有显著的效果。
如第二图所示,但也是在样本量较大的时候,p值都表现在0.05的拒绝线以下。小样本中很多犯了取伪错误。
多运行几次0.6的效果不一(0.05线以下的点数),但总体都是大样本好于小样本。
自己从两图得出的结论是,T检验并不是小样本量的时候效果很好。有两个问题请教大家:
1、不知道这个验证靠谱不,在思路或基本概念上有没有很大的问题。
2、程序中用到了个for循环,因为循环体内的部分用到了计数i,用不了replicate。这种显式循环能有别的办法 替代么。
谢谢 ~~
代码如下
<br />
myTtest <- function(mean_t, mean_v) {<br />
base <- rnorm(10000, mean = mean_t, sd = runif(1, 2, 5))<br />
x <- c(0)<br />
y <- c(0)<br />
for (i in 10 : 1000) {<br />
x <- append(x, i, after = length(x))<br />
pTmp <- replicate(10, {<br />
x1 <- sample(base, i)<br />
t.test(x1, mu = mean_v, alternative = "two.side")$p.value<br />
})<br />
y <- append(y, mean(pTmp), after = length(y))<br />
}<br />
t_test <- data.frame(points = x, pval = y)<br />
t_test <- subset(t_test, points > 0)</p>
<p> plot(t_test, col = rgb(0, 0, 1, 0.6))<br />
abline(h = 0.05, v = 30, col = "red")<br />
}</p>
<p>myTtest(1, 1)<br />
myTtest(1, 0.6)<br />
</p>