如何对R中的组差异进行线性回归?

时间:2015-02-15 16:55:45

标签: r statistics linear-regression

这是我的数据

enter image description here

比较均值似乎会产生一些感兴趣的结果。确实如线性模型所揭示的那样:

lm(data=data, y~factor(x)))

现在,看起来所有组中的差异都不相等。以下是y中每个组x的差异图。

enter image description here

我有兴趣测试不同的线性回归,看看二次回归是否比线性模型更好(通过AIC或BIC比较)。

我可以估计方差的采样分布,并获得每组方差的置信区间,因此对我的组的方差进行回归应该是可行的。但是,我不知道如何对R中的样本方差进行回归。

如何对R中的群组差异执行线性回归?

2 个答案:

答案 0 :(得分:1)

我不会使用多项式来模拟方差。包nlme提供的方差函数是varConstPower。我们试试这个:

n <- c(1, 2, 4, 8, 16, 32)
v <- c(5.85, 6.35, 6.55, 6.85, 7.02, 7.15) 

plot(v ~ n)

plot variance vs n

fit_ConstPower <- nls(v ~ n^(2*theta) + c, 
                       start = list(theta = 2, c = 4), 
                       data = data.frame(n, v))
summary(fit_ConstPower)
lines(npred <- seq(1, 32, length.out = 100),
      predict(fit_ConstPower, newdata = data.frame(n = npred)),
      col = "blue")

plot with first fit added

然而,这似乎不太适合。对我来说,它看起来更像是饱和:

fit_hyper <- nls(v ~ k * n^(theta) + c, 
               start = list(k = -1, theta = -1, c = 7.2), 
               data = data.frame(n, v))
summary(fit_hyper)
lines(npred,
      predict(fit_hyper, newdata = data.frame(n = npred)),
      col = "green")

plot with second fit added

PS:我无法理解你的问题。字面上的答案很简单(只需使用lm),我必须遗漏一些东西。此外,您没有告诉我们x是协变量还是其他东西(例如,样本量?)。因此,我甚至无法猜测你观察到的背后是否存在某种基本关系。

答案 1 :(得分:0)

在R中有一个名为'glmnet'的包。该库用于广义线性模型。包含的多元线性回归。如果您熟悉套索或脊线惩罚,glmnet()函数会执行两次惩罚组合的回归。并且cv.glmnet()函数执行交叉验证模型以选择最佳惩罚参数。

因此,您可以执行以下操作:

library('glmnet')
x <- yourdata[sample(1:nrow(mydata),]
cv.model1 <- cv.glmnet(x,y,alpha = your_parameter)

或者,如果您想获得最简单的线性回归模型 你可以使用de lm()函数,它不会执行惩罚。

simple_model <- lm(y~x,data=data.frame(x,y))

有关两种型号的更多信息,请访问相应功能的文档。希望这会有所帮助。