四时宝库

程序员的知识宝库

R语言——最小二乘法(r语言最小二乘法求参数)

这两天的气温用直线下降来形容都不够,简直是自由落体

其实写过最大似然估计就不太再想写最小二乘法了,因为这两个做法重复性太大,可以说大部分的操作都是一样一样的,只有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)滴结束了吧

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接