按照谢老大的一个图示例子,照猫画虎做了个图形验证这个结论。
验证单样本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。这种显式循环能有别的办法 替代么。
谢谢 ~~
代码如下
- myTtest <- function(mean_t, mean_v) {
- base <- rnorm(10000, mean = mean_t, sd = runif(1, 2, 5))
- x <- c(0)
- y <- c(0)
- for (i in 10 : 1000) {
- x <- append(x, i, after = length(x))
- pTmp <- replicate(10, {
- x1 <- sample(base, i)
- t.test(x1, mu = mean_v, alternative = "two.side")$p.value
- })
- y <- append(y, mean(pTmp), after = length(y))
- }
- t_test <- data.frame(points = x, pval = y)
- t_test <- subset(t_test, points > 0)
-
- plot(t_test, col = rgb(0, 0, 1, 0.6))
- abline(h = 0.05, v = 30, col = "red")
- }
- myTtest(1, 1)
- myTtest(1, 0.6)


雷达卡



京公网安备 11010802022788号







