2016-04-24 100 views
2

我期待在R中做一些基本的模拟来检验p值的性质。我的目标是看大样本规模是否趋向于小p值。我的想法是生成1,000,000个数据点的随机向量,将它们相互回归,然后绘制p值的分布并查找偏斜。模拟数以千计的回归和获得p值

这是我至今想:

x1 = runif(1000000, 0, 1000) 
x2 = runif(1000000, 0, 1000) 
model1 = lm(x2~x1) 

使用来自另一个线程采取代码:

lmp <- function (modelobject) { 
    if (class(modelobject) != "lm") stop("Not an object of class 'lm' ") 
    f <- summary(modelobject)$fstatistic 
    p <- pf(f[1],f[2],f[3],lower.tail=F) 
    attributes(p) <- NULL 
    return(p) 
    } 
lmp(model1) 
0.3874139 

对我怎么可能做到这一点的1000款甚至更多的有什么建议?谢谢!

+0

这些帖子可能会有用:http://stackoverflow.com/q/29803993/1989480和http://stackoverflow.com/questions/36571864/why-the-built-in-lm-function-is-so -slow式-R – chinsoon12

回答

0

看到?replicate ...但你计算的p值呈高斯误差不统一的人

具体来说,这样的事情(不,这将在很大N = 10^6没关系):

nrep <- 1000 
ndat <- 1000000 
results <- replicate(nrep, { 
    x1=runif(ndat, 0, 1000); 
    x2=runif(ndat, 0, 1000); 
    model1=lm(x1 ~ x2); 
    lmp(model1) 
    }) 

应该可以工作,但是 需要很长时间才能运行。

我会建议让nrep和ndat更小来尝试一下。