我正在开展一个关于螺丝重量的项目。
我循环播放,发现了如下所示的多种组合:
head style measurement intercept slope
a 1 x 1.0
a 2 x 2.2
a 3 x 4.1
b 1 x 1.2
b 2 x 2.0
b 3 x 4.1
如果我知道具有相同测量值的那个应该具有相同的斜率。所以a-1应该与b-1具有相同的斜率。有没有办法我可以运行另一个lm,我将斜率设置为一组数字?
答案 0 :(得分:0)
目前还不完全清楚你在问什么,但我们假设您的原始数据看起来像这样:
head_style measurement x y
a 1 . .
a 1 . .
a 1 . .
a 2 . .
...
b 1 . .
所以你到目前为止所做的是为y~x
和measurement
的每个组合拟合单独的模型(head_style
)。现在假设您希望斜率仅依赖于measurement
和拦截,以依赖于measurement
和head_slope
。
首先,确保measurement
是一个因素
my_dat <- transform(my_dat,measurement=factor(measurement))
现在适合单个lm
模型:
lm(y~head_style:measurement + measurement:x, data=my_data)
这应该为head_style
和measurement
的每个组合提供单独的拦截,并为measurement
的每个值提供不同的斜率。
答案 1 :(得分:-1)
您可以使用nls函数执行此操作。只需将斜率范围约束设置为您想要的斜率。这是一个例子:
data(mtcars)
df <- mtcars
fitlm <- lm(hp~wt,data=df)
summary(fitlm)
fitnls <- nls(hp~a+b*wt,algorithm="port",data=df,
start=c(a=0,b=50),lower=c(a=-Inf,b=50),upper=c(a=Inf,b=50))
summary(fitnls)