[英]create matrix lm model with factors
我想創建100個仿真,並使用矩陣為每個模型創建一個線性模型。 我使用以下代碼,但出現錯誤。 做到這一點的最佳方法是什么?
n=15;nsims=100
factor=matrix(as.factor(rep(1:5,3)),n, nsims)
sim=matrix(rnorm(nfactor*nsims,0,1),n,nsims)
> dim(factor)
[1] 15 100
> lm1=lm(sim~factor)
Error in `[[<-.data.frame`(`*tmp*`, i, value = c(1L, 2L, 3L, 4L, 5L, 1L, :
replacement has 1500 rows, data has 15
我不清楚你想要什么。
創建數據:
n <- 15; nsims <- 100; nfactor <- 5
f <- matrix(as.factor(rep(1:nfactor,n/nfactor)), n, nsims)
set.seed(101)
sim <- matrix(rnorm(nfactor*nsims,0,1),n,nsims)
(通常,用現有函數的名稱( factor
)來命名變量是不明智的做法。)
res <- vector("list", nsims)
for (i in 1:nsims) {
res[[i]] <- lm(y~x,
data=data.frame(y=sim[,i],x=f[,i]))
}
for
循環可能看起來很笨拙,但是(如R Inferno的第4章所討論),它通常是編寫代碼的最清晰的方法...如果您確實想在沒有for
循環的情況下進行編碼,那么請輸入一般情況下的列的f
可能有所不同,您可以
res2 <- mapply(function(x,y) lm(y~x),
split(f,col(f)),split(sim,col(sim)),SIMPLIFY=FALSE)
但是我認為這比for
循環還不清楚...
更新 :我不知道它是否是故意的,但是因子矩陣的每一列都是相同的。 因此,您可以將單個輸入變量放在公式的右側,將矩陣響應放在左側:
all(apply(f[,-1],2,identical,f[,1])) ## all TRUE
res2 <- lm(sim~f[,1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.