【回归分析】[9]--加权最小二乘法

[回归分析][9]--加权最小二乘法

  这一节会讲一下关于加权最小二乘法,这种方法是用来处理 ”异方差“ 的。如下图
 

关于处理的方法:



例子:我们来看一个直观的例子

1.构造一组数据
x = Table[i, {i, 1, 1000}];
y = Table[2*i + RandomInteger[PoissonDistribution[Ceiling[i/100.0]]], {i, 1,1000}];

2.对数据拟合
data = Transpose[{x, y}];
Clear[x];
lm = LinearModelFit[data, x, x]

3.画出残差
cancha = lm["FitResiduals"];
p1 = ListPlot[cancha]


4.按类别,看一下彩色的图
temp = {};
For[i = 1, i <= 10, i++,
  temp =  AppendTo[temp, cancha[[100*i - 99 ;; 100*i]]]
  ];
dataList = 
  Transpose[{Range @@ #[[1]], #[[2]]}] & /@ 
   Transpose@{# + {1, 0} & /@ 
      Partition[Accumulate[Length /@ Prepend[temp, {}]], 2, 1], temp};
p4 = ListPlot[dataList]
可以看到残差随着x的增大而增大。

5.求出加权的系数

计算总的残差
canchaTotal = Total[Abs[cancha]]/Length[cancha]

计算每一组的残差
canchazu = Table[0, {i, 1, 10}];
For[i = 1, i <= 10, i++,
 canchazu[[i]] =  Total[Abs[cancha[[100*i - 99 ;; 100*i]]]]/99
 ]

计算系数
xishu = canchazu/canchaTotal

计算权重
weight = Table[xishu, {i, 1, 100}];
weight = Flatten@Transpose[weight];

6.对加权后的重新拟合
lmn = LinearModelFit[data/weight, x, x]
查看其残差
temp = {};
For[i = 1, i <= 10, i++,
 temp =  AppendTo[temp, canchan[[100*i - 99 ;; 100*i]]]
 ]
dataList = 
  Transpose[{Range @@ #[[1]], #[[2]]}] & /@ 
   Transpose@{# + {1, 0} & /@ 
      Partition[Accumulate[Length /@ Prepend[temp, {}]], 2, 1], temp};
p3 = ListPlot[dataList, ImageSize -> Medium]

可以看到残差比之前要好一点

可以放在一起比较一下
Row[{p4, p3}]

有较为明显的区别。

以上,所有
2016/11/20





转载于:https://www.cnblogs.com/wmn7q/p/7265541.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值