尝试运行逻辑回归模型,但不确定optim()和ggplot2的用法

时间:2019-02-14 10:28:16

标签: r optimization ggplot2 logistic-regression

我的代码的第一大部分是要我生成2个向量。

我的代码的第二大部分是应用给定的逻辑回归模型。我不确定要在optim()中输入什么参数来运行我的逻辑回归模型,该参数就在代码末尾。

我的代码的第三大部分是使用ggplot和合适的geom_xxx来绘制我在第一批代码中创建的向量。我在使用ggplot2时遇到问题。

我创建了2个矢量来运行模型:Predictor变量如下: 长度为200的单个向量,其中前半部分为N(-5,5),后半部分为N(4,8)。 ->命名为Uni_dataframe

响应向量如下: 向量的前半部分= 0,后半部分=1。->名为Uni_resp_vector

# Create an empty vector will 200 variables
df_vector <- c(1:200)

# For the first 100 variables, 
for (i in 1: 100) {
# Set the normal distribution with mean -5 and sd 5
v1 <- rnorm(100, -5,5)

# For the second 100
for (i in 101:200) 
# Set the normal distribution with mean 4 and sd 8
v2 <- rnorm(100,4,8)
}

# Input the vales of v1 and v2 into a data frame 
df_vector <- data.frame(v1,v2)

# Combine the 2 columns of data into one single vector with a length of 200
Uni_dataframe <- data.frame(d = unlist(df_vector, use.names = FALSE))


# Create another vector with first half of the values = 0 and second half = 1
resp_vector <- c(1:200)

# For the first 100 variables
for (i in 1:100) {

# Set the first 100 variables = 0
resp1 <-(rep(0, times = 100 ))

# For the second 100 variables   
for (i in 101:200)
# Set the second 100 variables = 1
resp2 <- (rep(1, times = 100 ))
}

# Input both resp1 and resp 2 into a data frame
resp_vector <- data.frame(resp1, resp2)

# Combine the 2 columns of data into a single vector with length 100
Uni_resp_vector <- data.frame (d = unlist(resp_vector))

x <- Uni_dataframe
y <- Uni_resp_vector

接下来,我将在已提供的逻辑回归模型上运行x和y:

# implements log likelihood function
log.likelihood(params, x, y)

# optimizes log likelihood function given a training set
logistic.fit(xtrain, ytrain)

# makes a prediction given a set of parameters and observations
logistic.predict(xtest, fit)

log.likelihood = function(params, x, y) {

x = cbind(rep(1, nrow(x)), x) 
Bx.sum = params %*% t(x) 
t1 = sum((1-y)*Bx.sum)
t2 = sum(log(1+sapply(-Bx.sum, exp, simplify=T)))

likelihood = -(t1+t2)
return(-likelihood) 
}


theta <- (0,2)

model <- optim(par = theta , fn = log.likelihood, x = Uni_dataframe, y = Uni_resp_vector, method='BFGS')

这是我尝试绘制创建的矢量的图:

library ("ggplot2")
library ("dplyr")
library ("tidyr")
# Combine both created data frames: 

# Create a new data frame with the index
df <- data.frame(Uni_dataframe, Uni_resp_vector)
xx <- unlist(Uni_dataframe)
yy <- unlist (Uni_resp_vector)
ggplot(data = df, aes(x = xx, y = yy)) + geom_point() 

接下来,我需要绘制所创建的数据,即使用ggplot的矢量。但是,我收到一条错误消息:

ggplot(data = df,aes(x = Uni_dataframe,y = Uni_resp_vector))+ geom_point()

不知道如何为data.frame类型的对象自动选择比例。默认为连续。

不知道如何为data.frame类型的对象自动选择比例。默认为连续。

is.finite(x)中的错误:类型'list'未实现默认方法

enter image description here

我非常确定我的情节不会像这样,因为之后我必须使用glm进行情节。

这是一个要回答的问题,我事先很抱歉,但是我被困了几个小时,试图弄清楚我是否正确应用了给定的逻辑回归模型,以及如何使用ggplot绘制向量。任何帮助将不胜感激,谢谢。

0 个答案:

没有答案