2024-06-16 12:46:49 发布
网友
我有一个数据帧(1000000个观测值),有两个变量y(工资)和名称(122000个名称),我想用“名称”来解释“y”
我试过用R和Python
mod<-lm(y~names,data=pop1)
R: message error: cannot allocate vector of size 111.0 Gb
fit = ols('y ~ C(names)', data=pop1).fit()
MemoryError
你的问题是(当评论轰鸣)你缺乏执行计算的记忆。另一个非常重要的问题是为什么要执行回归?你知道吗
对于只包含一个具有多个水平的单因素变量(虚拟变量)的OLS,您实际估计的是组平均值,在本例中是每个y的平均值。大多数LS实现使用QR分解并创建对比度设计矩阵,这意味着截距是第一组的平均值,而其他系数是截距不同的平均值。在R的lm函数中就是这样。但如果我们真的需要,我们仍然可以得到系数,计算R平方等。这里是一个使用mtcars数据集的示例
y
QR
R
lm
mtcars
data(mtcars) fit <- lm(mpg ~factor(cyl), data = mtcars) coefs <- tapply(mtcars$mpg, mtcars$cyl, mean) intercept <- coefs[1] beta <- c(intercept, coefs[-1] - intercept) names(beta) <- c("(Intercept)", paste0("cyl", levels(factor(mtcars$cyl))[-1])) beta #output (Intercept) cyl4 cyl8 26.663636 -6.920779 -11.563636 coef(fit) #output (Intercept) factor(cyl)6 factor(cyl)8 26.663636 -6.920779 -11.563636 #output all.equal(coef(fit), out, check.attributes = FALSE) [1] TRUE
R平方也是这样计算的。你知道吗
再说一遍,你到底想估计什么?在这种情况下,线性回归有点过分了。你知道吗
注意,R平方可以简单地使用关系式Rsquared = 1 - SSE / SST = SSF / SST来计算。在单因子SSF = var(fitted)的情况下,并且总是SST = var(predictor),因此rsquared可以实现为
Rsquared = 1 - SSE / SST = SSF / SST
SSF = var(fitted)
SST = var(predictor)
fitted <- ave(mtcars$mpg, mtcars$cyl, FUN = mean) ssf <- var(fitted) sst <- var(mtcars$mpg) r2 <- ssf / sst all.equal(r2, summary(fit)$r.squared) [1] TRUE
你的问题是(当评论轰鸣)你缺乏执行计算的记忆。另一个非常重要的问题是为什么要执行回归?你知道吗
对于只包含一个具有多个水平的单因素变量(虚拟变量)的OLS,您实际估计的是组平均值,在本例中是每个
y
的平均值。大多数LS实现使用QR
分解并创建对比度设计矩阵,这意味着截距是第一组的平均值,而其他系数是截距不同的平均值。在R
的lm
函数中就是这样。但如果我们真的需要,我们仍然可以得到系数,计算R平方等。这里是一个使用mtcars
数据集的示例R平方也是这样计算的。你知道吗
再说一遍,你到底想估计什么?在这种情况下,线性回归有点过分了。你知道吗
编辑R平方
注意,R平方可以简单地使用关系式
Rsquared = 1 - SSE / SST = SSF / SST
来计算。在单因子SSF = var(fitted)
的情况下,并且总是SST = var(predictor)
,因此rsquared可以实现为相关问题 更多 >
编程相关推荐