2014-10-19 60 views
0

我希望从数据集中抽取1,000个随机样本,大小为50,并且显示每个模拟样本的E(xi^ui)= 0。我的代码在下面,我一直在尝试调试一段时间,但我无法弄清楚什么是错的。使用for循环中的随机样本

该数据集被称为“数据集”,它有两列:'y'和'x'。我想在x上回归y,得到残差,并表明它们与x不相关。

lm.fit <- NA 
resid.lm.fit <- NA 
correlation <- NA 

for (i in 1:1000){ 
    samp1 <- sample(dataset, size=50, replace=T) 
    lm.fit[i] <- lm(y ~ x, data=samp1) 
    resid.lm.fit[i]<-resid(lm.fit[i]) 
    correlation[i] <- cor.test(resid.lm.fit[i],samp1$x) 
} 

我得到的错误是:

Error in resid.lm.fit[i] <- resid(lm.fit[i]) : 
    replacement has length zero 
In addition: Warning message: 
In lm.fit[i] <- lm(y ~ x, data = samp1) : 
    number of items to replace is not a multiple of replacement length 

回答

0

的问题是,您要保存一堆载体非原子对象。如果您lm.fitresid.lm.fitcorrelation列表,而不是载体,你会好起来的:

set.seed(123) 
dataset <- data.frame(
    x=1:250, 
    y=3*(1:250)+rnorm(250,0,40)) 
## 
lm.fit <- list(NULL) 
resid.lm.fit <- list(NULL) 
correlation <- list(NULL) 
for (i in 1:1000){ 
    samp1 <- dataset[sample(1:nrow(dataset), size=50, replace=T),] 
    lm.fit[[i]] <- lm(y ~ x, data=samp1) 
    resid.lm.fit[[i]] <- resid(lm.fit[[i]]) 
    correlation[[i]] <- cor.test(resid.lm.fit[[i]],samp1$x) 
} 

然后你就可以查询个人cor.test S的像这样的结果:

> correlation[[1]] 

    Pearson's product-moment correlation 

data: resid.lm.fit[[i]] and samp1$x 
t = 0, df = 48, p-value = 1 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
-0.2783477 0.2783477 
sample estimates: 
     cor 
2.991262e-17 

此外,从样本一个data.frame使用df[ sample(1:nrow(df),...), ],而不是sample(df,...)

+0

谢谢,这似乎工作!不过,现在我想知道如何处理关联列表中的1,000个结果。我想表明x和u对于每个模拟样本都没有关联,但是我怎样才能知道没有单独通过1,000个测试中的每一个呢? – hemingway2014 2014-10-19 22:47:54

+0

你可以用'sapply(相关性,函数(x){x $ estimate})来提取相关性估计值' – nrussell 2014-10-19 23:57:05

+0

是的,但我实际上需要提取p值小于0.05的那些。重点是要表明所有p值都大于此值(即,每个模拟样本中的相关性测试未能拒绝相关性大于0的零)。 – hemingway2014 2014-10-20 00:08:09

0

如果dataset是一个数据帧,那么sample(dataset, size=50, replace=T)将随机挑出50次数据帧的列并进行替换。我假设你正在尝试挑出行。在这种情况下,dataset[sample(1:nrow(dataset), size=50, replace=T),]将解决这个问题。

+0

注意到我的答案。 – nrussell 2014-10-19 20:38:53

+0

对不起@nrussell,直到我发布我的内容后才看到你的答案。 – Ramanudles 2014-10-19 20:39:41