昨天硬生生把自己写懵了,结果连睡觉都还在绕这件事,到最后琢磨出来的结果是,我果然很乱来

当咱用线性回归做出来一列残差的时候,如果残差符合正态分布,表示符合随机性,但如果不太符合,那就说明线性回归没能找出数据里所有重要的影响因素

我昨天通过把残差排序后找出了一条接近S形的曲线,但是减掉这条S形曲线后,剩下的部分仍然不符合随机性,后来把数据还原到原来的顺序我才发觉,自己减掉的这条S形曲线才是将近符合正态分布的随机残差

r语言如何添加正态曲线 R语言正态分布和S形曲线(1)

具体再复现一下

r语言如何添加正态曲线 R语言正态分布和S形曲线(2)

先读取数据,由于算来算去发现有些个特别大或特别小的异常值怎么都放不进整个分布,所以本人非常任性的决定,今天一开始做的时候就先刨了它们

T1 <- Table[Table$Deviation >-100 & Table$Deviation <100,]

r语言如何添加正态曲线 R语言正态分布和S形曲线(3)

第一次线性回归的结果依然是残差近乎完美的贴合了源数据,表示线性回归对它真的没啥用处(呵呵呵)

r语言如何添加正态曲线 R语言正态分布和S形曲线(4)

由于整体的微弱倾斜和偏移对整个数据也没有太大影响,所以本人再度任性的决定——要做,就得抓大放小,既然整个数列的随机性是占影响比例最大的,那我干脆就反着来,不管里面的规律性如何,先刨出一个接近正态分布的数列,再看看剩下的货色能不能玩出点啥来,这也算是种思路嘛~~

GD1 <- pnorm(c(-228:229),mean = 0,sd =100)

GD <- sort(T1$Deviation)

plot(GD1, main = "S shape from pnorm")

plot(GD,T1$T, main = "S shape from Deviation-inverse")

r语言如何添加正态曲线 R语言正态分布和S形曲线(5)

本来想直接用R中自带的pnorm函数的,因为画出来也是个翻转的S形,但仔细看看有觉得不行,形状是有一点像,但点分布的密度不一样,咱的数据画出来的反S形点集中在中间,但qnorm画出来的反而是两头的点比较密,所以看来还是要走昨天的路子,用log(p/(1-p))的形式先转换成直线再做

FT <- log(T1$T/(466-T1$T))

T2 <- data.frame("Order"=order(T1$Deviation),GD,FT)

coef(lm(GD~FT,T2))

CanCha2 <- resid(lm(GD~FT,T2))

CanCha1 <- GD - CanCha2

r语言如何添加正态曲线 R语言正态分布和S形曲线(6)

把顺序整理回去,组成一个新的表

T2 <- cbind(T2,CanCha1, CanCha2)

T3 <- T2[order(T2$Order)]

summary(T3)

r语言如何添加正态曲线 R语言正态分布和S形曲线(7)

虽然减掉第一部分后,剩下的数值在源数据中占比已经挺小的了,但还是再研究下

plot(sort(T3$CanCha2))

r语言如何添加正态曲线 R语言正态分布和S形曲线(8)

哎~~~~好像还是个有点接近S形的线,虽然中间已经直了一点,但总体的样子还是那么蛋疼

我今个儿算是跟它杠上了,再来一遍吧

T4 <- data.frame("O2" = order(T3$CanCha2),FT,"GD2" = sort(T3$CanCha2))

cor(T4$FT,T4$GD2)

CanCha3 <- resid(lm(GD2~FT,T4))

summary(CanCha3)

r语言如何添加正态曲线 R语言正态分布和S形曲线(9)

CanCha3画出来的图已经接近平躺了,但两头还是有明显的异常值,所以放大看下细节

plot(sort(CanCha3))

r语言如何添加正态曲线 R语言正态分布和S形曲线(10)

plot(sort(CanCha3[CanCha3 > -0.5 & CanCha3<0.5]))

r语言如何添加正态曲线 R语言正态分布和S形曲线(11)

如果不管两端的异常直接用直线拟合的话,估计也不会偏差太远了

T5 <- data.frame("O3" = T4$O2[order(CanCha3)],FT1 = c(1:458),"C3" = sort(CanCha3))

T6 <- T5[T5$C3 > -0.5 & T5$C3<0.5,]

cor(T6$FT1,T6$C3)

coef(lm(C3~FT1,T6))

r语言如何添加正态曲线 R语言正态分布和S形曲线(12)

最后整理下思绪,如果说所有的随机性都是我们不能成功识别出来的影响因素,那么现在,这个数据其实被拆分成了以下形式:

目标列Deviation =未知因素1 未知因素2 系数3*未知因素3 常数 少量异常

其中,未知因素1和2的分布情况都是均值在0附近的正态分布

r语言如何添加正态曲线 R语言正态分布和S形曲线(13)

所以,我不管啦,还是随机好了

,