- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40029 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12720
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析6 y% P- u# [$ ]+ I* n- u
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。$ Y0 i4 S7 D) \# ?( x6 _* H7 Z
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: 7 ~* y" ]( v4 L) m' ]
行描述性统计分析,各连续型变量之间的相关关系如下:- H( b$ ^3 C2 G! \; R
![]()
$ S7 e r7 n( N2 I6 k名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
, z' l1 B8 R5 Y# m2 }* k7 r+ w 1 j# R) f2 v& q t
5 \! ^. H; `2 J) j$ _; t$ v
最终模型残差图:
5 P$ P5 U% e: X0 R# S G5 e/ g. C " q, P8 {' c+ J/ L: h! i) K
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
& B n. i! @$ j属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
- ?8 \3 _# U2 Z, [属性变量的具体影响在此处分析略去。$ n1 W, o2 b- E- f7 J$ q
连续型变量的影响主要为:! z4 ~/ e+ g+ L; X( J" G/ t; a
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;' u t& J. {+ l* b4 x. h! H
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;: ?; ]/ V: f. u( x m- k) O1 Z
同时,原本为连续型变量的容积率经过离散化变为属性变量后:7 ~& z$ U d7 d8 ?7 G, G
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
" C g" m- C* u 容积率与环线之间存在着交互效应。& B7 g7 Q% H! n0 q# z
rm(list=ls()) #清空当前工作空间
" [5 A2 ~: k* i# w4 Jsetwd("D:/回归分析")
. i4 r5 b+ z! R2 @a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a6 m# H3 o) n. L+ s
View(a)
4 P G+ y- h4 K/ Jattach(a)
$ w# g' M, S! ]: ]! Snames(a)/ v2 m% f) X' @
8 ^+ n" r) a1 ~' k6 K W; B3 \% e
( E5 d) E' g; n( f" W R m; l- D##描述性统计% [+ O) g! c9 ~
$ z7 O- q. C: b: A6 M a) z
9 b" F( M# V |! V/ B9 B#未做处理的响应变量分布情况
. G; e. U' R+ {. p5 F, Gpar(mfrow=c(1,1))
: r; ] {: a8 K. Q7 P/ g. Shist(price)
" a$ q) V0 n6 w1 C- Q; Hsummary(price) #查看响应变量的描述统计量) o* f* O" d7 h: H& e" L
#连续型变量描述性统计4 E; L0 S0 N4 h
windows()
8 l1 Z: ]5 [- r' j" e: t' L, _pairs(a[,c(6:10)]) #所有连续型变量间的散点图
" `- V/ N8 e- K0 r: W9 tpar(mfrow=c(2,2)) 6 d1 C4 v# i6 H! C4 T/ ^
plot(rong,price) #每个连续型因变量与响应变量间的散点图/ i+ H. Y% `, J2 z
plot(lv,price)
8 |5 Y: V! f. p, Vplot(area,price)
; s( m$ N8 f2 _6 ]1 U \, M" Y% Hplot(ratio,price)* X9 {- `0 f9 W9 x
summary(a[,c(6:10)]) #查看连续型变量的描述统计量/ v1 p8 v# J6 k: w
cor(a[,c(6:10)]) #查看连续型变量的相关系数
. e7 r; V! a6 f( F9 H#属性变量描述性统计, _* C& C: g( H G+ e9 T: a; K2 c1 K
windows()
( y% T i% q) q6 p7 R8 lpar(mfrow=c(2,3)) $ \$ N9 K) e0 p9 G& C5 a. k
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
7 B3 K/ A3 |+ _8 nboxplot(price~wuye) ' r+ T1 T a& z) f
boxplot(price~fitment) 5 |( h" B/ _" _
boxplot(price~ring)
1 G; [7 v7 z. m" O1 Cboxplot(price~contype)' n- e# i5 @& J. ]$ `0 X
1 h0 ^: N Y7 }. A$ l
: `0 E4 o& [0 N9 h1 D& Y. _2 ^7 ~* i; _7 g( k# `
* ?' y2 O0 L H5 _) }1 I##模型建立4 K0 i, Q/ }9 d+ y9 ~! z
0 L: m, J4 @" h: }: X7 F+ a% m3 S _: {1 U2 y- \! S
#在方差分析模型基础上加入连续型变量% h& G' U8 O" W& @
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
# v0 Q3 s* K* s7 {8 b O) U$ K& manova(lm1) #方差分析
$ [% K2 \( M4 M* ?summary(lm1) #模型参数估计等详细结果
. u# T$ ]0 g3 ~9 y/ Kwindows()$ ]4 x) D$ k, _/ v7 ?. f
par(mfrow=c(2,2))* Y8 ?3 V) q1 @- ?7 ]
plot(lm1,which=c(1:4)) #回归诊断做残差图, O0 e Z: U" P9 B- l
# D6 V$ ]) A9 p9 g8 L v2 }) W5 f& `7 D- e
1 [3 I, y) [' u! f7 B
2 ~. X/ K0 p/ h7 O$ {8 k, M$ l##变量处理8 u7 u2 r C" W1 {* n+ J, T
% `% b! K) o; ~/ Z Q- I9 P `5 Q$ s* Q. g" L
###对不显著的变量采用分组的方式希望能达到显著的效果
' G& C9 p! j5 l; A. I0 r##对容积率的处理
9 |; O3 S# N1 \- cwindows()
' s, s6 t! N$ ]4 kn = 4
3 v* w1 p4 s3 B$ o9 E1 ]" W# Tboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
6 `6 B) J) y- L1 _: m! j( p$ \8 Gtable(ceiling(rong/n)) #容积率各分组下的样本数4 J/ X# R0 W8 d
ronggrp=1*(rong>n) #进行二分类
; |4 ]4 \0 b3 N8 |/ {" E#ronggrp=ceiling(rong/n)
0 p; G3 {. |# y0 E4 g2 ^table(ceiling(ronggrp)) #容积率二分类下的样本数
9 R$ I7 L& e3 U( D+ ^windows()
# F6 O7 `+ w" T4 x! M: Mboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图& j" z$ S4 i, I
windows()
2 q/ v6 Z+ F6 \$ ?& r7 ~6 M8 Hpar(mfrow=c(1,2))8 R( |2 e4 g4 |( \) `
boxplot(rong~ring) #容积率与环线箱型图
) d% S m8 u; a0 H! Pboxplot(price~ring) #房价与环线箱型图 4 q( e2 N% o" U9 L' H
#加入容积率分组和容积率分组*所在环线交互因子的模型% x1 y# `' f* s: i9 D
lm2=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+area+ratio)
2 Z/ a. f- l; g* Eanova(lm2) #方差分析
0 h3 @/ G$ A( t) c9 J9 z- usummary(lm2) #模型参数估计等详细结果
& s, D& |+ c2 `4 x- h' xwindows()
8 s0 E" v R. ]9 z$ q% ^par(mfrow=c(2,2)), [- S |" ^. u. \( d; @
plot(lm1,which=c(1:4)) #回归诊断
, c7 M2 F% f1 h; K9 v0 U: U, h
/ K. B6 J7 _( W7 m. e& z+ K
##对小区面积的处理
) e% s2 Q* q8 J5 M& F( Osummary(area). N4 W$ J" q, F# u; T# s
plot(area,price)
3 L: q) j" E$ I$ ~ H9 G3 Z2 _7 Cwindows()
9 u' O4 g: [, A5 c) [n = 150000( Q% B+ g {! ^6 [
boxplot(price~ceiling(area/n))
' z* C2 A' _7 L* Dtable(ceiling(area/n))
) p: Y# U# p& N P1 L# N; eareagrp=1*(area>n)
1 i* p6 ^1 f4 ^7 S* k5 Stable(ceiling(areagrp))
" p! P9 [1 J& s. t& uboxplot(price~ceiling(areagrp))
8 m, h- ]( v0 F7 O8 K1 J#加入小区面积分组的模型
7 Q( \) h- I6 q* w. l" }lm3=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+as.factor(areagrp)+ratio)
. h( Y+ L, @" L1 K' Y8 Y* F/ @anova(lm3) #方差分析
c2 b3 J2 [9 `5 ~7 jsummary(lm3) #模型参数估计等详细结果+ e/ \* t$ B. i/ h3 e/ s
windows()% a3 i; D9 f. S8 Q2 ~. S
par(mfrow=c(2,2))
- j) N, L6 r" I% zplot(lm3,which=c(1:4)) #回归诊断0 G# H9 F9 C- @
7 R; W5 q7 B4 T, r, G+ J1 i! h5 c% V+ r4 d2 R( L+ G2 S2 I
##变量选择
$ ^3 Z* K0 R: m& C) o6 I. h2 r% O6 p% U) j! ^/ S" t
) O* B1 q, j! J6 m% U3 e
##AIC准则下的变量选择
- F" `: `3 S3 Q' q" Vlm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
' p: _! }6 N Y0 W0 Z% Z+ x4 u& C+ Qsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节1 W7 P( i, _, i" b% }/ h- ^7 E# e
##BIC准则下的变量选择: x/ e7 H- |. f8 ]
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic3 R1 |5 [8 V, [. |
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节4 |8 \0 J" g8 x* ?. P- O$ M7 ]
- w0 \2 Z( Q8 J
0 D! J: i6 M: y! A" E#选用AIC准则下的模型进行回归诊断1 k9 ]7 E4 B: _ e6 Y% Y+ i H: R5 X8 \
windows()
% l8 ?( E8 [ w+ n) {* B* ~par(mfrow=c(2,2))
+ W0 p3 o4 L& W Oplot(lm4.aic,which=c(1:4))
1 o) s/ {% S8 e& M0 @! ~$ u+ o+ _5 Q
2 w; p9 h8 u# |0 L* O$ p; w( D/ u
! K w7 k" b# i ]
& ?$ Z5 _) N9 U1 b O
##数据变换
* C4 Y0 e" U6 S+ P( R6 ?& C2 _
e# f3 N8 [* L8 W* g#box-cox变换6 ~6 I/ a3 r* g$ S* F
library(MASS)
( V0 Y/ Q! T3 b4 E8 ^0 V2 bb=boxcox(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio, data=a,lambda=seq(-3, 3, by=0.1))1 B) [# `& L, l& ~* y5 O$ w _
I=which(b$y==max(b$y)) #定位似然函数最大的位置
4 l6 ?& c- \( D% i' @3 `) Ulambda = b$x[I] #精确的λ值
" d" N8 G) r' M/ G- _1 R#λ接近于0,为模型简洁性,可以直接进行对数变换) B6 `5 h; _( P; [* A/ K
logprice <- log(price)5 a. ^& _- _7 [7 ^+ c
hist(logprice)
1 @: ]3 r$ n5 S; z
: h1 Z3 i2 q7 W& k# @- Z1 n/ S7 {4 @+ [. p" D+ P: {( i; D
##最终模型与诊断
|: Q$ }9 H% b# C9 X, m" J* W+ B- |0 N0 {+ ^
& m5 P. ~6 @: F/ N$ M5 hlm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
0 _) W5 X S9 w# S0 T, owindows()
! G5 @+ V& d0 X/ fpar(mfrow=c(2,2))9 F, M0 B" _ w9 h
plot(lm6,which=c(1:4))
5 T1 V& Z8 X% A( l* danova(lm6)
, }; o" S- p. gsummary(lm6)
, \8 |4 `* |3 Y: Z% c
( C7 J2 _0 l. [. ]& Y( Z% a6 N
6 o- [. `/ u& R: n% g( F) |- x" V请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
, W% }$ p1 r# l# }3 i* Z2 ?, B7 O" y. l9 L8 {
! z0 a0 D1 l3 x, ?' `
: d2 K$ Q/ d3 g2 X
) C, H: _/ J( e |
zan
|