- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40345 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12815
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析! R% M* F( N/ g' D
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。8 P: d' V) D/ ^3 b* H5 S0 k5 ^( T
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
$ t5 s4 N, \4 p2 A0 ~; a" T+ i5 A行描述性统计分析,各连续型变量之间的相关关系如下:
0 a: I, F- {: M9 U2 H4 j0 J8 W N9 @, S9 |' V( ~* y; ?: h* M
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
9 B) c4 ?6 I* @3 X% L![]()
* ~" `4 R2 h- r j. o 9 V* `: H0 U& c/ \2 @% X
最终模型残差图:
4 T+ L, M# }% W: W 3 ` P2 S% Q1 G4 q% h, j
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:1 d$ @: y3 j4 q% t" _
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
; s9 [- x; M7 x, b, G8 D2 Z3 N8 e属性变量的具体影响在此处分析略去。 [3 ^ ]& \% G, w: U
连续型变量的影响主要为:3 T6 A5 ~# l; t' P% w/ }
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
/ M# K. q8 ^7 V1 c 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
( Q# }; C/ M2 i/ n1 h同时,原本为连续型变量的容积率经过离散化变为属性变量后:: E4 o- c" @' _
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
! |" L7 G0 q5 }; t 容积率与环线之间存在着交互效应。; U' x, r6 ]" ^0 t! ^( A2 ~
rm(list=ls()) #清空当前工作空间' \8 b9 y+ s b z D5 \: N
setwd("D:/回归分析")
: }8 @, {- L# s0 M& \$ o9 \a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a9 W3 f& N, v2 d; O
View(a)) z R3 z7 u6 v2 ?
attach(a)
8 V, C+ c3 f3 A1 t2 a0 o/ T3 Onames(a)& {% v m9 d5 L. Z$ B
3 y# h5 {6 R1 g; \! e
; v c7 s. c0 B##描述性统计
: \! Y/ |7 K/ G
; k: h. n- V/ A) I. I: \2 g4 h7 } L7 T$ O+ G! I N) _4 R
#未做处理的响应变量分布情况1 c4 ~0 k5 c' e
par(mfrow=c(1,1))
3 A6 D9 K/ a( m$ y/ ^; c$ g Ghist(price)& x7 g* k$ t( Z8 g1 v' ?1 O
summary(price) #查看响应变量的描述统计量9 {4 \( J/ C' K
#连续型变量描述性统计/ H8 d d8 ^3 \' H6 E
windows()
6 I( g5 e1 H: V$ qpairs(a[,c(6:10)]) #所有连续型变量间的散点图
+ n# }6 \4 F" y! i6 H* y$ e! E+ N# B0 v( }par(mfrow=c(2,2)) 2 ~( z& K, M. X8 f* T {) E: F
plot(rong,price) #每个连续型因变量与响应变量间的散点图7 p' c9 b" N6 E
plot(lv,price)6 x3 z2 G( ^' D6 A6 T
plot(area,price)
( f ?( Z2 @& g9 [* f& Fplot(ratio,price)" H/ ^5 n; g% L% f4 N; r
summary(a[,c(6:10)]) #查看连续型变量的描述统计量
$ l! {. f& v6 _. u# Z5 Ncor(a[,c(6:10)]) #查看连续型变量的相关系数
9 v' w5 w0 q, Z7 O& n1 Z#属性变量描述性统计8 T) R: Z) c7 R# ?* g
windows()
. x. R# S, G2 Zpar(mfrow=c(2,3))
. `8 x, _+ T' B2 x" mboxplot(price~dis) #每个属性变量关于响应变量的箱型图1 l9 x/ W- d4 D ]# [
boxplot(price~wuye)
8 p$ X8 U7 q! l P+ }+ h9 vboxplot(price~fitment)
4 S) r, M8 J7 uboxplot(price~ring) , i: @* _" C. @. k" G/ a5 c+ o7 B
boxplot(price~contype)
. ^, f0 M* E3 {* L8 B- _
0 M- v- G, E2 ^, |7 f7 m
' R7 Z" i" J. A$ r4 r* _2 Q3 T* I9 {! H# ?2 L8 A
H( l x" y( t/ u* c) k5 h3 ~
##模型建立
" U& O1 V0 t0 ~' ^$ q3 @5 }; W
2 O2 [' |, Q' c0 Z#在方差分析模型基础上加入连续型变量$ y" w* P I8 L1 o8 o6 S
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
+ {( o7 b. k# K0 manova(lm1) #方差分析
% i9 h1 X4 `4 T/ b: c" Z: C" @summary(lm1) #模型参数估计等详细结果
& l$ j9 S, |- u) s. g" ]8 jwindows()$ E4 h9 W# W4 P6 q$ |
par(mfrow=c(2,2))
. k8 G$ }/ Q! i! Z% I* j5 `plot(lm1,which=c(1:4)) #回归诊断做残差图
( Y$ x2 a1 C9 W8 K6 A
j& Z- [6 {7 E# ^ v
7 [$ w B* L7 i9 H! z' P4 Z
+ \2 t0 V# e/ W) x4 f7 g1 v( J* n$ h* y6 o, \- z E
##变量处理
+ r. x: N2 e4 g3 X3 {0 o
7 V4 _+ }1 @" I' T2 M
3 g* u) ~0 t. v1 m& e; P3 \6 p###对不显著的变量采用分组的方式希望能达到显著的效果
' c+ N Q0 W$ a. r##对容积率的处理0 x# O- d& [+ {* Z7 n# b+ }* e
windows()
) }3 F$ L! o+ @5 U/ X# in = 4
5 L" u" q7 w! k7 Oboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
& D1 K& b5 \* @# H; Qtable(ceiling(rong/n)) #容积率各分组下的样本数5 q2 M" c f. f, J% q! J: O: T
ronggrp=1*(rong>n) #进行二分类
3 `9 r3 H; O0 k& F5 A& T ?* \#ronggrp=ceiling(rong/n) : v! H+ [# i9 z- n2 Z/ L9 l4 S
table(ceiling(ronggrp)) #容积率二分类下的样本数# s$ A6 K2 x6 `, B7 c% {
windows()
- _! c2 z( N" nboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图' d. v" P5 i: s$ s' {# l3 [: c
windows()
3 Y8 ~& P/ _* `5 g- Vpar(mfrow=c(1,2))
: H. ? C0 {+ D9 F0 _1 S! fboxplot(rong~ring) #容积率与环线箱型图( d6 G: `: y6 c6 k
boxplot(price~ring) #房价与环线箱型图 & J( G4 n6 |5 p2 v
#加入容积率分组和容积率分组*所在环线交互因子的模型$ L- N! z% {- i+ W( s
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)
8 U' @. e i6 ?. ?4 janova(lm2) #方差分析& E1 E9 M1 J. l( @
summary(lm2) #模型参数估计等详细结果
7 u* B1 f. I; \4 z& E9 ]windows()
+ ?* X/ K7 k9 dpar(mfrow=c(2,2))& Q l* g% P9 U- u4 s6 L3 _
plot(lm1,which=c(1:4)) #回归诊断
& l+ y5 ^, S, [9 J( n6 t8 F% T* I, H1 w, P1 Q
6 M# {, @; A* l, X6 b& |' s* ~
##对小区面积的处理
4 F6 `) s5 q P3 fsummary(area)9 S8 a% O! h9 Z4 K, d) c6 T0 w. |- N
plot(area,price)" q6 B/ L4 F( Z0 R5 g
windows()
: P) D! X( d( |$ x& o- cn = 150000+ {6 M( P8 X* f3 u+ ]- v
boxplot(price~ceiling(area/n)) ; C: F. i5 e( w1 k3 e
table(ceiling(area/n))
3 s( P f$ [, P1 c+ \areagrp=1*(area>n)# G" @9 Y: |0 }! j9 A4 n
table(ceiling(areagrp))
0 ]6 X/ X' _4 m! Mboxplot(price~ceiling(areagrp))) N! d! U6 _1 s( q
#加入小区面积分组的模型9 h: z& Q& @3 i y: ~8 ]+ O2 S. C
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)
$ M+ p* n: ?3 M# b3 z* p" Ianova(lm3) #方差分析" B& [" d4 D2 |3 B
summary(lm3) #模型参数估计等详细结果
) o t+ H0 c7 q9 ~; dwindows()
$ e8 U' P! N$ b/ Opar(mfrow=c(2,2))4 c7 B& g P2 ^4 e# g C
plot(lm3,which=c(1:4)) #回归诊断. x4 q# w9 C, u7 b6 n+ _
$ g# V5 |4 F% k6 c6 ?
N. r3 k8 P0 W" V
##变量选择% i2 c8 s3 ?5 ]/ p {4 M; w
9 B* V$ D9 y* K a$ N4 O* l7 S3 R! Y2 x) E R' e
##AIC准则下的变量选择
; k- E4 R" r, G6 k1 j" ?1 Z5 Ylm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic' E# c0 s- }1 p/ v2 J
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
+ M1 ^( c. n5 O' w, v3 @* u##BIC准则下的变量选择3 _1 ^! K4 |% J5 o8 _+ O
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
: V: a h! G6 @* [# G; hsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
' d$ f0 o" V! g( q+ i5 B: w" N( d$ \# w$ V# d R0 I0 |7 K9 {
, z& M3 v- j4 {
#选用AIC准则下的模型进行回归诊断. T1 K2 E% N6 E! Z, d2 s2 E
windows()
% w! k; i: N5 k% q7 p! T- t, n4 Bpar(mfrow=c(2,2))' B2 k" J+ V* ]. W
plot(lm4.aic,which=c(1:4))
: O1 L! V7 z# ?
0 R" M/ K- w# U" F8 s- i; i' [
& q% w& ~6 i g4 h) B$ f! i) T& [0 S3 k# x' C2 _
, T7 @) o: q7 [2 |& G
##数据变换
! ~' Q$ ^+ s5 }1 o( f- e( f
1 h; |) `8 ]- c" Z+ r
6 V0 j0 K' u; ?#box-cox变换
- o/ V9 V6 ^; r4 h$ |library(MASS)6 Y: @" P# z k, L- M; j: p
b=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))
! {' t5 h- \3 A8 VI=which(b$y==max(b$y)) #定位似然函数最大的位置
- D1 u; X" J1 {$ @$ elambda = b$x[I] #精确的λ值
% T |; Z# z6 g/ m# n3 m) [#λ接近于0,为模型简洁性,可以直接进行对数变换; N) R7 w& N O+ M8 F" |
logprice <- log(price)
( k' V( l, @$ U) z3 c. P* @" ^hist(logprice)
5 j8 w0 s% S) f- e P/ q1 m* x# X$ r/ r8 Y0 ^
* o: F) d3 B8 f
##最终模型与诊断
) ^. T5 r x; H
* ]$ x+ u1 w2 {
1 Z3 y( j4 b \, B; k+ ?2 ]5 Clm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)% [7 F0 T M$ L0 T) W
windows()/ Z: g% I$ J4 P( b
par(mfrow=c(2,2))
0 R% S$ T; u6 u ]2 {/ Gplot(lm6,which=c(1:4))
- i- A! O, ]) w$ C, h. Canova(lm6)
8 Q; e; e! C. o! i% A7 [! [summary(lm6)! k$ {0 s# ]- s0 _4 q r$ k% ]
1 y+ s$ _2 v: O2 B& G
" C5 j& y, [/ Z6 s! v请关注数学中国网微博和数学中国公众号,联系QQ 3243710560' q0 o5 x! |1 }
7 u- b$ q( C/ E6 m9 y
6 i3 B8 J& H# ^0 k2 j5 d' k, ]3 F& Z" F8 z
! E3 r3 d6 W- r) H2 ? |
zan
|