标签: model.matrix

运行glmnet()的大矩阵

我有一个问题,用宽数据集运行glmnet套索.我的数据N = 50,但p> 49000,所有因素.所以要运行glmnet,我必须创建一个model.matrix,但是当我调用model.matrix(formula,data)时,我的内存耗尽,其中formula = Class~.

作为一个工作示例,我将生成一个数据集:

data <- matrix(rep(0,50*49000), nrow=50)
for(i in 1:50) {
x = rep(letters[2:8], 7000)
y = sample(x=1:49000, size=49000)
data[i,] <- x[y]
}

data <- as.data.frame(data)
x = c(rep('A', 20), rep('B', 15), rep('C', 15))
y = sample(x=1:50, size=50)
class = x[y]
data <- cbind(data, class)
Run Code Online (Sandbox Code Playgroud)

之后,我尝试创建一个model.matrix进入glmnet.

  formula <- as.formula(class ~ .)
  X = model.matrix(formula, data)
  model <- cv.glmnet(X, class, standardize=FALSE, family='multinomial', alpha=1, nfolds=10)
Run Code Online (Sandbox Code Playgroud)

在最后一步(X = model.matrix ...),我的内存不足.我能做什么?

r lasso-regression bigdata glmnet model.matrix

20
推荐指数
2
解决办法
8773
查看次数

警告消息 - 来自假人包的假人

我正在使用 dummies 包为分类变量生成虚拟变量,其中一些具有两个以上的类别。

testdf<- data.frame(
  "A" = as.factor(c(1,2,2,3,3,1)),
  "B" = c('A','B','A','B','C','C'),
  "C"= c('D','D','E','D','D','E'))
#
#Generate dummy variables:
#
testdf<- cbind(testdf, dummy(testdf$C, sep='_'))
testdf<- cbind(testdf, dummy(testdf$B, sep='_'))
Run Code Online (Sandbox Code Playgroud)

对于这两个命令,我得到:

Warning message:
In model.matrix.default(~x - 1, model.frame(~x - 1), contrasts = FALSE) :
  non-list contrasts argument ignored
Run Code Online (Sandbox Code Playgroud)

结果似乎是正确的。您能否就警告的原因提出建议?

r contrast model.matrix dummy-variable

6
推荐指数
1
解决办法
5031
查看次数

通过 rpy2 使用 model.matrix?

在我的工作中,我更喜欢 Python 而不是 R。有时,我需要使用 R 函数,为此我开始尝试 Rpy2。

我尝试过但未能找到如何使用 Rpy2 复制以下内容

design <- model.matrix(~Subject+Treat)
Run Code Online (Sandbox Code Playgroud)

我已经走了这么远:

import rpy2.robjects as robjects
fmla = robjects.Formula('~subject+treatment')
env = fmla.environment
env['subject'] = sbj_group
env['treatment'] = trt_group
Run Code Online (Sandbox Code Playgroud)

从我在这里看到的。但我找不到如何表演model.matrix。我尝试了几种不同的方法:

robjects.r.model_matrix(fmla)
robjects.r('model.matrix(%s)' %fmla.r_repr())
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,没有一个是正确的。

我是 Rpy2 的新手,并且在 R 方面经验不足。任何帮助将不胜感激!

python r rpy2 model.matrix

5
推荐指数
1
解决办法
1510
查看次数

R中的model.matrix的data.table的Rownames

我有一个data.table DT,我想继续model.matrix它.每行都有一个字符串ID,存储在ID列中DT.当我跑步model.matrixDT,我的公式排除了ID列.问题是,model.matrix由于NA而丢弃了一些行.如果我设置的rownames DTID列,调用之前model.matrix,那么最终的模型矩阵具有rownames,和我都准备好.否则,我无法弄清楚我最终会遇到什么行.我正在设置rownames rownames(DT) = DT$ID.但是,当我尝试添加新列时DT,我会收到投诉

"检测到无效的.internal.selfref ......在早些时候,这个data.table已经被R复制了."

所以我很想知道

  1. 有没有更好的方法来设置一个rownames data.table
  2. 有没有更好的方法来解决这个问题.

r model.matrix data.table

4
推荐指数
1
解决办法
8860
查看次数

加速此循环以创建具有data.table的虚拟列并在R中设置

我有一个数据表,我想为每个唯一的日创建一个新列,然后在每一行中为每天匹配列名称分配1

我使用for循环完成了这个,但我想知道是否有任何方法使用data.table和set来优化它?

这是一个例子

dt <- data.table(Week_Day = c("Monday", "Tuesday", "Wednesday",
                          "Thursday", "Friday", "Saturday", "Sunday"))

Day <- unique(dt$Week_Day)
for (i in 1:length(Day)) {
    if (Day[i] != "Sunday") {
        dt[, Day[i] := ifelse(Week_Day == Day[i], 1, 0)]
    }
}
Run Code Online (Sandbox Code Playgroud)

我的表是298k行,虽然它不需要很长时间执行(下面),它是一个长脚本的一部分,我有相当多的低效循环,所以我试图让整个运行时间缩短.

运行时间:

user  system elapsed
0.99    0.06    1.05
Run Code Online (Sandbox Code Playgroud)

提前致谢.

performance r model.matrix data.table dummy-variable

