繁体   English   中英

R:“ isat”回归(“ gets”包)中连续和分类变量之间的交互

[英]R: interaction between continuous and categorical vars in 'isat' regression ('gets' package)

我想根据分类变量z计算y对x的微分响应(连续)。

在标准lm设置中:

lm(y~ x:z)

但是,我要在允许“ gets”包中允许脉冲指示器饱和(IIS)的同时执行此操作。 但是,以下语法会产生错误:

isat(y, mxreg=x:z, iis=TRUE)

错误消息的形式为:

“ solve.qr(out,tol = tol,LAPACK = LAPACK)中的错误:'solve中的奇异矩阵'a'”

1:在x:z中:数值表达式具有96个元素:仅第一个使用

2:在x:z中:数值表达式包含96个元素:仅第一个使用”

我应该如何修改语法?

谢谢!

a, isat目前在分类/字符变量上以及在使用*:都没有提供与lm相同的功能。 我们希望在将来的版本中解决该问题。

同时,您必须在数据集中创建表示交互的独特变量。 我猜是这样的...

    library(gets)
    N <- 100
    x <- rnorm(N)
    z <- c(rep("A",N/4),rep("B",N/4),rep("C",N/4),rep("D",N/4))
    e <- rnorm(N)
    y <- 0.5*x*as.numeric(z=="A") + 1.5*x*as.numeric(z=="B") - 0.75*x*as.numeric(z=="C") + 5*x*as.numeric(z=="D") + e

    lm.reg <- lm(y ~ x:z)

    arx.reg.0 <- arx(y,mxreg=x:z)

    data <- data.frame(y,x,z,stringsAsFactors=F)
    for(i in z[duplicated(z)==F]) {
      data[[paste("Zx",i,sep=".")]] <- data$x * as.numeric(data$z==i)
    }

    arx.reg.1 <- arx(data$y,mxreg=data[,c("x","Zx.A","Zx.B","Zx.C")])
    isat.1 <- isat(data$y,mc=TRUE,mxreg=data[,c("x","Zx.A","Zx.B","Zx.C")],max.block.size=20)

请注意,由于您将为每个类别创建假人,因此这些假人可能会导致解释变量矩阵的奇异(如果在我的示例中,如果isat自动使用4个块)。 使用参数max.block.size可以避免此问题。

让我知道我是否还没解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM