R语言--统计(六)
1. 平均值、中位数和模式
- Mean平均值
I. 语法
用于计算R中的平均值的基本语法是 -
mean(x, trim = 0, na.rm = FALSE, ...)
以下是所使用的参数的描述 -
-- x是输入向量。
-- trim用于从排序向量的两端丢弃一些观察结果。
-- na.rm用于从输入向量中删除缺失值。
示例:
# 创建向量
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5)
# 执行
result.mean <- mean(x)
print(result.mean)
打印结果:
图1.png
II. 修剪选项
# 创建向量
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5)
# 执行
result.mean <- mean(x)
print(result.mean)
# 修剪选项
result.mean <- mean(x, trim = 0.3)
print(result.mean)
打印结果:
图2.png
III. NA选项
# NA选项--如果有缺失值,则平均函数返回NA
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5, NA)
result.mean <- mean(x)
print(result.mean)
result.mean <- mean(x, na.rm = TRUE)
print(result.mean)
打印结果:
图3.png
- Median中位数
I. 语法
计算R语言中位数的基本语法是 -
median(x, na.rm = FALSE)
以下是所使用的参数的描述 -
-- x是输入向量。
-- na.rm用于从输入向量中删除缺失值。
II. 示例
# 创建向量
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5)
# 查找中位数
median.result <- median(x)
print(median.result)
打印结果:
图4.png
- Mode模式
I. 模式是一组数据中出现次数最多的值。
II. 示例
# 创建函数
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
# 创建向量
v <- c(2, 1, 2, 3, 1, 2, 3, 4, 1, 5, 5, 3, 2, 3)
# 计算模式
result <- getmode(v)
print(result)
# 创建字符向量
charv <- c("o", "it", "the", "it", "it")
# 获取模式
result <- getmode(charv)
print(result)
打印结果:
图5.png
2. 线性回归
- 方程
线性回归的一般数学方程为 -
y = ax + b
以下是所使用的参数的描述 -
-- y是响应变量。
-- x是预测变量。
-- a和b被称为系数常数。
- 建立回归步骤
1. 进行收集高度和相应重量的观测值的样本的实验。
2. 使用R语言中的lm()函数创建关系模型。
3. 从创建的模型中找到系数,并使用这些创建数学方程
4. 获得关系模型的摘要以了解预测中的平均误差。 也称为残差。
5. 为了预测新人的体重,使用R中的predict()函数。
- LM()函数
此函数创建预测变量和响应变量之间的关系模型。
语法
线性回归中lm()函数的基本语法是 -
lm(formula,data)
以下是所使用的参数的说明 -
-- 公式是表示x和y之间的关系的符号。
-- 数据是应用公式的向量。
- 创建关系模型并获取系数
# 创建关系模型并获取系数
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 应用lm()函数
relation <- lm(y~x)
print(relation)
打印结果:
图6.png
其中a=0.6746, b=-38.4551
- 获取相关的摘要
# 获取相关摘要
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 应用lm()函数
relation <- lm(y~x)
print(summary(relation))
打印结果:
图7.png
-
predict()函数
语法
线性回归中的predict()的基本语法是 -
predict(object, newdata)
以下是所使用的参数的描述 -
-- object是已使用lm()函数创建的公式。
-- newdata是包含预测变量的新值的向量。 -
预测新人的体重
# 预测新人体重
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 应用lm()函数
relation <- lm(y~x)
# 身高170,预测体重
a <- data.frame(x = 170)
result <- predict(relation, a)
print(result)
打印结果:
图8.png
- 以图形方式可视化回归
# 图形方式可视化回归
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 应用lm()函数
relation <- lm(y~x)
# 设置文件名
png(file = "linearregression.png")
# 绘制图表
# 绘制点
plot(y, x, col = "blue", main = "Height & Weight Regression")
# 绘制线
abline(lm(x~y), cex = 1.3, pch = 16, xlab = "Weight in Kg", ylab = "Height in cm")
# 保存文件
dev.off()
效果:
linearregression.png
3. 多重回归
- 方程
多元回归的一般数学方程为 -
y = a + b1x1 + b2x2 +...bnxn
以下是所使用的参数的描述 -
-- y是响应变量。
-- a,b1,b2 ... bn是系数。
-- x1,x2,... xn是预测变量。
- lm()函数
此函数创建预测变量和响应变量之间的关系模型。
语法
lm()函数在多元回归中的基本语法是 -
lm(y ~ x1+x2+x3...,data)
以下是所使用的参数的描述 -
-- 公式是表示响应变量和预测变量之间的关系的符号。
-- 数据是应用公式的向量。
- 创建关系模型并获取系数
# 创建模型并获取系数
input <- mtcars[,c("mpg", "disp", "hp", "wt")]
# 创建关系模型
model <- lm(mpg~disp+hp+wt, data = input)
# 显示模型
print(model)
# 打印系数
cat("# # # # The Coefficient Values # # # ","
")
# 打印系数
a <- coef(model)[1]
print(a)
Xdisp <- coef(model)[2]
Xhp <- coef(model)[3]
Xwt <- coef(model)[4]
print(Xdisp)
print(Xhp)
print(Xwt)
打印结果:
图9.png
4. 逻辑回归
- 逻辑回归
y = 1/(1+e^-(a+b1x1+b2x2+b3x3+...))
以下是所使用的参数的描述 -
-- y是响应变量。
-- x是预测变量。
-- a和b是作为数字常数的系数。
用于创建回归模型的函数是glm()函数。
- 语法
逻辑回归中glm()函数的基本语法是 -
glm(formula,data,family)
以下是所使用的参数的描述 -
-- formula是表示变量之间的关系的符号。
-- data是给出这些变量的值的数据集。
-- family是R语言对象来指定模型的细节。 它的值是二项逻辑回归。
- 创建回归模型
# 创建回归模型
input <- mtcars[,c("am", "cyl", "hp", "wt")]
am.data = glm(formula = am ~ cyl + hp + wt, data = input, family = binomial)
print(summary(am.data))
打印结果:
图10.png
5. 标准分布
- 函数
dnorm(x, mean, sd)
pnorm(x, mean, sd)
qnorm(p, mean, sd)
rnorm(n, mean, sd)
以下是在上述功能中使用的参数的描述 -
-- x是数字的向量。
-- p是概率的向量。
-- n是观察的数量(样本大小)。
-- mean是样本数据的平均值。 它的默认值为零。
-- sd是标准偏差。 它的默认值为1。
- dnorm()
# dnorm() - 该函数给出给定平均值和标准偏差在每个点的概率分布的高度。
x <- seq(-10, 10, .1)
y <- dnorm(x, mean = 2.5, sd = 0.5)
# 设置文件名
png(file = "dnorm.png")
# 绘制点
plot(x,y)
dev.off()
效果:
dnorm.png
- pnorm()
# pnorm() - 该函数给出正态分布随机数的概率小于给定数的值。 它也被称为“累积分布函数”。
x <- seq(-10, 10, .2)
y <- pnorm(x, mean = 2.5, sd = 2)
# 设置文件名
png(file = "pnorm.png")
# 绘制点
plot(x, y)
dev.off()
效果:
pnorm.png
- qnorm
# qnorm() - 该函数采用概率值,并给出累积值与概率值匹配的数字。
x <- seq(0, 1, by = 0.02)
y <- qnorm(x, mean = 2, sd = 1)
# 设置文件名
png(file = "qnorm.png")
plot(x, y)
dev.off()
效果:
qnorm.png
- rnorm()
# rnorm() - 此函数用于生成分布正常的随机数。 它将样本大小作为输入,并生成许多随机数。 我们绘制一个直方图来显示生成的数字的分布。
y = rnorm(50)
png(file = "rnorm.png")
hist(y, main = "Normal Distribution")
dev.off()
效果:
rnorm.png
6. 二项分布
- 函数
dbinom(x, size, prob)
pbinom(x, size, prob)
qbinom(p, size, prob)
rbinom(n, size, prob)
以下是所使用的参数的描述 -
-- x是数字的向量。
-- p是概率向量。
-- n是观察的数量。
-- size是试验的数量。
-- prob是每个试验成功的概率。
- dbinom()
x = seq(0, 50, 1)
y = dbinom(x, 50, 0.5)
png(file = "dbinom.png")
plot(x, y)
dev.off()
效果:
dbinom.png
- pbinom()
# pbinom() - 此函数给出事件的累积概率。 它是表示概率的单个值。
x <- pbinom(26, 51, 0.5)
print(x)
打印结果:
图11.png
- qbinom()
# qbinom() - 该函数采用概率值,并给出累积值与概率值匹配的数字。
x <- qbinom(0.25, 51, 1/2)
print(x)
打印结果:
图12.png
- rbinom()
# rbinom() - 该函数从给定样本产生给定概率的所需数量的随机值。
x <- rbinom(8, 150, .4)
print(x)
打印结果:
图13.png
7. 泊松分布
- 数学方程
log(y) = a + b1x1 + b2x2 + bnxn.....
以下是所使用的参数的描述 -
- y是响应变量。
- a和b是数字系数。
- x是预测变量。
用于创建泊松回归模型的函数是glm()函数。 - glm()语法
glm(formula,data,family)
以下是在上述功能中使用的参数的描述 -
-- formula是表示变量之间的关系的符号。
-- data是给出这些变量的值的数据集。
-- family是R语言对象来指定模型的细节。 它的值是“泊松”的逻辑回归。
- 创建回归
# 创建回归模型
# 内置的数据集“warpbreaks”
output <- glm(formula = breaks ~ wool + tension,
data = warpbreaks,
family = poisson
)
print(summary(output))
打印结果:
图14.png
8. 协方差分析
- 模型与分类变量和预测变量之间的相互作用
# 模型与分类变量和预测变量之间的相互作用
result <- aov(mpg~hp*am, data = mtcars)
print(summary(result))
打印结果:
图15.png
- 没有分类变量和预测变量之间相互作用的模型
# 没有分类变量和预测变量之间相互作用的模型
result <- aov(mpg~hp+am, data = mtcars)
print(summary(result))
打印结果:
图16.png
- 比较两个模型
# 比较两个模型
input <- mtcars
result1 <- aov(mpg~hp*am, data = input)
result2 <- aov(mpg~hp+am, data = input)
# 比较两个模型
print(anova(result1, result2))
打印结果:
图17.png
9. 时间序列分析
- 语法
timeseries.object.name <- ts(data, start, end, frequency)
以下是所使用的参数的描述 -
-- data是包含在时间序列中使用的值的向量或矩阵。
-- start以时间序列指定第一次观察的开始时间。
-- end指定时间序列中最后一次观测的结束时间。
-- frequency指定每单位时间的观测数。
除了参数“data”,所有其他参数是可选的。
- 单时间序列
# 单时间序列
rainfall <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)
# 转换为时间序列对象
rainfall.timeseries <- ts(rainfall, start = c(2012, 1), frequency = 12)
print(rainfall.timeseries)
# 设置图片
png(file = "rainfall.png")
# 绘图
plot(rainfall.timeseries)
# 保存图片
dev.off()
打印结果:
图18.png
效果:
rainfall.png
- 不同的时间间隔
ts()函数中的频率参数值决定了测量数据点的时间间隔。 值为12表示时间序列为12个月。 其他值及其含义如下 -
-- 频率= 12指定一年中每个月的数据点。
-- 频率= 4每年的每个季度的数据点。
-- 频率= 6每小时的10分钟的数据点。
-- 频率= 24 * 6将一天的每10分钟的数据点固定。 - 多时间序列
# 多时间序列
rainfall1 <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)
rainfall2 <- c(655,1306.9,1323.4,1172.2,562.2,824,822.4,1265.5,799.6,1105.6,1106.7,1337.8)
# 转换为矩阵
combined.rainfall <- matrix(c(rainfall1, rainfall2), nrow = 12)
# 转换为时间序列
rainfall.timeseries <- ts(combined.rainfall, start = c(2012, 1), frequency = 12)
print(rainfall.timeseries)
# 设置文件名
png(file = "rainfall_combined.png")
# 绘制点
plot(rainfall.timeseries, main = "Multiple Time Series")
# 保存文件
dev.off()
打印结果:
图19.png
效果:
rainfall_combined.png
10. 非线性最小二乘
- 语法
nls(formula, data, start)
以下是所使用的参数的描述 -
-- formula是包括变量和参数的非线性模型公式。
-- data是用于计算公式中变量的数据框。
-- start是起始估计的命名列表或命名数字向量。
- 示例
# 非线性最小二乘法
xvalues <- c(1.6,2.1,2,2.23,3.71,3.25,3.4,3.86,1.19,2.21)
yvalues <- c(5.19,7.43,6.94,8.11,18.75,14.88,16.06,19.12,3.21,7.58)
# 设置图片
png(file = "nls.png")
# 绘图
plot(xvalues, yvalues)
# 取假设值并适合模型。
model <- nls(yvalues ~ b1 * xvalues^2 + b2, start = list(b1 = 1, b2 = 3))
# 绘制图表
new.data <- data.frame(xvalues = seq(min(xvalues), max(xvalues), len = 100))
lines(new.data$xvalues, predict(model, newdata = new.data))
# 保存文件
dev.off()
# 获取model平法和
print(sum(resid(model)^2))
# 获得所选系数值的置信区间。
print(confint(model))
打印结果:
图20.png
效果图:
nls.png
11. 决策树
- 安装包
# 安装包 -- party包中用于创建和分析决策树的函数ctree()
install.packages("party", repos="https://cran.cnr.berkeley.edu/")
- 语法
ctree(formula, data)
以下是所使用的参数的描述 -
-- formula是描述预测变量和响应变量的公式。
-- data是所使用的数据集的名称。
- 创建决策树
# 创建决策树
library(party)
# 创建输入数据帧
input.data <- readingSkills[c(1:105),]
# 设置文件名
png(file = "decision_tree.png")
# 创建树
output.tree <- ctree(
nativeSpeaker ~ age + shoeSize + score,
data = input.data
)
# 绘图
plot(output.tree)
# 保存文件
dev.off()
打印结果:
图21.png
效果:
decision_tree.png
12. 随机森林算法
- 安装包
# 安装包 -- randomForest具有函数randomForest(),用于创建和分析随机森林。
install.packages("randomForest", repos="https://cran.cnr.berkeley.edu/")
- 语法
randomForest(formula, data)
以下是所使用的参数的描述 -
formula是描述预测变量和响应变量的公式。
data是所使用的数据集的名称。
- 创建森林
library(party)
library(randomForest)
# 创建森林
output.forest <- randomForest(nativeSpeaker ~ age + shoeSize + score, data = readingSkills)
print(output.forest)
print(importance(output.forest, type = 2))
打印结果:
图22.png
13. 生存分析
- 语法
Surv(time,event)
survfit(formula)
以下是所使用的参数的描述 -
-- time是直到事件发生的跟踪时间。
-- event指示预期事件的发生的状态。
-- formula是预测变量之间的关系。
- 应用生存分析
# 应用函数
library("survival")
# 创建生存对象
survfit(Surv(pbc$time, pbc$status == 2) ~ 1)
# 设置文件名
png(file = "survival.png")
# 绘制图
plot(survfit(Surv(pbc$time, pbc$status == 2) ~ 1))
# 保存
dev.off()
打印结果:
图23.png
效果图:
survival.png
14. 卡方检验
- 语法
chisq.test(data)
以下是所使用的参数的描述 -
-- data是以包含观察中变量的计数值的表的形式的数据。
- 卡方校验
# 卡方检验
library("MASS")
# 创建数据帧
car.data <- data.frame(Cars93$AirBags, Cars93$Type)
# 创建表
car.data = table(Cars93$AirBags, Cars93$Type)
print(car.data)
# 卡方校验
print(chisq.test(car.data))
打印结果:
图24.png