0

在研究多元回归的一些基本原理时,我决定尝试将我的手动工作与 John Fox 的“效果”包进行比较。我已经生成了具有某些关系的变量,并且希望在控制连续变量的影响时为某个因素调整均值。

但是,我已经停滞不前,因为效果包中的效果函数返回错误“变量'c'的无效类型(内置)”

当我使用 'c' 检查变量的类型时typeof(c),我被告知它是 double 类型,就像我构建的那样。

  • 此错误的原因可能是什么?
  • 变量“c”是否因某种原因被强制输入“内置”?

这是我的代码:

set.seed(1986)
y <- rnorm(100)
f <- sapply(y, function(x) if(x < 0) 1 else 2)
f.f <- as.factor(f)
set.seed(1987)
c <- rnorm(100, 0, .1) + y + f

an3 <- lm(y ~ f.f + c); summary(an3)

ef <- effect("f.f", an3)
4

2 回答 2

3

c不是一个变量名的好选择。它是R中非常常用的内置函数。

更改cd对我有用:

set.seed(1986)
y <- rnorm(100)
f <- sapply(y, function(x) if(x < 0) 1 else 2)
f.f <- as.factor(f)
set.seed(1987)
d <- rnorm(100, 0, .1) + y + f

an3 <- lm(y ~ f.f + d); summary(an3)

library(effects)
ef <- effect("f.f", an3)
 ef

 f.f effect
f.f
         1          2 
 0.5504214 -0.3231941 
于 2012-10-24T12:21:03.300 回答
0

另一种选择是将数据存储在data.frame; 这还有其他好处,尤其是在处理多个数据集时。

set.seed(1986)
d <- data.frame(y=rnorm(100))
d <- within(d, {
  f <- sapply(y, function(x) if(x < 0) 1 else 2)
  f.f <- as.factor(f)
  set.seed(1987)
  c <- rnorm(100, 0, .1) + y + f
})

library(effects)

an3 <- lm(y ~ f.f + c, data=d); summary(an3)
ef <- effect("f.f", an3)
ef

# f.f effect
# f.f
#          1          2 
#  0.5504214 -0.3231941 
于 2012-10-24T14:40:25.733 回答