![](/img/trans.png)
[英]Error in terms.formula(formula) : '.' in formula and no 'data' argument
[英]Error in terms.formula(formula, data = data) : invalid power in formula
我正在尝试对剂量预测值进行转换,这是我的代码:
mod = glm(colonies ~ (as.numeric(as.factor(dose)))^(m), data = salmonella, family = "poisson")
其中“ m”是我使用的力量。 但是,我遇到了一个错误
> mod = glm(colonies ~ (as.numeric(as.factor(dose)))^(m), data = salmonella, family = "poisson")
Error in terms.formula(formula, data = data) : invalid power in formula
谁知道为什么?
抱歉,不清楚。 根据先前的计算,我的m为-0.18182。 我现在知道我不应该使用as.numeric(as.factor)。 但是如果代码是
mod = glm(colonies ~ (as.factor(dose))^(m), data = salmonella, family = "poisson")
错误仍然存在。 这很奇怪,因为当我将m更改为2时,它可以工作。
tl; dr我最好的猜测是,您应该使用I(...^m)
来保护^
/让R将其视为数值乘幂运算符。
我在faraway
包裹中找到salmonella
,可以确认您的错误。 实际上,它通过各种简化而得以保留。
m <- 1 ## same results with m <- 2L, etc.
mod = glm(colonies ~ (as.numeric(as.factor(dose)))^(m), data = salmonella, family = "poisson")
mod = glm(colonies ~ dose^(m), data = salmonella, family = "poisson")
mod = glm(colonies ~ dose^m, data = salmonella, family = "poisson")
mod = lm(colonies ~ dose^m, data = salmonella)
看起来R的公式接口不允许在公式的幂中进行符号替换。
但是 :如果您真正想做的是
dose
转换为均匀间隔的整数值(0 = 1、10 = 2、33 = 3) 然后使用I()
指定R应该将^
视为数字运算符,而不是公式中的交互运算符,这就是您想要的:
ss <- transform(salmonella, numdose=as.numeric(as.factor(dose)))
mod = glm(colonies ~ I(numdose^m), data = ss, family = "poisson")
OTOH图片显示这并不完全是疯狂的(尽管也没有必要):
library(ggplot2); theme_set(theme_bw())
m <- 2
ggplot(ss,aes(numdose,colonies))+
geom_point()+
geom_smooth(method="glm",method.args=list(family=poisson))+
geom_smooth(method="glm",method.args=list(family=poisson),
formula=y~I(x^m),colour="red")
ggsave("numdose.png")
如果这是来自程序包“ faraway”的salmonella
数据集,则您不能在剂量值上使用as.factor或as.numeric,因为它已经是数字了。
此外,在R中执行多项式模型的正确方法是使用poly
函数而不是形成二次项。 如果您坚持使用“原始”二次项,那么使用poly会更容易,但是正如Ben所建议的那样,应该使用I函数
library(faraday)
m=2
mod = glm(colonies ~ I(dose^m), data = salmonella, family = "poisson")
但是,更好的是:
m=2; mod = glm(colonies ~ poly(dose, m), data = salmonella, family = "poisson")
这将为您提供线性项和二次项,但二次项将作为正交多项式完成,然后您可以进行适当的推断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.