这两天的气温用直线下降来形容都不够,简直是自由落体
其实写过最大似然估计就不太再想写最小二乘法了,因为这两个做法重复性太大,可以说大部分的操作都是一样一样的,只有function里的公式有点细微差别
但是,看我最近各种瞎扯的趋势,还是有一篇算一篇吧
整理下大概步骤:
1) 导入数据 ——(强行辩解:这不算废话,不导入数据能开始干活么?)
2) 决定拟合曲线的公式形状,可以是线性或非线性,指数、对数、幂函数神马的也OK,您随意
3) 按这个曲线形状先适当提取加工下变量的形式,这步可以放到后面的function里一起做,但我个人建议提前单独准备会比较方便后续计算模拟值和残差
4) 写个通过输入系数计算残差,并用残差列计算平方和的function,以平方和作为function的最终输出(return)
5) 设置一个长度正确、而且最好数值恰当的系数向量作为初始值
6) 使用optim函数,计算残差平方和达到最小时的系数向量
7) 代入系数,计算模拟值和残差(如果需要的话)
虾米??你问极大似然估计篇里出现的MASS包?哦,那个包是专门为计算似然值才加载的,optim函数属于stats包,其他计算也都是基础包的内容,所以这里用不到它
以下是上述步骤的整体截图:
其中涉及的数据情况:
plot(Table$size, Table$value)
abline(lm(value~size, Table))
#上面两行是画图用的
代码部分,跟截图里一样一样的,单独贴只是为了防止图挂掉看不到
-----------------代码开始-------------------
setwd("D:/")
Table <- read.csv("houseprice1.csv")
str(Table)
#线的形状还是用直线(因为方便),形式y=ax+b,下一行的转换属于个人偏好
Array.x <- cbind(c(1),Table$size)
SMQ <- function(x) {
CanCha <- Table$value - Array.x %*% x;
SQCanCha <- sum(CanCha^2);
return(SQCanCha) }
CoefOrgin <- c(mean(Table$value),0)
Op1 <- optim(CoefOrgin,SMQ)
Op1$par
[1] 278675.75 22422.21
#计算结果代入步骤
Sim <- Array.x %*% Op1$par
CanCha1 <- Table$value – Sim
-----------------代码结束-------------------
OK,今天就这样认(jia)真(zhuang)负(zai)责(xian)滴结束了吧