我曾经习惯于lm()拟合多个回归模型,用于R中的多个(~100万个)响应变量.例如.
allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)
Run Code Online (Sandbox Code Playgroud)
这将返回类"mlm"的对象,它类似于包含所有模型的巨大对象.我想为每个模型获得剩余的平方和,我可以使用:
summaries <- summary(allModels)
rss1s <- sapply(summaries, function(a) return(a$sigma))
Run Code Online (Sandbox Code Playgroud)
我的问题是,我认为"摘要"功能也计算了一大堆其他东西,因此非常慢.我想知道是否有更快的方法来提取模型的残差平方和?
谢谢!
我是R的新手,我想用一个*apply函数改进下面的脚本(我已经读过apply,但我无法使用它).我想lm在多个独立变量(数据框中的列)上使用函数.我用了
for (i in (1:3) {
assign(paste0('lm.',names(data[i])), lm(formula=formula(i),data=data))
}
Run Code Online (Sandbox Code Playgroud)
Formula(i) 被定义为
formula=function(x)
{
as.formula ( paste(names(data[x]),'~', paste0(names(data[-1:-3]), collapse = '+')), env=parent.frame() )
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我想针对同一个回归程序运行10次回归,然后在不使用循环的情况下提取所有标准错误.
depVars <- as.matrix(data[,1:10]) # multiple dependent variables
regressor <- as.matrix([,11]) # independent variable
allModels <- lm(depVars ~ regressor) # multiple, single variable regressions
summary(allModels)[1] # Can "view" the standard error for 1st regression, but can't extract...
Run Code Online (Sandbox Code Playgroud)
allModels存储为"mlm"对象,这非常难以使用.如果我可以存储一个lm对象列表或一个感兴趣的统计数据矩阵,那就太棒了.
同样,目标是不使用循环.这是一个等效的循环:
regressor <- as.matrix([,11]) # independent variable
for(i in 1:10) {
tempObject <- lm(data[,i] ~ regressor) # single regressions
table1Data[i,1] <- summary(tempObject)$coefficients[2,2] # assign std error
rm(tempObject)
}
Run Code Online (Sandbox Code Playgroud) 对于神经影像应用,我试图通过R(标准调用lm)中的最小二乘拟合许多线性模型.想象一下,我有一个设计矩阵X.这个设计矩阵在所有模型中都是相同的.正在拟合的数据(Y)将改变,因此所有拟合参数(例如,beta,p值,残差等)也将改变.
目前,我只是将它放在for循环中,因此它正在进行数十万次调用lm.似乎必须有一个更好的方法.
我相信计算成本最高的部分是矩阵求逆.看起来这是通过lm.fit中的Fortran调用来处理的.
如果我手工做这个回归,我会进行矩阵求逆,然后将它乘以各种数据集.事实上,当我有一个表现良好的设计矩阵(例如所有连续值的协变量)时,我编写了一个函数来做到这一点.但是,我真的很喜欢所有的工作lm,比如适当地重新编码我的因素等,输出lm也非常好.
无论如何还有我的蛋糕和吃它?也就是说,为了获得lm的友好性,但是使用这种能力来计算有效地拟合具有相同设计矩阵的许多模型?
我有三个数据集:
响应 - 5个矩阵(样本)x 10(因变量)
预测变量 - 矩阵5(样本)x 2(自变量)
test_set - 10个矩阵(样本)x 10(响应中定义的因变量)
response <- matrix(sample.int(15, size = 5*10, replace = TRUE), nrow = 5, ncol = 10)
colnames(response) <- c("1_DV","2_DV","3_DV","4_DV","5_DV","6_DV","7_DV","8_DV","9_DV","10_DV")
predictors <- matrix(sample.int(15, size = 7*2, replace = TRUE), nrow = 5, ncol = 2)
colnames(predictors) <- c("1_IV","2_IV")
test_set <- matrix(sample.int(15, size = 10*2, replace = TRUE), nrow = 10, ncol = 2)
colnames(test_set) <- c("1_IV","2_IV")
Run Code Online (Sandbox Code Playgroud)
我正在使用定义为响应和预测集的组合的训练集来做多元线性模型,我想使用此模型对测试集进行预测:
training_dataframe <- data.frame(predictors, response)
fit <- lm(response ~ predictors, data = training_dataframe) …Run Code Online (Sandbox Code Playgroud)