- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40348 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12815
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析 C; s+ p0 n X2 F/ s5 R0 F
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
+ Q1 {9 h7 N, }+ W这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
1 f* U3 D# p1 K0 d, k行描述性统计分析,各连续型变量之间的相关关系如下:7 g3 ~( @. X& c
![]()
* W7 I/ K. I: n8 t4 D; c4 d0 n名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 - @1 r' A4 S8 V/ E# E# T7 P5 {
![]()
) U- f. \% L, `0 W9 ^1 R" [ 1 z9 s/ T# b& C! A+ O, E4 p
最终模型残差图:
! l" g6 P% f3 t G# } * \1 w! T& R; L4 Y; z
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:: J; y/ w7 z# i; Q6 v+ S
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比- k$ ^5 W+ Q6 T; s
属性变量的具体影响在此处分析略去。
% b7 }2 N2 ?3 O" S" s连续型变量的影响主要为:
- Y) f; L$ F9 j o6 L& B' D 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
& q8 l5 \9 `& M/ I 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
9 p$ I: \) e' _同时,原本为连续型变量的容积率经过离散化变为属性变量后:4 C/ t, X5 G3 b+ A- K/ r
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
+ o# {" m0 M$ a7 j$ [( _2 | 容积率与环线之间存在着交互效应。& O/ @- \* {5 C
rm(list=ls()) #清空当前工作空间2 c2 S" p2 z# v' W
setwd("D:/回归分析")0 C: E0 U) p! V! a9 ^# N5 ?
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a/ }' B. H7 n, i) w7 c C
View(a)
- _5 _1 f4 P# c) d# \# O$ Dattach(a)
0 m! _* a+ G" Enames(a)
! U/ A$ Z+ Z6 `# `1 L! n/ f9 {$ f2 P
- w9 t z1 i( E& M6 V& Q6 W
##描述性统计: H5 W9 Q: o) f2 b) y
' B3 T' |2 g3 S" V2 Z/ |) \& l$ b/ t
% r7 P1 v% D8 J+ {0 g8 a$ g#未做处理的响应变量分布情况
) N7 [% n M: Vpar(mfrow=c(1,1))4 g4 e0 c9 e: ?% O, S! F
hist(price)% f* q0 N" n; j# j: u7 l0 y" X
summary(price) #查看响应变量的描述统计量- Q, e% s) K1 A# f( @+ P
#连续型变量描述性统计( e1 `- S7 [3 S! m* N+ J8 A1 r3 ]1 D
windows()
$ s/ H3 I) F* j8 k) ~pairs(a[,c(6:10)]) #所有连续型变量间的散点图
1 c& i8 _- a( D) R% A \# _" Cpar(mfrow=c(2,2))
) w+ r8 X# g/ |plot(rong,price) #每个连续型因变量与响应变量间的散点图
3 E! G) y5 C* i( lplot(lv,price)
+ U2 t1 p0 h' T- Mplot(area,price)5 O; p" `9 X5 f6 u6 S s7 h: L
plot(ratio,price)
2 ]5 a/ s# }" O) t( `summary(a[,c(6:10)]) #查看连续型变量的描述统计量0 g! M$ \% s; r6 K9 O/ ?/ E
cor(a[,c(6:10)]) #查看连续型变量的相关系数
# g% c A. H8 w7 n& [; V#属性变量描述性统计
+ n- \' }% k2 B- K! e6 d' g. lwindows()
8 z7 j+ L" k+ v* O& Spar(mfrow=c(2,3))
. c0 _# ^2 y2 K' ^! m: K) eboxplot(price~dis) #每个属性变量关于响应变量的箱型图
6 [$ h4 R6 S1 V( M! _boxplot(price~wuye)
; W k# E7 r( ^boxplot(price~fitment) 9 M& X6 f" A% k7 i% c8 o
boxplot(price~ring) % S) T$ t' L; d+ R! i
boxplot(price~contype)2 p5 g0 C# _ Z8 |, U
' o3 C+ ~6 y$ t2 D! K$ t$ @2 k2 |! J& E+ |9 ~2 J/ V" u7 X* P
; c# R& E/ X4 s) d, S
4 N4 Q9 c* |! l, C
##模型建立5 P. I; g# ]* H5 ~" T
, L3 {9 p% ?: v5 o' R! h9 a! A9 {$ T
: C- s* \- |$ M B#在方差分析模型基础上加入连续型变量
" i" [: b4 n( T, ilm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
. K- X! [% g( ~9 uanova(lm1) #方差分析
! T! [' x$ |' vsummary(lm1) #模型参数估计等详细结果1 ?9 W9 H, U( E" m4 p- [
windows()
$ `! j. M* H; ]4 f) Epar(mfrow=c(2,2)): F+ b* x9 _9 S- x: b
plot(lm1,which=c(1:4)) #回归诊断做残差图3 i( V2 Z# @% ^ g
) d8 u0 _+ n3 i+ e, Z/ B# J, m
: n4 Z/ U: ]$ s$ T% Y
( D2 t; M6 m' G. ?! O, ~/ v( y6 n# g( N. k) Z. }
##变量处理: q# y, |- a: ], [- i+ ]
1 W! @# b8 C+ O/ U' c
! n9 x* P$ w/ g
###对不显著的变量采用分组的方式希望能达到显著的效果
0 ]+ G( ^/ w7 F##对容积率的处理9 d$ f, v2 Z2 G: K: F
windows()
1 o1 k# \0 {! Vn = 4
2 L) J) u0 T. e" M! B. Wboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
$ g1 n: e3 W2 N6 N3 etable(ceiling(rong/n)) #容积率各分组下的样本数# p" |5 q) f- Q8 {3 N* u K
ronggrp=1*(rong>n) #进行二分类! U6 y1 i& ^/ |. N+ P, }, [" [
#ronggrp=ceiling(rong/n) F6 [5 o ~1 l, K
table(ceiling(ronggrp)) #容积率二分类下的样本数
9 I0 i1 e1 Z* ]" i6 awindows()
% x2 g# R z5 v5 I3 |boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
$ f p9 d! k9 x6 F8 N5 _ e( R/ awindows()
* v& w4 a* Y; Xpar(mfrow=c(1,2))
3 e$ ~6 y( b- \9 \/ Sboxplot(rong~ring) #容积率与环线箱型图
* H1 F; a; Z! Zboxplot(price~ring) #房价与环线箱型图 : R+ D& L7 P4 P4 j3 H p" T
#加入容积率分组和容积率分组*所在环线交互因子的模型+ o" e% v$ c" I0 m( J& Z- 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)5 K3 j/ \. ]* s, d/ Z5 P3 [5 p
anova(lm2) #方差分析+ B2 N' I+ p! b7 n5 v) }
summary(lm2) #模型参数估计等详细结果
& H2 m* n* A+ W5 `7 h' iwindows()) N! S1 z% v) b6 K) d) j) y" M0 o, p+ Y
par(mfrow=c(2,2))+ F5 ~4 k! C+ O
plot(lm1,which=c(1:4)) #回归诊断
+ B5 r5 n9 t7 z+ D; m5 {' h+ F+ E! C9 L
9 Z# p5 j4 u: M/ `, k( N" F##对小区面积的处理( N+ f, d2 u$ b1 H. L. M) q
summary(area)
( P) d) v3 l4 s2 M6 N% Jplot(area,price)# {# C1 k8 m( ~' x* Y2 n
windows()8 t l* r" g$ I1 t
n = 150000
; Q( e2 c* u7 M" ^; [boxplot(price~ceiling(area/n))
6 C+ F5 g1 n1 _/ ~8 v- Ctable(ceiling(area/n))
- E3 ]) S7 d* kareagrp=1*(area>n)% p5 R/ G- E0 z/ V' w$ q
table(ceiling(areagrp))
5 ^* a( R$ e& |! I0 K6 w7 j4 Zboxplot(price~ceiling(areagrp))/ A- o5 L& O ~* W7 ?( t
#加入小区面积分组的模型7 I4 h; P+ }. o [. D
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)* |) ~3 ^/ V: b! P
anova(lm3) #方差分析# ~8 G P4 X2 {" m3 u/ a: g
summary(lm3) #模型参数估计等详细结果
* q) Z5 ` x. S9 S; gwindows()
M# V! T' e& P+ I+ {/ H: Vpar(mfrow=c(2,2))* _8 b6 s# x* p, ?& J& m
plot(lm3,which=c(1:4)) #回归诊断
I2 O: [* B) L( f7 o! y3 U. ^& I8 }/ v
+ [ [. e- y3 V# C$ j P8 {##变量选择
5 R; ?' V" [# d0 m9 y7 k$ X; F$ o; c: a" M
+ K2 A# o, r- ~) k" m5 K I##AIC准则下的变量选择' j7 [- O. b, @! K: i8 e
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
1 Z! T7 ^3 O L) ^! F& qsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节+ r$ G' z0 Z( e+ I2 G
##BIC准则下的变量选择4 g! B6 N% O* f! x) i
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic% \7 M1 h% f; H% |; @
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节; A; @7 b3 E5 z @& J
0 ^. l/ q% o6 v/ {, d( n
7 s8 J. L, |9 C K# Q#选用AIC准则下的模型进行回归诊断. _" \/ M9 u6 E4 `- ~, z: N% V
windows()
* B( z, e7 j2 i$ Y6 @par(mfrow=c(2,2))! @ Q) k- R1 C7 E+ C# B9 @
plot(lm4.aic,which=c(1:4))
% F" z, Q5 z$ |/ b0 y0 b* A- @, H9 N; I* n2 c! B
! j x6 J3 M2 k. [
+ U" ^2 n# O% K9 {: M, ?
4 y; o' D- m' ^+ x( V##数据变换
/ ~3 \" X+ l$ {# v# _$ u- H r9 r1 ~" Y
% ?" Y; V* J; S R$ D8 S3 i3 [#box-cox变换
) U( x+ |4 M/ A/ o0 X3 Jlibrary(MASS)
( o. ? e6 E: h6 I3 m* A# W. tb=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))8 g0 i, v/ C4 t! r
I=which(b$y==max(b$y)) #定位似然函数最大的位置3 [ K3 i) M' P( K* f6 ]
lambda = b$x[I] #精确的λ值' C' q9 K5 j. S2 W
#λ接近于0,为模型简洁性,可以直接进行对数变换
% A; A- w" z1 i: G+ y. Rlogprice <- log(price)6 F% T& e: J ~6 e+ z9 P" Q
hist(logprice)6 L3 F% j0 F: A% P( A9 U
9 {$ [* i5 P2 Z) E" ]4 Y5 X
- D$ D! K4 l1 T4 M' M- m2 X6 E##最终模型与诊断; f5 v" d1 m; i, c2 g
V0 S7 S- @4 M- S: J7 E7 i3 M. E+ t" ^! ?1 ?4 `
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
$ Q2 e! h3 s- k; Twindows(): q. M$ Y9 r/ u2 Y) i
par(mfrow=c(2,2))
( |% M+ Q5 K* H4 u8 ~" e* Xplot(lm6,which=c(1:4))3 w) z& s9 K; U
anova(lm6)/ o$ @3 n: ]+ Q& q- y( B+ o' n; _1 W
summary(lm6)3 E6 n3 R& {: ]9 \ F- G) A" ^: B! L: `
8 d, }, A/ L- L2 `( g
' Y, s- \% k) q+ _! g B' w
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
- t7 f% B6 R) N) b" u! M) H* A8 K. K1 M* H
* Y3 j3 x" f& Q& }) Y
9 u x; B! _3 M& e
9 L; ]- @ B* U& l
|
zan
|