R与统计分析

本文主要来自<<Modern Applied Statistic with S>>一书

1. 基础知识

(1)factor重命名

#################################################################
# 将因素型转换重新命名
#################################################################
factorTest <- factor(c('just so so ','good', 'better', 'better', 'good', 'best', 'good', 'better'))
factorTest
factorLable <- ordered(factorTest, labels = c(">90", '80-90', '70-80', '<70'))
factorLable


(2)基本操作函数

search()
objects()
rm(list = ls())
find("objects")

(3)单变量统计分析

x <- rt(250, df = 9)
par(pty = "s")
qqnorm(x)
qqline(x)


# 拟合数据属于何种分布,可使用MASS包中的fitdistr()
library(MASS)
x <- rgamma(100, shape = 5, rate = 0.1)
fitdistr(x, 'gamma')

x2 <- rt(250, df = 9)
fitdistr(x2, "t", df = 9)

fitdistr(x2, 't')



data(shoes)
head(shoes)
shoes

(4)数据录入

mydata <- data.frame(id = 1, name = 'Lily', age = 10)
Edit.data(mydata)
fix(mydata)  #更改数据并保存
edit(mydata) #仅修改数据
mydata

2. Linear Statistical Model

(1)方差分析实例

library(MASS)
whiteside
str(whiteside)


?xyplot
xyplot(Gas ~ Temp | Insul, whiteside, panel = function(x, y, ...) {
  panel.xyplot(x, y, ...)
  panel.lmline(x, y, ...)
}, xlab = "Average external temperature(deg.C)", 
ylab = "Gas consumption(1000 cubic feet)",
aspect = "xy",
strip = function(...) strip.default(..., style = 1)
)


?lm
##############################
#构建Insul等于"Before"的模型
##############################
gasB <- lm(Gas ~ Temp, data = whiteside, subset = Insul == 'Before')
##############################
#update用于更改模型
##############################
gasA <- update(gasB, subset = Insul == 'After')
############################################################
#fitted model objects
#对模型的更进一步操作包括:
# print: 简单的display
# summary: 分析output
# coef(coefficient):提取出regression coefficeints
# resid(residuals):残差
# fitted(fitted.values):拟合值
# deviance: redisual sum of squares
# anova:方差分析
# predict:对新数据的means或standard errors的预测
# plot: 诊断图
############################################################


summary(gasB)


summary(gasA)



########################################
# 样本方差分析
########################################
gasB
summary(gasB)
deviance(gasB)
gasB$df.resid
varB <- deviance(gasB)/gasB$df.resid  #直接计算
varB

varB1 <- summary(gasB)$sigma^2  #可供选择的方案,等同于直接计算
varB1


#####################################################################################################
#将两个模型整体到一个里面去
# a/x术语的意义是:a是一个factor,在不同a的水平上x对应的模型
# 本例中 Insul/Temp - 1意思是在不同Insul水平上,对应的Temp模型,- 1表示省略掉截距
#####################################################################################################
gasBA <- lm(Gas ~ Insul/Temp - 1, data = whiteside)
summary(gasBA)


##############################
# 拟合曲线
# 'identity' function I(...)
##############################
gasQ <- lm(Gas ~ Insul/(Temp + I(Temp^2)) - 1, data = whiteside)
summary(gasQ)
summary(gasQ)$coef


##########################################################
# parallel regression
# R: options(contrasts = c("contr.helmert", "contr.poly"))
##########################################################
gasPR <- lm(Gas ~ Insul + Temp, data = whiteside)
gasPR
anova(gasPR, gasBA) #方差分析


#####################################
# 使用不同的参数,分开slopes来拟合模型
#####################################
options(contrasts = c("contr.treatment", "contr.poly"))
gasBA1 <- lm(Gas ~ Insul*Temp, data = whiteside)
summary(gasBA1)$coef


(2)回归诊断实例

模型拟合可通过残差的分析来判断

library(MASS)
head(hills)
str(hills)
(hills.lm <- lm(time ~ dist + climb, data = hills))

frame()  # create/start a new plot frame
par(fig = c(0, 0.6, 0, 1))
??fig
plot(fitted(hills.lm), studres(hills.lm))
abline(h = 0, lty = 2)
identify(fitted(hills.lm), studres(hills.lm), row.names(hills))
par(fig = c(0.6, 1, 0, 1), pty = "s", new = TRUE)
qqnorm(studres(hills.lm))
qqline(studres(hills.lm))
hills.hat <- lm.influence(hills.lm)$hat
cbind(hills, lev = hills.hat)[hills.hat > 3/35, ]




#查看Knock Hill的预测值
cbind(hills, pred = predict(hills.lm))["Knock Hill", ]

(hills1.lm <- update(hills.lm, subset = -18))


#######################################################
# 可以看到踢除Knock Hill对模型参数没有较大影响
# 考虑检测一下其他两个离异点
#######################################################
update(hills.lm, subset = - c(7, 18))
summary(hills1.lm)

summary(update(hills1.lm, weights = 1/dist^2))

lm(time ~ -1 + dist + climb, hills[-18, ], weights = 1/dist^2)




hillsNew <- hills
head(hillsNew)
hillsNew$ispeed <- hillsNew$time/hillsNew$dist
hillsNew$grad <- hillsNew$climb/hillsNew$dist
(hills2.lm <- lm(ispeed ~ grad, data = hillsNew[-18, ]))


frame()
par(fig = c(0, 0.6, 0, 1))
plot(hillsNew$grad[-18], studres(hills2.lm), xlab = 'grad')
abline(h = 0, lty = 2)
identify(hillsNew$grad[-18], studres(hills2.lm), row.names(hillsNew)[-18])
par(fig = c(0.6, 1, 0, 1), pty = 's', new = TRUE)
qqnorm(studres(hills2.lm))
qqline(studres(hills2.lm))



hills2.hat <- lm.influence(hills2.lm)$hat
cbind(hillsNew[-18, ], lev = hills2.hat)[hills2.hat > 1.8*2/34, ]










  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值