Я очень новичок в R, и я создаю функцию для вычисления индекса Furnival, пытаясь сделать его более чистым, где пользователю нужно будет только вставить скорректированную модель. У меня возникли проблемы с определением того, является ли преобразование журнала в модели естественным или любым другим видом, потому что индекс изменится в соответствии с этой информацией. Поэтому я решил вычислить эту информацию, используя a = b^1/x, где «a» - это база логарифмов, «x» и «b» - это информация формулы с/без преобразования журнала соответственно. Но для этого мне нужно исходное значение из модели, потому что, используя «модель $ model», я получаю только значение логарифма.R: извлекать оригинальные значения из формулы модели
Вот что я сделал до сих пор:
furnival=function(object=NULL)
{
w <- object$weights
if(!is.null(object) && is.numeric(object))
stop("'object' must be a formula")
if(is.null(w <- object$weights)){
w <- 1
}else{
w
}
if(length(grep("log", formula(object)))!=0){
y <- as.numeric(as.matrix(object$model[1L]))
modelValues <- object[Something to identify the original value]
routine <- object$model == 1
if(any(routine))
modelValues[!routine]
modelValues <- sample(modelValues,1)
a <- modelValues^(1/y)
if(grep("log", formula(object))[1L]==2)
y <- a^y
if(a == exp(1)){
df <- df.residual(object)
MSE <- sum((residuals(object)^2)*w)
index <- (exp(mean(log(y))))*(sqrt(MSE/df))
return(index)
}else{
df <- df.residual(object)
MSE <- sum((residuals(object)^2)*w)
index <- (a^(mean(log(y,a))))*(sqrt(MSE/df))*(log(exp(1),a)^-1)
return(index)
}
}
else{
df <- df.residual(object)
MSE <- sum((residuals(object)^2)*w)
index <- sqrt((MSE/df))
return(index)
}
}
Если есть какой-то способ сделать это, или даже если есть более разумный способ, чтобы сделать эту функцию.
Можете ли вы также показать, как вы передаете значения этой функции? Возможно, вы можете показать образцы моделей с разными 'log' и показать, что именно вы хотите, чтобы желаемое поведение было для каждого из этих разных случаев. Кроме того, кажется, что некоторые из этих кодов действительно не нужны, чтобы сделать * минимальный * [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible -пример). Попытайтесь сосредоточиться на очень конкретном вопросе/задаче и удалите все, что не нужно, чтобы помочь вам решить вашу проблему. – MrFlick
Это первое, что я задаю здесь вопрос, я не очень хорошо знал, как это задавать. Извините за неудобное. Некоторые примеры того, что я пытаюсь сделать, следующие: mod <- lm (log (z) ~ y) или даже mod2 <- lm (log (z, 10) ~ y) С этой информацией i хотите извлечь базу данных. С идеей, что у меня было то, что используется a = b^1/x, «a» будет основой журнала, «b» будет исходным значением без преобразования, только «z» в примере и «x» преобразованное значение в примере «log (z)». Я достиг, чтобы получить значение log (z), но я не понял, как получить только «z». – somoto
Как получить прогноз от модели на двух разных наборах значений предиктора (используя «pred (model, newdata = data.frame (...))» и сравнить их? Разумно выбрав эти два параметра предиктора, должен быть в состоянии определить, какая база логарифма была использована. – rvl