早上好,
我试图用R实现我的线性模型的白色测试。我不知道如何编写R代码来实现白色测试。
价格:房价,以百万美元计 Bdrms:卧室数量 Lotsize:平方英尺的批量大小 Sqrft:平方英尺的房子大小
线性模型如下:
LinearModel.1< - lm(PRICE~LOTSIZE + LOTSIZE ^ 2 + SQRFT + BDRMS,data = Dataset) 摘要(LinearModel.1)
库(lmtest) bptest(LinearModel.1,varformula = NULL,studentize = TRUE,data = Dataset)
?????????
感谢您的回答 亲切的问候,
答案 0 :(得分:4)
答案 1 :(得分:3)
m <- LinearModel.1
data <- Dataset
u2 <- m$residuals^2
y <- fitted(m)
Ru2<- summary(lm(u2 ~ y + I(y^2)))$r.squared
LM <- nrow(data)*Ru2
p.value <- 1-pchisq(LM, 2)
p.value
如果p.value&lt; 0.05,然后Ho(没有异方差性)在5%的显着性水平被拒绝,你得出的结论是你的模型中存在异方差性
答案 2 :(得分:1)
White的测试现在在white_lm
包的skedastic
函数中实现;看到
https://www.rdocumentation.org/packages/skedastic/versions/1.0.0/topics/white_lm
答案 3 :(得分:0)
我在R
中编写了一个函数来重现两种方法,供hendry2007econometric中的White检验。
test_white(mod, dat, resi2 ~ x1 + x2 + I(x1^2) + I(x2^2), 3)
平方残差在所有回归变量及其平方上回归的位置。自由度是参数的数量(比方说k
)。
test_white(mod, dat, resi2 ~ x1 + x2 + I(x1^2) + I(x2^2) + I(x1 * x2), 6)
平方残差在所有回归变量,其平方和叉积上回归的地方。自由度为k * (k + 1) / 2
。
test_white <- function(mod, dat, f, df1, prob){
if(missing(prob)){prob = 0.05}
dat %<>% mutate(resi2 = mod$residuals^2)
stat <-
lm(f, data = dat) %>%
{summary(.)$r.squared} %>%
{. * nrow(dat)}
p_value <-
stat %>%
{1 - pchisq(., df1)}
results <- tibble(
whi = "White", stat = stat, df1 = df1, df2 = nrow(dat) - df1,
p_value = p_value,prob = prob, if_accept = {p_value <= prob},
if_pass = {p_value >= prob}
)
return(results)
}
我认为way @Mike K可以,这实际上是在测试基于比例尺位置图的lm
模型是否有效。比例尺位置图是指当您lm
plot diagnostics为plot.lm(model, which = 3)
对象时{1>}。
答案 4 :(得分:0)
可以使用bptest
包中的lmtest
函数来实现测试,如下所示:
reg <- lm(y~x1+x2) # storing regression
bptest(reg, ~ poly(fitted(reg) , 2))
请注意,以上内容实现了测试的特殊形式,该测试使用y
的拟合值及其平方值(因此poly(fitted(reg) , 2)
中的选项bptest
)作为第二个回归变量阶段方程。范式使用所有回归变量,其平方值和交互作用作为第二阶段回归的元素,但会损失自由度。要实现该格式,您需要将~ poly(fitted(reg) , 2)
替换为~ x1*x2 + x1*x3 ...
。如果您有很多回归变量,则使用其他软件包可能会更容易。