4
推荐指数
1
解决办法
5476
查看次数

model.frame.default(object, data, xlev = xlev) 中的错误:对象不是矩阵

R 已经 3 天了,不知道我做错了什么。我正在尝试将一些具有两种方式交互的列发送到 glmnet cox 模型中。我有一些名为 dtable 的 data.frame()

编辑以使代码可重现

xs<-c("Col1", "Col2", "Col3")
v<-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, NA, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, NA, 25, 26, 27, 28, 29, 30)
df<-data.frame(matrix(v,ncol=3))
dm<-as.matrix(df)
dm<-matrix(dm[complete.cases(dm)], ncol=3)
colnames(dm)<-xs
dfdata<-data.frame(dm)
f<-as.formula(time~.*.)
xmatrix<-model.matrix(f, dfdata)[,-1]
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我收到错误

Error in model.frame.default(object, data, xlev = xlev) :    
object is not a matrix
Run Code Online (Sandbox Code Playgroud)

提前致谢

r glmnet model.matrix

4
推荐指数
1
解决办法
3万
查看次数

强制model.matrix遵循R中公式中各项的顺序

让我们用假数据创建一个矩阵:

data_ex <- data.frame(y = runif(5,0,1), a1 = runif(5,0,1), b2 = runif(5,0,1), 
                      c3 = runif(5,0,1), d4 = runif(5,0,1))
> data_ex
      y    a1    b2    c3    d4
1 0.162 0.221 0.483 0.989 0.558
2 0.445 0.854 0.732 0.723 0.259
3 0.884 0.041 0.893 0.985 0.947
4 0.944 0.718 0.338 0.238 0.592
5 0.094 0.867 0.026 0.334 0.314
Run Code Online (Sandbox Code Playgroud)

该模型的公式如下:

forml <- as.formula("y ~ a1 + b2 + a1:c3:d4 + a1:c3  + a1:b2 + a1:b2:c3")
> forml
y ~ a1 + b2 + a1:c3:d4 …
Run Code Online (Sandbox Code Playgroud)

r matrix model.matrix

4
推荐指数
1
解决办法
133
查看次数

R在model.matrix中缺少级别

我正在尝试将带有分类变量的数据框转换为model.matrix但却失去了变量级别.

这是我的代码:

df1 <- data.frame(id = 1:200, y =rbinom(200, 1, .5),  var1 = factor(rep(c('abc','def','ghi','jkl'),50)))
df1$var2 <- factor(rep(c('ab c','ghi','jkl','def'),50))
df1$var3 <- factor(rep(c('abc','ghi','nop','xyz'),50))

df1$var2 <- as.character(df1$var2)
df1$var2 <- gsub('\\s','',df1$var2)
df1$var2 <- factor(df1$var2)
sapply(df1, levels)

mm1 <- model.matrix(~ 0+.,df1)
head(mm1)
Run Code Online (Sandbox Code Playgroud)

有什么建议?这是矩阵不可逆性问题吗?

r model.matrix

3
推荐指数
1
解决办法
1825
查看次数

使用多列的model.matrix

我正在尝试使用model.matrix中data.frame的多个列.

数据框如下所示:

    df1 <- data.frame(id=seq(1,10,1), zip1=(round(runif(10)*100000,0)), zip2=(round(runif(10)*100000,0))
    ,var1=round(runif(10)*100,1),Sales=round(runif(10)* 10000,2))
df1$zip1 <- ifelse(nchar(as.character(df1$zip1)) < 5,paste("0",as.character(df1$zip1),sep=""),df1$zip1)
df1$zip2 <- ifelse(nchar(as.character(df1$zip2)) < 5,paste("0",as.character(df1$zip2),sep=""),df1$zip2)

df1$zip1 <- factor(df1$zip1)
df1$zip2 <- factor(df1$zip2)
dput(df1)


> dput(df1)
structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), zip1 = structure(c(5L, 
1L, 8L, 3L, 7L, 9L, 2L, 6L, 10L, 4L), .Label = c("16667", "21922", 
"29100", "54398", "55447", "72607", "84667", "96562", "97012", 
"99125"), class = "factor"), zip2 = structure(c(7L, 4L, 2L, 6L, 
3L, 8L, 5L, 9L, 1L, 10L), .Label …
Run Code Online (Sandbox Code Playgroud)

r formula model.matrix

2
推荐指数
1
解决办法
5081
查看次数

创建指标变量矩阵

我想创建一个指标变量矩阵。我最初的想法是使用 model.matrix,这里也建议使用:Automatically expand an R factor into a collection of 1/0 indicator variables for each factor level

但是,如果一个因子只有一个级别,则 model.matrix 似乎不起作用。

这是一个示例数据集,其中包含三个级别的因子“区域”:

dat = read.table(text = "
    reg1    reg2    reg3   
      1       0       0
      1       0       0
      1       0       0
      1       0       0
      1       0       0
      1       0       0
      0       1       0
      0       1       0
      0       1       0
      0       0       1
      0       0       1
      0       0       1
      0       0       1
", sep = "", header = TRUE)

# model.matrix works if …
Run Code Online (Sandbox Code Playgroud)

r matrix indicator model.matrix

2
推荐指数
1
解决办法
4170
查看次数