对于一项作业,我正在R上使用带有mixtools包的混合物建模。当我尝试使用bootstrap找出最佳数量的组件时。我收到以下错误
Error in boot.comp(y, x, N = NULL, max.comp = 2, B = 5, sig = 0.05, arbmean = TRUE, :
Number of trials must be specified!
我发现我必须填写N:逻辑回归类型logisregmix的试验次数的n-向量。如果 为NULL时,N是二进制逻辑回归的1s的n向量。
但是,我不知道如何找出N到底是什么使我的引导程序起作用。
链接到我的代码: https://www.kaggle.com/blastchar/telco-customer-churn
我的代码:
data <- read.csv("Desktop/WA_Fn-UseC_-Telco-Customer-Churn.csv", stringsAsFactors = FALSE,
na.strings = c("NA", "N/A", "Unknown*", "NULL", ".P"))
data <- droplevels(na.omit(data))
data <- data[c(1:5032),]
testdf <- data[c(5033:7032),]
data <- subset(data, select = -customerID)
set.seed(100)
library(plyr)
library(mixtools)
data$Churn <- revalue(data$Churn, c("Yes"=1, "No"=0))
y <- as.numeric(data$Churn)
x <- model.matrix(Churn ~ . , data = data)
x <- x[, -1] #remove intercept
x <-x[,-c(7, 11, 13, 15, 17, 19, 21)] #multicollinearity
a <- boot.comp(y, x, N = NULL, max.comp = 2, B = 100,
sig = 0.05, arbmean = TRUE, arbvar = TRUE,
mix.type = "logisregmix", hist = TRUE)
以下是有关我的预测变量的更多信息:
dput(x [1:4,]) 结构(c(0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1, 34、2、45、0、1、1、0、0、0、0、0、0、0、0、0、0、0、0、0, 1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0, 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0, 0、0、1、1、0、29.85、56.95、53.85、42.3、29.85、1889.5、108.15, 1840.75),.Dim = c(4L,23L),.Dimnames = list(c(“ 1”,“ 2”,“ 3”, “ 4”),c(“ genderMale”,“ SeniorCitizen”,“ PartnerYes”,“ DependentsYes”, “使用权”,“ PhoneService是”,“ MultipleLinesYes”,“ InternetServiceFiber Optical”, “ InternetServiceNo”,“ OnlineSecurityYes”,“ OnlineBackupYes”, “ DeviceProtectionYes”,“ TechSupportYes”,“ StreamingTVYes”,“ StreamingMoviesYes”, “合同一年”,“合同两年”,“无纸账单是”, “ PaymentMethod信用卡(自动)”,“ PaymentMethod电子支票”, “ PaymentMethodMailed支票”,“ MonthlyCharges”,“ TotalCharges” )))
我的响应变量是二进制
我希望你们能帮助我!
答案 0 :(得分:2)
看一下mixtools::boot.comp
的源代码,这很可怕,因为它的长度超过800行,并且非常需要重构,令人讨厌的行是:
if (mix.type == "logisregmix") {
if (is.null(N))
stop("Number of trials must be specified!")
尽管文档说了什么,但必须指定N
。
尝试将其设置为1s的向量:N = rep(1, length(y))
或N = rep(1, nrow(x))
实际上,如果您查看mixtools::logisregmixEM
调用的内部函数boot.comp
,则将看到N
的{{1}}设置:
NULL
太糟糕了,如果n <- length(y)
if (is.null(N)) {
N = rep(1, n)
}
为N
,这将永远无法实现,因为它以前因错误而停止。这是一个错误。