我想计算一个多项式的拟合值。
我想计算“拟合”,但不调整变量“ z”。
我现在的工作很麻烦,最终我想遍历不同的幂多项式,而不必每次都在上述方程式中添加一个用于“拟合”的项。
x <- runif(n = 50, min = 1, max = 10)
y <- runif(n = 50, min = 10, max = 20)
z <- sample(letters[1:5], 50, TRUE)
f <- lm(y ~ poly(x, 5, raw=TRUE) + as.factor(z), na.action=na.exclude)
fit <- f$coeff[1] + f$coeff[2]*x + f$coeff[3]*x^2 + f$coeff[4]*x^3 +
f$coeff[5]*x^4 +
f$coeff[6]*x^5
答案 0 :(得分:0)
默认情况下,R用于拟合因子的参数化是为除第一个变量外的所有级别添加一个虚拟变量。因此,如果您希望数据预测排除因子z
的系数,只需询问x
取真实值而z
取第一级的预测(可能是"a"
,但采样可能永远不会给出"a"
,因此最好使用levels(as.factor(z))[1]
。
也就是说:
newdata <- data.frame(x = x, z = levels(as.factor(z))[1])
fit <- predict(f, newdata = newdata)
我会稍微担心在as.factor()
中计算newdata
时可能会出错(尽管它看起来与您的公式具有相同的值),所以我建议总体上略有不同方法:将z
更改为之前的一个因子
呼叫lm()
。也就是说,
z <- as.factor(z)
f <- lm(y ~ poly(x, 5, raw=TRUE) + z, na.action=na.exclude)
levs <- levels(z)
newdata <- data.frame(x = x, z = factor(levs[1], levels = levs))
fit <- predict(f, newdata = newdata)