-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMultinomial_Log-linear_Models_R.rmd
72 lines (55 loc) · 1.61 KB
/
Multinomial_Log-linear_Models_R.rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
---
title: "多元羅吉斯迴歸 (Multinomial Log-linear Models)"
author: "JianKai Wang (https://sophia.ddns.net/)"
date: "2018年3月14日"
output: html_document
---
多元羅吉斯迴歸主要由二元羅吉斯迴歸推廣至多元應用,可用於迴歸多組應變數的狀況。
底下範例是透過 **nnet** 套件中的 **multinom** 函式完成,應用神經網路達成。
### 套件安裝
於 R 中套件 nnet 提供 glm.fit 函式。
```{r}
if(!("nnet" %in% rownames(installed.packages()))) {
install.packages("nnet")
}
library("nnet")
```
### 資料準備
使用 r 內建的 iris3 資料中 Setosa 與 Versicolor 兩類作為範例。
```{r}
# 定義樣本數
sample_size = 150
# 產生資料
data <- data.frame(
cbind(
rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
y = rep(c("s","c","v"), rep(50,3))
)
)
colnames(data) <- c("x1","x2","x3","x4","y")
# 資料型態轉換成小數
data$x1 <- as.numeric(data$x1)
data$x2 <- as.numeric(data$x2)
data$x3 <- as.numeric(data$x3)
data$x4 <- as.numeric(data$x4)
# 訓練與測試資料
train = sample(1:sample_size, sample_size/2)
training_data = data[train,]
testing_data = data[-train,]
```
### 模型建立
```r
# multinom prototype
# |- formula: a formula expression as for regression models, of the form response ~ predictors
# |- data: 資料
multinom(formula, data, ...)
```
```{r}
glm.fit <- multinom(y~., data=training_data)
summary(glm.fit)
```
### 預測資料
```{r}
predict(glm.fit, testing_data, "probs")
```
由上可以看出每筆測試資料與哪一個組別機率最大。