今天是值得高兴的一天,同时也写得hin潦草的一天
在stats包里翻出个看起来很高端,但我完全解释不动的拟合算法,ppr函数
投影追踪回归这个名字是直接用百度翻译的,应该是没错吧,反正我没找到啥能参考的介绍文章,所以就纯粹地照着帮助文档的操作来走个过场
上数据:
#导入数据并做Z-score标准化
Data <- read.csv("StasticData.csv")
str(Data)
Zscore <- function(x) {
(x-mean(x))/sd(x); }
Zdata <- data.frame(apply(Data[,-1],2,Zscore))
str(Zdata)
帮助文件里虽然米有明确滴要求做标准化,但却做了除法和log把每个向量都限制在差不多的数量级,所以我个人觉得这个拟合应该是需要使用距离或权重的一种算法
#照例先放个线性回归作为参照标准
F1 <- fitted(lm(ValueSold~., Zdata))
cor(Zdata$ ValueSold, F1)
吼吼,lm做出来相关系数就已经能有0.9888这么高了呀,看来压力还挺大的呢~~
#上ppr函数,设参数nterms = 2
PPRmod <- ppr(ValueSold~., Zdata, nterms = 2)
summary(PPRmod)
F2 <- predict(PPRmod)
cor(Zdata$ ValueSold, F2)
ppr可以拟合到相关系数0.9947,很好很好,总归还是比lm强的
而且,增大nterms参数的情况下,貌似还可以再提高一丢丢,就是不太明显了
不求甚解,轻松愉快,放图收工~~
par(mfrow = c(3,1)) #把画图区域划分成纵向的3块
plot(Zdata$ ValueSold, main = "lm model")
lines(F1, col="red")
plot(Zdata$ ValueSold, main = "ppr model, nterms = 2")
lines(F2, col ="blue")
plot(Zdata$ ValueSold, main = "ppr model, nterms = 3")
lines(F3, col ="lightblue")