微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多元线性回归模型中寻找异常值?

如何解决在多元线性回归模型中寻找异常值?

所以我有一个数据集,其中包含 71 个国家的 GDP、人口以及他们在 2008 年、2012 年和 2016 年赢得的奥运金牌数量。到目前为止,我已经创建了一个多元线性回归模型来对赢得的奖牌进行建模一个国家在 2012 年奥运会上的 GDP 及其人口:

model2012 <- lm(Medal2012 ~ GDP+Population,data = onegold)

我将其绘制为回归平面,然后在此绘制了 2016 年赢得的实际奖牌。我现在要做的是确定与预测的 2012 年趋势/回归平面相比,2016 年数据中哪些国家是异常值。

我有人口和 GDP 的 95% 置信区间,并且正在考虑制作一个 for 循环,通过一个函数来运行每个国家 2016 年的奖牌数,该函数确定它是否为异常值(即中国 2016 年的奖牌数为 70,该人口和 GDP 趋势的置信区间表明奖牌数应在 64-68 之间,因此,中国是一个异常值)。然而,这看起来非常复杂,我想知道是否有更简单的方法来识别异常值?

到目前为止我的代码

# changed name of the dataframe to "onegold" upon import

install.packages("plot3D")
library("plot3D")
x <- log(onegold$Population) #simplifying the variable names
y <- log(onegold$GDP)
z <- log(onegold$Medal2012)

#Scatterplot of the 2012 data in relation to population and medals: 

scatter3D(x,y,z,pch = 19,cex = 1,ticktype = "detailed",d = 2,theta = 60,phi = 20,bty = "b2",colkey = TRUE,xlab = "Log (Population)",ylab = "Log(GDP)",zlab = " Log(Medals)",clab = "Log(Medals,2012)")


#Regression Plane for the above data : 

fit <- lm(z ~ x + y)

grid.lines = 26
x.pred <- seq(min(x),max(x),length.out = grid.lines)
y.pred <- seq(min(y),max(y),length.out = grid.lines)
xy <- expand.grid( x = x.pred,y = y.pred)
z.pred <- matrix(predict(fit,newdata = xy),nrow = grid.lines,ncol = grid.lines)
fitpoints <- predict(fit)

# plotting the above regression plane (based on 2012 data):

scatter3D(x,pch = 16,cex = 0,main = "2012 model regression plane and 2016 values",clab = "(Medals,2016)",xlab = "Log(Population)",zlab = "Log(Medals)",surf = list(x = x.pred,y = y.pred,z = z.pred,col = "black",facets = NA))

#plotting the actual 2016 data: 

scatter3D(x = log(onegold$Population),y = log(onegold$GDP),z = log(onegold$Actual),add = TRUE,colkey = FALSE,cex = 1)

我还附上了 the data链接。我希望我的问题是有道理的,任何帮助表示赞赏!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。