如何对 R 中的组方差执行线性回归?
How can I perform a linear regression on my group variances in R?
这是我的数据
比较平均值似乎产生了一些感兴趣的结果。它确实如线性模型所示:
lm(data=data, y~factor(x)))
现在,看起来所有组的方差也不相等。这是 x
.
中每个组的 y
方差图
我有兴趣测试不同的线性回归,看看二次回归是否是比线性模型更好的模型(与 AIC 或 BIC 相比)。
我可以估计方差的抽样分布并获得每个组中方差的置信区间,因此对我的组的方差进行回归应该是可行的。但是,我不知道如何对 R 中的样本方差进行回归。
如何对 R 中的组方差执行线性回归?
R 中有一个名为 'glmnet' 的包。此库用于广义线性模型。包括多元线性回归。如果您熟悉 lasso 或 ridge 惩罚 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))
有关这两种型号的更多信息,请访问相应功能的文档。希望这有帮助。
我不会使用多项式来模拟方差。 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)
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")
但是,这似乎不太合适。对我来说,它看起来更像是饱和度:
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")
PS:我无法理解你的问题。字面上的答案非常简单(只需使用 lm
),我一定会漏掉一些东西。此外,您没有告诉我们 x
是协变量还是其他变量(例如,样本量?)。因此,我什至无法猜测您所观察到的背后是否存在某种基本关系。
这是我的数据
比较平均值似乎产生了一些感兴趣的结果。它确实如线性模型所示:
lm(data=data, y~factor(x)))
现在,看起来所有组的方差也不相等。这是 x
.
y
方差图
我有兴趣测试不同的线性回归,看看二次回归是否是比线性模型更好的模型(与 AIC 或 BIC 相比)。
我可以估计方差的抽样分布并获得每个组中方差的置信区间,因此对我的组的方差进行回归应该是可行的。但是,我不知道如何对 R 中的样本方差进行回归。
如何对 R 中的组方差执行线性回归?
R 中有一个名为 'glmnet' 的包。此库用于广义线性模型。包括多元线性回归。如果您熟悉 lasso 或 ridge 惩罚 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))
有关这两种型号的更多信息,请访问相应功能的文档。希望这有帮助。
我不会使用多项式来模拟方差。 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)
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")
但是,这似乎不太合适。对我来说,它看起来更像是饱和度:
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")
PS:我无法理解你的问题。字面上的答案非常简单(只需使用 lm
),我一定会漏掉一些东西。此外,您没有告诉我们 x
是协变量还是其他变量(例如,样本量?)。因此,我什至无法猜测您所观察到的背后是否存在某种基本关系。