- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40150 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12756
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
发表于 2021-10-27 14:50
|显示全部楼层
|
【R语言】回归分析案例:北京市商品房价格影响因素分析; ?+ R, n' q# d" I: @
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。: }% J8 O, t4 ?% Z* m/ g
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: 
% Y6 r5 Q" z& _行描述性统计分析,各连续型变量之间的相关关系如下:
3 V7 ~7 {3 w, H
: O! @; d- n* v$ i名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
% ^& K- i; i) J3 M$ s- j
H, B8 A8 R, h( Y+ Y( ]: v + F+ y1 X9 I% H
最终模型残差图:, `+ k- ^% U5 G+ k/ }

/ I! K# C) G) ?* v6 L, N+ x6 e通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
! r1 P& k& b5 i# `$ X属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
1 x/ v( r' v6 P2 @' k属性变量的具体影响在此处分析略去。6 w2 ]* V6 W: k% \( u
连续型变量的影响主要为:
# q# D1 W! [: `% d) {$ b 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
" q' B% P/ f' z6 V$ v8 o- D/ ` 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;. K" ?. N/ k6 `+ u7 i
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
+ F3 W9 G7 \) I/ i4 B! v) p. a7 a' i 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;' {* }9 \. J8 J
容积率与环线之间存在着交互效应。* @4 v8 X4 L" ~- A1 p
rm(list=ls()) #清空当前工作空间% l G/ L' V$ h. R: ~3 k. `
setwd("D:/回归分析")
) |! ], O5 S+ @9 W) r: ua=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a3 ^9 x, L$ V' |9 I e; ?
View(a)
: ]" C. H* r( {% U5 B: Sattach(a)" Q6 _) w& T" E; h1 Y) N
names(a)
" s& ~5 }4 c2 [5 z$ C* K, V# a# n3 g$ I0 ^: j, j4 q* y: j
: Y5 T4 x# L" u. Q$ ]# z8 u
##描述性统计
7 e, {: F& P0 ?: @1 L6 r2 l/ E! \' ^# K4 ?. u
( a4 h) _) S& |/ Q
#未做处理的响应变量分布情况
$ y! I# n" m6 K5 O" }7 H5 Mpar(mfrow=c(1,1))
" y8 F. O" u# ]5 g* Y8 mhist(price)8 _$ G, u" H9 V0 b
summary(price) #查看响应变量的描述统计量( F% a( }8 s3 ~8 Y
#连续型变量描述性统计 a& r% P. n; A' d' Q' `
windows()7 ^; O8 H4 i3 t$ J# z, C
pairs(a[,c(6:10)]) #所有连续型变量间的散点图/ c# Q3 E' C& ~8 m
par(mfrow=c(2,2))
; q" f; o% a0 h u) Bplot(rong,price) #每个连续型因变量与响应变量间的散点图
# a }2 y* K, d x6 Y) Bplot(lv,price)- r" @: ]/ g4 f8 g7 d4 R$ C7 _8 A! ?
plot(area,price)( U, o$ t4 T' o) A5 h$ J
plot(ratio,price)$ x k. |- N ?5 a7 o: s
summary(a[,c(6:10)]) #查看连续型变量的描述统计量$ p% |* z- m; }* W) P
cor(a[,c(6:10)]) #查看连续型变量的相关系数; {/ u! K9 G! D; J1 S+ v+ M
#属性变量描述性统计
+ Z& Y2 J, m9 @4 kwindows()6 J6 ]8 t3 v* k6 ]2 }& d
par(mfrow=c(2,3)) 7 G% ^( N( k. k' b S1 B v
boxplot(price~dis) #每个属性变量关于响应变量的箱型图5 C. f- I5 i9 w% v3 ~
boxplot(price~wuye) . a! }% c1 x/ f3 l6 Y/ Q
boxplot(price~fitment) 0 y- \/ {; n: s* J" B" C5 q' {. r" O
boxplot(price~ring) % Z% G, Z. p+ p/ y! C8 ^' k
boxplot(price~contype)8 C$ f0 q9 U6 x7 H2 }
7 o: ~, B4 G' u& y4 v" t) Z8 C
0 m$ f% B. H4 D0 \" G) S0 w6 W; N
, o- _- V1 q+ B" l( n- E% |$ V# {+ E ~5 ]/ x- ]0 u
##模型建立
( f. A; t; D' X1 j& U: v& P" c& {1 V! Q3 O; |& e$ X
( Q! ]9 x+ k& M* e+ h- {+ n6 f2 G+ |
#在方差分析模型基础上加入连续型变量
# D$ ^8 r l6 B0 mlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
+ J2 C3 M2 e+ o. M5 B1 Ianova(lm1) #方差分析
8 {' U) T3 K- ^) Msummary(lm1) #模型参数估计等详细结果: e) F m' }/ t6 K
windows() W3 W7 L# j( X# D) Y* _& W
par(mfrow=c(2,2))
+ u3 [ K( f1 }! Q- n; fplot(lm1,which=c(1:4)) #回归诊断做残差图' V5 w- l7 Z! c3 q( x0 t
1 P% b9 d' E( k0 V6 i
. p7 J" }" k) |# h- J) F* q2 D1 F
3 h) B* s2 Z& i% `$ y- A4 s4 F' k4 W4 I
##变量处理
" G- n, t. b! p. G$ o5 z. w- A& t/ A
0 i B- I( i* i3 A9 u###对不显著的变量采用分组的方式希望能达到显著的效果
" z% H, V. R$ ^##对容积率的处理 F: F( P7 }9 b @
windows()2 e* m# m& K0 N8 z$ i! R
n = 48 h& U' _5 B; I! R1 Q
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 8 q. E/ z! x4 x# f$ T i
table(ceiling(rong/n)) #容积率各分组下的样本数
; X8 v3 i2 I# Fronggrp=1*(rong>n) #进行二分类
: Z/ v0 C$ W M6 M6 Z4 M0 S* \6 f#ronggrp=ceiling(rong/n) ( j& R. }5 ?' v' N; D
table(ceiling(ronggrp)) #容积率二分类下的样本数
( b' ?3 ? N2 ^- Wwindows()0 e& @) g# S6 _# p% D7 v+ E4 {
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
! c1 R) w7 A) R7 }+ f% x+ iwindows()
) `" W1 J' v! x9 P& K: Wpar(mfrow=c(1,2))
3 _- g. O( h+ t5 s+ h+ O9 r. bboxplot(rong~ring) #容积率与环线箱型图! q6 k+ o" H/ a6 N
boxplot(price~ring) #房价与环线箱型图
9 E' K1 |4 N5 D5 E+ H" P' i' `' y#加入容积率分组和容积率分组*所在环线交互因子的模型8 @ j* k7 i# U% `0 G3 \( n
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); G, R" J& a! U3 [
anova(lm2) #方差分析
2 Q6 N* F: ~1 B; G; ?summary(lm2) #模型参数估计等详细结果
! j2 E5 ~( Z- \% A/ g2 Z ]windows()
5 q& ^5 `3 Y3 `. p: g5 O8 kpar(mfrow=c(2,2))
5 j, O# I4 Z) S; b# [# pplot(lm1,which=c(1:4)) #回归诊断 P# q4 }' u# X( T9 D j- b# |4 a3 B
- r9 }, C/ b+ M+ g- f% ?3 `" A- R5 k _: m% X
##对小区面积的处理
4 U$ c) M1 j! G, ?2 V$ z3 xsummary(area)
& D) b% D) ^% ]% A* y8 D$ iplot(area,price)
' a" b5 t/ X6 B1 _; Jwindows()% H6 V1 i- M+ p
n = 1500004 F0 {4 Q4 O# B, \8 g
boxplot(price~ceiling(area/n))
8 [, U9 K7 B5 v- X& O, utable(ceiling(area/n)) - o9 j3 u" h8 ?! _/ I
areagrp=1*(area>n)# ], t! U0 M. `
table(ceiling(areagrp))
: K: M3 d$ o4 K" sboxplot(price~ceiling(areagrp))
- [+ V7 R8 m0 Z; f1 L0 ~1 ~! ?5 j) J#加入小区面积分组的模型
9 w Y2 S" w% u4 b3 s, E/ 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)) U; H3 h2 [' ?% Z( X
anova(lm3) #方差分析
; h- e L9 C& o, C- Csummary(lm3) #模型参数估计等详细结果
+ n1 f5 n4 J- _* i: uwindows()1 S( ?/ m" [) w/ b* u& |
par(mfrow=c(2,2))
) A9 x) Z% y! O. h7 L5 |plot(lm3,which=c(1:4)) #回归诊断) \! B# |6 e4 _9 _+ `
* @# Z# K. J8 j& N Y& B
( V8 g- N/ U' j##变量选择. S. ~( p$ N9 T! P
1 x$ {! C1 G _- F6 p6 ]
. F. E6 b, d! V1 a* S* N##AIC准则下的变量选择" @" G! a7 Q& ?1 S
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
7 g Z; l- @/ }' p+ Csummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
7 ^9 |$ }! I. Z1 p% L##BIC准则下的变量选择8 D# z% ~! R2 V$ g
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic2 S7 {3 i8 A8 F+ J2 t
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节0 |3 v) y: A2 _: g
# W; [) [6 G7 z3 r/ x1 J9 Z% g. u" Z" W: r3 u) }5 ]6 Y8 I
#选用AIC准则下的模型进行回归诊断. V! |# Q% y: j: R: E r4 x
windows()7 j$ F f+ g6 a$ ^, z6 a
par(mfrow=c(2,2))
1 \6 \* [3 s. f3 c1 Vplot(lm4.aic,which=c(1:4))
2 Z1 O; `6 ^ m! a1 m$ {0 F8 G) f9 |1 T' E/ _* `
1 W$ i( L& q- L* E0 f T7 s; F
) X7 T( g, j& R5 q4 l. z' y
##数据变换& J/ n3 \8 F% x5 h1 f8 f
2 `5 ]7 r$ o2 X9 f, L) _) e" r# k# q3 g% O2 G
#box-cox变换
1 ]7 D% a& u- D1 n6 t7 Y( \7 mlibrary(MASS)" U7 B- a" l5 ^( q
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))
2 `4 U# g# v4 ]- e: XI=which(b$y==max(b$y)) #定位似然函数最大的位置8 F# ^' A. q" X" |5 Q% h M
lambda = b$x[I] #精确的λ值" f6 t* ?8 N, ^+ N4 R8 |# e! A- y6 B
#λ接近于0,为模型简洁性,可以直接进行对数变换
: s+ E6 R% ~1 E: q( t5 f; t" Mlogprice <- log(price)
$ {7 K9 a2 [+ r9 v6 x- ahist(logprice)
0 q- O/ P$ O! s( m' O% ^2 s, I5 O! a" u
9 T9 @& Z! \" R# {; K2 l5 T# |8 ]5 s3 A/ L
##最终模型与诊断
; h5 l L8 x1 |
+ X- q" @9 E7 R' [4 x% \: |8 j; Q1 [! [! \* d8 S6 O |) u8 |0 U
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
: s" I8 @9 F$ t, u' {1 gwindows()
2 P9 T, r2 }' M1 Wpar(mfrow=c(2,2))
0 i* V4 }$ r$ R% Mplot(lm6,which=c(1:4))( \ a& Q8 n" ` z, Q& k; u
anova(lm6)
7 K, Z- U, f# qsummary(lm6)
" a2 M1 |! l9 J) ~5 |0 E" {& K4 G+ S; u" P5 p
6 s9 W* { Y7 O" j1 f
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560- O6 g. j1 m: b6 |
7 i9 n, c6 J8 H' y* Y* @6 `; f* p- ]* i: g
* x8 D) ]! U; R" |2 D5 ?, S6 N" ?3 r; G$ m! E h. h
|
zan
|