- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40049 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12726
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
; Z7 e4 S8 }- P) X6 i1 E2 z这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。8 H1 u' I. ?2 ?0 s
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
. Q9 A5 Z$ g5 P2 l% d6 h行描述性统计分析,各连续型变量之间的相关关系如下:" L8 `4 A1 r3 C3 k
$ H! N. i, B: g# B( [" X
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 7 S, r/ B3 q! \7 G- [) q" K
3 L8 g4 L! M+ f
' {$ r4 @1 p7 |! s, j" B
最终模型残差图:
: X) r8 o6 a" A V/ L $ J% o" `0 ?& R4 I
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
: b) {7 R! e9 L |2 A属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
4 j6 o3 S1 C) t属性变量的具体影响在此处分析略去。* N3 A6 A1 A- _% ]
连续型变量的影响主要为:- y* U; i: K1 T( r5 F v
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
0 p/ j/ V; L9 _. Y; Q 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
1 Y" Q/ d$ `6 N" j同时,原本为连续型变量的容积率经过离散化变为属性变量后:/ `- i, n& s9 \! @# i3 F
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
0 U; w1 b, M" P: l$ n$ F, @/ N 容积率与环线之间存在着交互效应。5 V; @1 S% N% L' |
rm(list=ls()) #清空当前工作空间8 Z5 P: k9 A: v! J+ m
setwd("D:/回归分析")
) R3 a3 c4 x( ?( b0 N9 Ua=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
/ K. X# h# L7 y, c5 hView(a)
5 R I, J! Y# S! n* wattach(a)9 _6 D! P; }0 y- l
names(a)
# ]! F, `, u; o: g; I y2 D& g% w* f" u4 m; P
! K" v9 ]7 M7 |9 H# \+ R" c" n##描述性统计
$ E7 E1 _- H$ t. A& I2 ^' M4 X
4 x Z6 P2 S) I# N6 J; i
#未做处理的响应变量分布情况* Y# d* e6 I' v9 c" W% Z y8 V6 n
par(mfrow=c(1,1))
1 [6 }: |! A+ X1 J: v9 w7 }hist(price)
( i$ L4 m) D* Nsummary(price) #查看响应变量的描述统计量) Z& G" R) h V& @. p8 l! b; k9 c9 c( p
#连续型变量描述性统计
% i; N/ q) V: ?$ g* n8 V% x" Kwindows()
( ]* U, v1 H" I: O+ \' X/ spairs(a[,c(6:10)]) #所有连续型变量间的散点图
* O, C9 |& E* G5 h, Y2 P6 v8 Ypar(mfrow=c(2,2)) ! S. P$ J. `5 F- m5 O5 Y% [
plot(rong,price) #每个连续型因变量与响应变量间的散点图
, r6 X8 t% P: g6 cplot(lv,price)
" ^) D5 J1 h! o: j& [. \# J0 @plot(area,price)
: `3 V7 }+ s1 @$ _plot(ratio,price)
. d/ A3 d; n* U4 N" Y! T$ asummary(a[,c(6:10)]) #查看连续型变量的描述统计量: {' }( m H. d. L
cor(a[,c(6:10)]) #查看连续型变量的相关系数6 m5 P1 G7 D( x6 t$ l
#属性变量描述性统计" ]" _3 ~; A p8 f5 ~& k) t9 w0 X6 j
windows(). P$ m1 V8 S5 a9 n8 D
par(mfrow=c(2,3))
- E& @) K( S0 Z" T% k# yboxplot(price~dis) #每个属性变量关于响应变量的箱型图
3 ~5 w7 f" q+ \$ Sboxplot(price~wuye)
, ^$ t* N: x2 ], }5 Xboxplot(price~fitment) ; i8 c, a' `* y- p
boxplot(price~ring) ?( J. P# F k3 F8 ^
boxplot(price~contype)' ?6 n( e5 e5 K8 F6 n# S3 W
( Y7 h! f; I8 i+ j( `. o: w/ T( W6 k
8 F4 f3 i( |% z& z4 q
, T+ B) E. v$ w6 B4 K##模型建立- j/ `; x8 F% y, I h" r, q
' P" o& F7 H4 c% ~& G& w. b
$ g" d. P/ I n% q7 `#在方差分析模型基础上加入连续型变量- l* k$ T7 ?- h. K% d$ o
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
! q* L/ h& K9 [$ g- Lanova(lm1) #方差分析# T3 `% G5 T+ m C }9 _2 c
summary(lm1) #模型参数估计等详细结果
7 Q* r$ n M$ Z# Ywindows()3 p- ~+ }5 q" w2 ^- ^- D c& H; i
par(mfrow=c(2,2))
9 f- ^* ]5 |2 t, K' @plot(lm1,which=c(1:4)) #回归诊断做残差图
2 ?9 Z& E1 X; @4 q& J5 e8 [: t$ b/ D1 k" o' a |( `
1 l! H0 ^* l- ]3 t P; q/ A2 S
: t/ e9 p/ ?. P4 ~
7 s x; b9 i1 f4 x2 W# V+ }+ M% h& E0 v
##变量处理
% R6 p. \4 q, U
' K7 W. _' ?) K: w# Q- x8 p% `5 l& ~7 q! t% L( X$ c$ }
###对不显著的变量采用分组的方式希望能达到显著的效果
% u$ ]2 c. S* Q: u##对容积率的处理8 K2 C' s2 h8 \# {2 ` z
windows()
4 t7 l) {8 s7 ]n = 4
* Y8 I8 _% ~: Y* C, Z+ D5 Y& e6 Iboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
# U5 E# U$ V- Htable(ceiling(rong/n)) #容积率各分组下的样本数& M! |9 D* ~8 i
ronggrp=1*(rong>n) #进行二分类
7 h& W( j& V s$ O f& G, ~7 S#ronggrp=ceiling(rong/n) ) {* l# Y7 T( E
table(ceiling(ronggrp)) #容积率二分类下的样本数: @: A: m1 Y- N. A
windows()
3 ^! _- D/ o% N3 U; f R* u6 Wboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图" y3 R R* }4 r9 n. B' |. j- q
windows()
1 F. f% C$ S4 g% ^( Ipar(mfrow=c(1,2))4 n |3 B! }. S8 c
boxplot(rong~ring) #容积率与环线箱型图
- d1 ]; j3 E5 \, D2 h) J2 ~4 S E, \boxplot(price~ring) #房价与环线箱型图
Z. ]" G% A. z* v#加入容积率分组和容积率分组*所在环线交互因子的模型7 ^3 |0 V) D; Y7 F# W+ R
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)
4 D5 @5 W+ {* B# P0 ]* K; [anova(lm2) #方差分析
# W* O- I; T0 s/ q+ t! M# l; `4 W* u) ksummary(lm2) #模型参数估计等详细结果/ W( S- R2 u6 C2 |* a P7 C4 D7 [
windows()6 K; w/ ~# X1 \' L% w: {
par(mfrow=c(2,2))
4 t, J# D" F% x; Splot(lm1,which=c(1:4)) #回归诊断
8 b! T# u% p+ e/ i" i# F/ }6 W
. e, M& b( w2 k& C; h s4 O# B
H& i4 d- d& A: H( G2 X##对小区面积的处理; i* ]4 v! q1 G, l
summary(area)
* b# |: A7 ]; X0 z+ \2 qplot(area,price)
1 r0 {5 p( s; g! I0 C$ vwindows()' a& O) t# B: p. P. D
n = 1500004 N: Z; W5 R: Z; U& j: x: [
boxplot(price~ceiling(area/n))
4 B- R8 s$ y1 ]- o$ Q, Q: |table(ceiling(area/n)) 2 Q4 W+ ?3 u2 J- v, r$ U: T' K0 v
areagrp=1*(area>n)/ G! Y! n, u) z2 F, I
table(ceiling(areagrp))
! Z" a: i! I" t( n3 a& Vboxplot(price~ceiling(areagrp))
8 `1 \) C0 f8 h#加入小区面积分组的模型
4 ^2 B }9 P6 Q0 v, llm3=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)
; p' l& ?$ @/ }+ u0 [anova(lm3) #方差分析
1 s1 R: L) v* Z0 w1 \! _3 Ysummary(lm3) #模型参数估计等详细结果, P# g- e( X, |1 ]/ i5 C% P1 q
windows()
8 N# G3 k$ P7 T$ E( Upar(mfrow=c(2,2))
9 l E Z& Z$ n% W! A& J+ [plot(lm3,which=c(1:4)) #回归诊断1 J1 q/ b, {, V; F8 ?
/ \5 y! ?& w$ o" M- [: W5 m5 m+ V
* p' C; f8 F" Y) r$ M a1 |
##变量选择
& x+ M2 M" h) A) } s, X( z, x* _$ G5 C8 s( j O, u
6 a/ x& q, |1 V, a& l, C# f##AIC准则下的变量选择
0 k2 \8 G2 [& R: o+ Mlm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
# D$ Q' |& ~ a% `; r3 `9 Zsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
# R7 Y3 W6 `" ?) p( _, L! p4 I% M! [##BIC准则下的变量选择
- f% ~' E, N, t' Olm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
3 v) T) u+ a8 K' zsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
2 F. g9 P5 I% ^, v z0 m% m+ A7 x% k, Q' j m8 q
9 b" L% g. f6 O; r#选用AIC准则下的模型进行回归诊断: R# F \% M) D8 w. h, }) a
windows()
* Z3 ?" A4 q8 K! ?( P$ dpar(mfrow=c(2,2))) v2 i2 W$ o0 b2 I3 ~& o; o+ i
plot(lm4.aic,which=c(1:4)) + q" G$ |( `8 W ?6 \. E, S% B0 H
0 V: B8 i* i, ?
0 L% j9 l" e! U4 O2 K) B9 e0 i- J/ }$ ?- u
. a; h. |' E9 X" ^
4 |. ^: u9 l$ N6 y##数据变换+ x7 s; C* U/ p1 k$ A
C# Z% r+ S5 v" }+ e" j9 C8 l% v
, G, f' D9 w! V. E5 p$ t#box-cox变换: `) f) p @" i+ g7 ~
library(MASS)% S1 A3 D2 }+ j4 B
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))
" z- @5 T0 o/ OI=which(b$y==max(b$y)) #定位似然函数最大的位置1 s. D& d* O* M! F* U! [) y
lambda = b$x[I] #精确的λ值
$ P6 Y$ w4 F) T#λ接近于0,为模型简洁性,可以直接进行对数变换5 W3 t; C& X/ F
logprice <- log(price)
: U% k6 V0 b* b- C: |, rhist(logprice)" B& x0 T8 [# M1 y) T1 c
; M3 L4 M% E- M% s W$ p
& i; L+ y/ y% S' c( F [
##最终模型与诊断0 h& q4 S9 D: g" W4 O! V
' P. C6 h3 I: P( I# H8 m, N2 P
$ L# J! m' k. s: r
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
* I E- h8 e4 m( awindows()
+ Q% z8 |" x1 Tpar(mfrow=c(2,2))% [ Q6 |' `) W) v0 y8 I
plot(lm6,which=c(1:4))
0 M% w9 l2 W9 g0 N- j6 }anova(lm6). S9 _5 e: k8 C! q) N B4 }: O& U
summary(lm6)- B" q3 `; M2 w# m v) u+ l
8 |3 l/ [! p2 ~# M: k% a8 x3 |" d& ^! F* s' s$ P. q
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560+ A. a! ]) S; L1 u7 E$ \8 v7 ^! Q
! N- l( R; z" V% R' k4 L: W
/ w) t5 L0 a/ j. L5 P7 ^7 `4 [7 w" J. b# g
; j- e3 p& I4 W- e9 j" L; \3 I |
zan
|