如何使用具有

2024-06-16 12:46:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(1000000个观测值),有两个变量y(工资)和名称(122000个名称),我想用“名称”来解释“y”

我试过用R和Python

mod<-lm(y~names,data=pop1)

R: message error: cannot allocate vector of size 111.0 Gb

Python

fit = ols('y ~ C(names)', data=pop1).fit()

MemoryError


Tags: of数据名称modmessagedatasizenames
1条回答
网友
1楼 · 发布于 2024-06-16 12:46:49

你的问题是(当评论轰鸣)你缺乏执行计算的记忆。另一个非常重要的问题是为什么要执行回归?你知道吗

对于只包含一个具有多个水平的单因素变量(虚拟变量)的OLS,您实际估计的是组平均值,在本例中是每个y的平均值。大多数LS实现使用QR分解并创建对比度设计矩阵,这意味着截距是第一组的平均值,而其他系数是截距不同的平均值。在Rlm函数中就是这样。但如果我们真的需要,我们仍然可以得到系数,计算R平方等。这里是一个使用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平方

注意,R平方可以简单地使用关系式Rsquared = 1 - SSE / SST = SSF / SST来计算。在单因子SSF = var(fitted)的情况下,并且总是SST = var(predictor),因此rsquared可以实现为

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

相关问题 更多 >