我希望从数据集中抽取1,000个大小为50的随机样本,并显示每个模拟样本的E(xi ^ ui)= 0。我的代码在下面,我一直在尝试调试一段时间,但我无法弄清楚出了什么问题。
数据集称为“数据集”,它有两列:'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 :(得分:0)
问题是你试图在向量中存储一堆非原子对象。如果您使用lm.fit
,resid.lm.fit
和correlation
列表而不是向量,那么您就可以了:
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
的结果:
> 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,...)
。
答案 1 :(得分:0)
如果dataset
是数据框,那么sample(dataset, size=50, replace=T)
将随机选择数据框的列50次。我假设您正在尝试挑选行。在这种情况下,dataset[sample(1:nrow(dataset), size=50, replace=T),]
将解决这个问题。