[英]Interaction between continuous and categorical variable in R: is there a way to include all categories?
[英]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.