- 在线时间
- 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语言】回归分析案例:北京市商品房价格影响因素分析 j" I3 k" u. K% W- r- I, V
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
# [) e& Q; q6 T; ~这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
?3 r! |5 c. f; f0 B+ c$ L" ~行描述性统计分析,各连续型变量之间的相关关系如下:# o C/ r P6 g" {" ~
( [, y: Z3 Y9 ]% J- C q& M
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
! f- j; h _9 [: P/ w7 C9 `![]()
$ @1 k4 h$ R; a: F8 [2 B7 } ; q4 b4 r3 }( U( i( Q8 ~& |
最终模型残差图:
, D5 Y1 _: n2 _% z% g! d+ `![]()
6 j: \# G; |' f& R通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:7 m* d. r1 @( ?9 W2 I
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
& [7 B0 A `6 |! U* J: b0 E* x# D属性变量的具体影响在此处分析略去。1 u8 m5 C, M3 e4 y. \6 d! X
连续型变量的影响主要为:& M4 |6 e, Y; u5 b+ f4 {
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;9 ]0 F1 A* e- ~3 L
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;2 c4 t6 I# c3 c8 O& H8 C
同时,原本为连续型变量的容积率经过离散化变为属性变量后:3 w* Y8 y* I2 k3 C6 e" a
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;4 ~7 L! L) v% i+ r
容积率与环线之间存在着交互效应。+ n7 w1 A5 S5 U3 J0 Q7 d
rm(list=ls()) #清空当前工作空间
* c* T% R Q0 `, osetwd("D:/回归分析"), F1 o6 C8 K. \! J5 G) g
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a( L# I3 ?: j& {1 h
View(a)
1 N1 m0 J9 U6 Q8 D4 Fattach(a)
$ D' x% i" P$ O. X9 Onames(a)
/ D9 n3 R: k- h' x: l3 `/ |9 e/ S4 f- Z0 W( J
) i# p# {$ \$ y# o2 [$ ~. C
##描述性统计
( y) \% q" G; R1 z9 _
: u! ^, O; d) p) h' i4 `- K+ F! K4 S: p8 E
#未做处理的响应变量分布情况
9 ?9 f% g5 C* Z# R7 J5 D9 A1 t/ W0 epar(mfrow=c(1,1))
$ s8 s, t4 P& ]) P- q1 O7 I _hist(price)
* [' i; f+ s6 R7 a$ Wsummary(price) #查看响应变量的描述统计量
r" m1 z( `' S r7 k0 T#连续型变量描述性统计
0 C1 r+ g( w- E3 h& Ewindows()
3 y9 e( Z: H4 \9 B a6 h9 Npairs(a[,c(6:10)]) #所有连续型变量间的散点图+ T; I( n/ t/ i# X6 q7 w1 N
par(mfrow=c(2,2)) & A5 O2 M$ w d! D, G) v' p3 }
plot(rong,price) #每个连续型因变量与响应变量间的散点图
5 J+ G+ j9 m! J9 [ H$ Xplot(lv,price)4 F) a9 Y4 M) L$ e' w. J+ D
plot(area,price)1 p0 V$ U1 [$ I1 F/ O& j. P
plot(ratio,price)$ S+ o4 i3 K0 i% C! b4 K. X3 H2 m& d* P
summary(a[,c(6:10)]) #查看连续型变量的描述统计量
+ l% u4 u& D; ^. Wcor(a[,c(6:10)]) #查看连续型变量的相关系数2 w* A3 O2 _- q7 z
#属性变量描述性统计. F! W2 h3 r3 \0 N5 D, _3 w
windows()
; B2 @9 J) {$ e. u+ t! Rpar(mfrow=c(2,3)) / [6 T8 R P3 P6 C# ]
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
' _( i y3 y& S, w5 N" sboxplot(price~wuye)
1 J& m/ [( v( r, W# bboxplot(price~fitment)
3 u5 M+ k p0 q' Fboxplot(price~ring) 4 c- a! @# F/ ]) G4 R9 ^+ a
boxplot(price~contype)
) a* U9 j1 ?( q# Z
( Q: l* B: O+ s" C+ D% h! [; b. ^. ~: A' A3 Z* y9 w
% h$ h$ K' Z! N; N; z
9 J2 D9 w6 L5 \8 I! N: Q0 c# L
##模型建立9 H+ G9 q! O' K
+ Z9 ^6 w: p( X K1 M! D
; n2 M/ s% K$ @7 K6 g#在方差分析模型基础上加入连续型变量6 |6 R9 g; ~1 S5 \ _
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)9 d; I+ E* [# t2 Z, g
anova(lm1) #方差分析! g! m. R# }( |/ g
summary(lm1) #模型参数估计等详细结果
8 b$ A \5 C+ [2 Zwindows()
4 N- `' X" c j$ ^par(mfrow=c(2,2))0 h2 {8 g9 ^+ c) c
plot(lm1,which=c(1:4)) #回归诊断做残差图7 N5 \0 q1 @1 v- h. e& K
( K7 Y9 W8 x! O% Y
+ N7 _; G _$ @) L: g$ Q' S) C5 z2 `
1 c x# S3 l8 i6 N/ V+ e
##变量处理5 R; o5 \$ |: r$ q$ K. A0 U
5 d( s. L. Q5 W% }3 Y8 N% j. J9 B9 S: E5 w2 ~! j# \) p2 {* I
###对不显著的变量采用分组的方式希望能达到显著的效果
3 I# J+ f1 z, M##对容积率的处理2 [1 X7 `) a& D) q0 X; p
windows()0 Z: u9 s6 {, M0 o+ {
n = 43 F/ P3 _0 h) i) f# D
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
5 r0 \2 s' I& t/ Ntable(ceiling(rong/n)) #容积率各分组下的样本数- B( k6 m, w: _* z& V
ronggrp=1*(rong>n) #进行二分类
7 @/ z* u% |1 \1 {6 x8 P#ronggrp=ceiling(rong/n) # o! `: V$ H, A7 [! N3 \3 \
table(ceiling(ronggrp)) #容积率二分类下的样本数
. {# _4 ^" `1 w* iwindows()
- o) ]* o3 W9 Uboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图5 O2 @6 {+ A4 N- {( I
windows()
, P8 f! i) q( W& _par(mfrow=c(1,2))
1 S1 ]1 ~, w y3 h3 C- aboxplot(rong~ring) #容积率与环线箱型图+ o' |& j. ^! {) y3 S$ k, s
boxplot(price~ring) #房价与环线箱型图
) ?! [% W6 o8 }" v) w: z; s3 b#加入容积率分组和容积率分组*所在环线交互因子的模型
. z6 y9 j7 p& P! |9 d3 C6 Llm2=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)
3 e$ `9 n. `" u+ o1 S4 N3 E% |anova(lm2) #方差分析
$ V r# o6 [! C ?# Hsummary(lm2) #模型参数估计等详细结果( N+ w3 ?0 F7 E. A3 ^! s! s
windows()
( t+ A: u t* O! Vpar(mfrow=c(2,2))
# P7 T: H' ?0 qplot(lm1,which=c(1:4)) #回归诊断
# @' Q5 b% |, v5 P
, k/ @) Y% G2 c, w- a7 Q' Q1 D! g2 A9 ^; M+ x$ J
##对小区面积的处理
% A3 u5 |/ Z( f# @summary(area)
- a( i' K# Y- p5 O/ |: _9 O6 eplot(area,price)9 L/ K3 \) S$ j8 D
windows()9 A1 j) i, g. l; x9 w
n = 1500003 h/ J' d$ {* [
boxplot(price~ceiling(area/n))
. L9 z) \3 X; @, etable(ceiling(area/n)) 6 p- O3 t5 g% ]% M8 R
areagrp=1*(area>n)
1 {* a- Z7 f, M0 r' A; `& {! `table(ceiling(areagrp))
* q, t. F' m1 j" wboxplot(price~ceiling(areagrp))/ X+ R* O5 v" I
#加入小区面积分组的模型
. `% W7 @, t g$ U% u" p8 klm3=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) C2 B( D: k# z7 ]; J% Z7 ~8 y
anova(lm3) #方差分析; [% E# v0 }) C1 H
summary(lm3) #模型参数估计等详细结果
; c- S) F' W* W% t0 B w$ Vwindows(): @3 }, ?8 D! ^% x
par(mfrow=c(2,2))6 [ W- u2 V2 Y: G- s1 N
plot(lm3,which=c(1:4)) #回归诊断
/ q k5 {1 [3 {+ M& Q
3 W4 _- d4 M4 Y9 ^ C# G
: D: z0 ]& R# _##变量选择5 x- f4 Q6 g) `( x" j, X8 H& z3 D5 w' M4 H
' p- K; `3 i8 `7 y& v s8 t0 U8 E! @) |6 J' h- l. B* b6 f- o
##AIC准则下的变量选择
+ I7 L+ t6 i1 @( C3 \1 W* F9 Klm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
$ J7 z6 Q' ?& b% s- xsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节2 ^6 C( h7 n8 Z/ d$ c# b9 o! e
##BIC准则下的变量选择1 S2 N# \$ g* A" [* m" `' Z; M
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic; i- q- K, u$ }+ t$ ~8 v
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节$ R6 a* }2 K! K1 E2 w+ [: t) B5 V& P& W
/ W# X R2 T5 A" {9 J8 X1 Z* B3 I2 c: X/ U2 G+ A8 s, w5 B: G
#选用AIC准则下的模型进行回归诊断5 t; ?2 P; \! _% Y5 W% a t+ X
windows()
! W' {, K: `# g. Fpar(mfrow=c(2,2))4 {+ k @1 q; S8 O- B
plot(lm4.aic,which=c(1:4))
4 L% P; d3 B! h% H/ T, l. N
6 J: v1 I8 ]6 v
$ n0 f6 u. I! {: i8 U$ ?% u8 d
7 w- B3 @" k! ^6 k2 _0 l: i2 N# ?8 X: [; h
##数据变换
) c8 a! l) }& _ {4 ^7 k9 L
9 b4 \7 W% X; h& u7 }
' ], F/ q4 g6 }, K#box-cox变换
1 H. ^0 S1 G8 l# F. Q: V/ {5 u) Nlibrary(MASS). u4 t9 `* J! k' S- O
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))
8 d4 v7 W G: k, S" B1 {I=which(b$y==max(b$y)) #定位似然函数最大的位置- h& @$ q h% p' `3 c/ I9 @1 K' l
lambda = b$x[I] #精确的λ值
& B; r/ P/ z: L8 P# l4 a#λ接近于0,为模型简洁性,可以直接进行对数变换
' k3 ~+ ^5 \; [, y# G7 ulogprice <- log(price)
' \8 A7 f& ~9 h/ {hist(logprice)
! B, Q5 H, o2 W& M: q/ l3 d/ `% L% v
D- ~! | R' M9 X1 x: x3 v##最终模型与诊断# L0 B9 T- B5 A" y% J' X
. A: ^9 o4 X! k! l$ u7 k" Y) w" Q
; p; ^/ D; T6 y# I+ v; J
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)5 p& J& a. K- S2 Q1 f% n
windows()
6 C2 e4 F4 M. Y( e. Q9 q2 Rpar(mfrow=c(2,2))
3 n2 P J4 e% @4 ]: m4 q1 ~plot(lm6,which=c(1:4))
9 H ^$ z ]6 {1 d' eanova(lm6)$ o3 ~7 k, g' c4 Q5 v: X0 ?/ u
summary(lm6)% u* t7 S0 f- J* D4 r* L
9 ]0 o7 n% Z# I% ~; u3 ^* l
( x6 q" V1 C+ C4 p请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
, Q5 ?; ^% k1 b- f
. R6 Q0 c* I( b/ a0 h3 A% C( W2 u# T* G q" J0 y3 T
$ n: ~: B* f0 w
8 O+ v8 u1 c. L" ~9 d1 a |
zan
|